├── Butler ├── LICENSE.md ├── Merging_RAVENNA_Daemon ├── VERSION ├── merging_ravenna_daemon.conf └── webapp │ └── advanced │ ├── dijit │ └── themes │ │ └── tundra │ │ ├── Calendar.css │ │ ├── Calendar_rtl.css │ │ ├── ColorPalette.css │ │ ├── Common.css │ │ ├── Dialog.css │ │ ├── Dialog_rtl.css │ │ ├── Editor.css │ │ ├── Editor_rtl.css │ │ ├── Menu.css │ │ ├── Menu_rtl.css │ │ ├── ProgressBar.css │ │ ├── TimePicker.css │ │ ├── TimePicker_rtl.css │ │ ├── TitlePane.css │ │ ├── TitlePane_rtl.css │ │ ├── Toolbar.css │ │ ├── Tree.css │ │ ├── Tree_rtl.css │ │ ├── form │ │ ├── Button.css │ │ ├── Checkbox.css │ │ ├── Common.css │ │ ├── RadioButton.css │ │ ├── Select.css │ │ ├── Slider.css │ │ └── Slider_rtl.css │ │ ├── images │ │ ├── accordionItemActive.gif │ │ ├── accordionItemHover.gif │ │ ├── buttonActive.png │ │ ├── buttonDisabled.png │ │ ├── buttonEnabled.png │ │ ├── buttonHover.png │ │ ├── calendarDayLabel.png │ │ ├── calendarMonthLabel.png │ │ ├── calendarYearLabel.png │ │ ├── checkmark.gif │ │ ├── checkmark.png │ │ ├── checkmarkNoBorder.gif │ │ ├── checkmarkNoBorder.png │ │ ├── circleIcon.gif │ │ ├── circleIcon.png │ │ ├── comboArrowDown.gif │ │ ├── dijitProgressBarAnim.gif │ │ ├── dijitProgressBarAnim.psd │ │ ├── dndCopy.png │ │ ├── dndMove.png │ │ ├── dndNoCopy.png │ │ ├── dndNoMove.png │ │ ├── dojoTundraGradientBg.gif │ │ ├── dojoTundraGradientBg.png │ │ ├── doubleArrowDown.png │ │ ├── doubleArrowUp.png │ │ ├── folderClosed.gif │ │ ├── folderOpened.gif │ │ ├── i.gif │ │ ├── i_half.gif │ │ ├── i_half_rtl.gif │ │ ├── i_rtl.gif │ │ ├── leaf.gif │ │ ├── loading.gif │ │ ├── menu.png │ │ ├── minusButton.gif │ │ ├── no.gif │ │ ├── noX.gif │ │ ├── plusButton.gif │ │ ├── popupMenuBg.gif │ │ ├── preciseSliderThumb.gif │ │ ├── preciseSliderThumb.png │ │ ├── preciseSliderThumbFocus.gif │ │ ├── preciseSliderThumbFocus.png │ │ ├── progressBarAnim-1.png │ │ ├── progressBarAnim-2.png │ │ ├── progressBarAnim-3.png │ │ ├── progressBarAnim-4.png │ │ ├── progressBarAnim-5.png │ │ ├── progressBarAnim-6.png │ │ ├── progressBarAnim-7.png │ │ ├── progressBarAnim-8.png │ │ ├── progressBarAnim-9.png │ │ ├── progressBarAnim.gif │ │ ├── progressBarAnim.psd │ │ ├── progressBarEmpty.png │ │ ├── progressBarFull.png │ │ ├── radioButtonActive.png │ │ ├── radioButtonActiveDisabled.png │ │ ├── radioButtonActiveHover.png │ │ ├── radioButtonDisabled.png │ │ ├── radioButtonEnabled.png │ │ ├── radioButtonHover.png │ │ ├── sliderEmpty.png │ │ ├── sliderEmptyVertical.png │ │ ├── sliderFull.png │ │ ├── sliderFullFocus.png │ │ ├── sliderFullVertical.png │ │ ├── sliderFullVerticalFocus.png │ │ ├── sliderThumb.png │ │ ├── sliderThumbFocus.gif │ │ ├── sliderThumbFocus.png │ │ ├── smallArrowDown.png │ │ ├── smallArrowUp.png │ │ ├── splitContainerSizerH-thumb.png │ │ ├── splitContainerSizerH.png │ │ ├── splitContainerSizerV-thumb.png │ │ ├── splitContainerSizerV.png │ │ ├── spriteArrows.gif │ │ ├── spriteArrows.png │ │ ├── spriteRoundedIconsSmall.gif │ │ ├── spriteRoundedIconsSmall.png │ │ ├── tabActive.png │ │ ├── tabClose.gif │ │ ├── tabClose.png │ │ ├── tabCloseHover.gif │ │ ├── tabCloseHover.png │ │ ├── tabDisabled.png │ │ ├── tabEnabled.png │ │ ├── tabHover.gif │ │ ├── tabHover.png │ │ ├── titleBar.png │ │ ├── titleBarBg.gif │ │ ├── tooltipConnectorDown.gif │ │ ├── tooltipConnectorDown.png │ │ ├── tooltipConnectorLeft.gif │ │ ├── tooltipConnectorLeft.png │ │ ├── tooltipConnectorRight.gif │ │ ├── tooltipConnectorRight.png │ │ ├── tooltipConnectorUp.gif │ │ ├── tooltipConnectorUp.png │ │ ├── treeExpand_leaf.gif │ │ ├── treeExpand_leaf_rtl.gif │ │ ├── treeExpand_loading.gif │ │ ├── treeExpand_minus.gif │ │ ├── treeExpand_minus_rtl.gif │ │ ├── treeExpand_mius.gif │ │ ├── treeExpand_plus.gif │ │ ├── treeExpand_plus_rtl.gif │ │ ├── treeHover.png │ │ ├── validationInputBg.gif │ │ ├── validationInputBg.png │ │ └── warning.png │ │ ├── layout │ │ ├── AccordionContainer.css │ │ ├── BorderContainer.css │ │ ├── ContentPane.css │ │ ├── SplitContainer.css │ │ ├── TabContainer.css │ │ └── TabContainer_rtl.css │ │ ├── tundra.css │ │ └── tundra_rtl.css │ ├── dojo │ ├── dojo.js │ └── resources │ │ ├── LICENSE │ │ ├── _modules.js │ │ ├── blank.gif │ │ ├── blank.html │ │ ├── dnd.css │ │ ├── dojo.css │ │ ├── iframe_history.html │ │ └── images │ │ ├── dndCopy.png │ │ ├── dndMove.png │ │ ├── dndNoCopy.png │ │ └── dndNoMove.png │ ├── images │ ├── UserManualButton.png │ ├── WelcomeOffLine.jpg │ ├── create-session.png │ ├── favicon.ico │ ├── merging_logo.png │ ├── network-error.png │ ├── network-offline.png │ ├── network-receive-error.png │ ├── network-receive.png │ ├── network-transmit.png │ ├── planet.png │ ├── ravenna.png │ ├── ravenna_AES67.png │ ├── ravenna_tm.png │ ├── vendor.png │ ├── vendor_alc.png │ ├── vendor_dot.png │ ├── vendor_dot1.png │ ├── vendor_dsa.png │ ├── vendor_genelec.png │ ├── vendor_lawo.png │ ├── vendor_lsb.png │ ├── vendor_merging.png │ ├── vendor_schoeps.png │ ├── vendor_template.png │ └── vendor_vsm.png │ ├── index.html │ ├── ravenna │ ├── Device.css │ ├── ravenna.css │ └── widget │ │ └── Common.js │ └── rickshaw │ ├── rickshaw.js │ ├── rickshaw.min.css │ ├── src │ └── css │ │ ├── detail.css │ │ ├── graph.css │ │ └── legend.css │ └── vendor │ └── d3.min.js ├── CHANGELOG.md ├── README.md ├── common ├── MTAL_IPC.c ├── MTAL_IPC.h ├── MT_ALSA_daemon_message_defs.h ├── MT_ALSA_message_defs.h ├── MergingRAVENNACommon.h └── rv_log.h ├── driver ├── .gitignore ├── EtherTubeInterfaces.h ├── EtherTubeNetfilter.c ├── EtherTubeNetfilter.h ├── MR_AudioDriverTypes.h ├── MTAL.h ├── MTAL_DP.h ├── MTAL_EthUtils.c ├── MTAL_EthUtils.h ├── MTAL_LKernelAPI.c ├── MTAL_LKernelAPI.h ├── MTAL_TargetPlatform.h ├── MTAL_stdint.h ├── MTConvert.c ├── MTConvert.h ├── Makefile ├── PTP.c ├── PTP.h ├── PTP_defs.h ├── RTP_audio_stream.c ├── RTP_audio_stream.h ├── RTP_stream.c ├── RTP_stream.h ├── RTP_stream_defs.h ├── RTP_stream_info.c ├── RTP_stream_info.h ├── RTP_streams_manager.c ├── RTP_streams_manager.h ├── audio_driver.c ├── audio_driver.h ├── audio_streamer_clock_PTP_defs.h ├── c_wrapper_lib.c ├── c_wrapper_lib.h ├── manager.c ├── manager.h ├── manager_defs.h ├── module_interface.c ├── module_main.c ├── module_main.h ├── module_netlink.c ├── module_netlink.h ├── module_timer.c └── module_timer.h └── players ├── .gitignore └── sample ├── .gitignore ├── Makefile └── main.cpp /Butler/LICENSE.md: -------------------------------------------------------------------------------- 1 | # End-User License Agreement (EULA) of AES-67 ALSA Driver # 2 | 3 | This End-User License Agreement ("EULA") is a legal agreement between you and Merging Technologies 4 | 5 | This EULA agreement governs your acquisition and use of our AES-67 ALSA Butler software ("Software") directly from Merging Technologies or indirectly through a Merging Technologies authorized reseller or distributor (a "Reseller"). 6 | 7 | Please read this EULA agreement carefully before completing the installation process and using the AES-67 ALSA Driver software. It provides a license to use the AES-67 ALSA Driver software and contains warranty information and liability disclaimers. 8 | 9 | If you register for a free trial of the AES-67 ALSA Driver software, this EULA agreement will also govern that trial. By clicking "accept" or installing and/or using the AES-67 ALSA Driver software, you are confirming your acceptance of the Software and agreeing to become bound by the terms of this EULA agreement. 10 | 11 | If you are entering into this EULA agreement on behalf of a company or other legal entity, you represent that you have the authority to bind such entity and its affiliates to these terms and conditions. If you do not have such authority or if you do not agree with the terms and conditions of this EULA agreement, do not install or use the Software, and you must not accept this EULA agreement. 12 | 13 | This EULA agreement shall apply only to the Software supplied by Merging Technologies herewith regardless of whether other software is referred to or described herein. The terms also apply to any Merging Technologies updates, supplements, Internet-based services, and support services for the Software, unless other terms accompany those items on delivery. If so, those terms apply. 14 | ## Scope ## 15 | 16 | * AES-67 ALSA Butler software works with the GPL ALSA RAVENNA/AES67 driver from Merging Technologies 17 | * This Agreement describes the licensing of the Software provided to User solely. This means that it should not be used by third party wishing to integrate it in a commercial product (OEM use) 18 | * If User desires to use the Software as an OEM, it must separately purchase a commercial-use license from Merging Technologies 19 | 20 | ## License Grant ## 21 | 22 | Merging Technologies hereby grants you a personal, non-transferable, non-exclusive license to use the AES-67 ALSA Butler software on your devices in accordance with the terms of this EULA agreement. 23 | 24 | You are permitted to load the AES-67 ALSA Butler software (for example a PC, laptop, mobile or tablet) under your control. You are responsible for ensuring your device meets the minimum requirements of the AES-67 ALSA Butler software. 25 | 26 | You are not permitted to: 27 | 28 | * Edit, alter, modify, adapt, translate or otherwise change the whole or any part of the Software nor permit the whole or any part of the Software to be combined with or become incorporated in any other software, nor decompile, disassemble or reverse engineer the Software or attempt to do any such things 29 | * Reproduce, copy, distribute, resell or otherwise use the Software for any commercial purpose 30 | * Allow any third party to use the Software on behalf of or for the benefit of any third party 31 | * Use the Software in any way which breaches any applicable local, national or international law 32 | * use the Software for any purpose that Merging Technologies considers is a breach of this EULA agreement 33 | * Integrate the software in third party products as an OEM 34 | 35 | ## Intellectual Property and Ownership ## 36 | 37 | Merging Technologies shall at all times retain ownership of the Software as originally downloaded by you and all subsequent downloads of the Software by you. The Software (and the copyright, and other intellectual property rights of whatever nature in the Software, including any modifications made thereto) are and shall remain the property of Merging Technologies. 38 | 39 | Merging Technologies reserves the right to grant licenses to use the Software to third parties. 40 | ## Data Collection ## 41 | 42 | The Software contains certain features that generate, collect, and transmit data to Merging Technologies about the installation, setup, and use of the Materials. The purposes of data collection are: 1) to verify compliance with the terms of this Agreement; and 2) to enable Merging Technologies to develop, improve, and support products and services. This data includes a unique serial number combined with other information about your computer. 43 | 44 | When the Software is made available for use free of charge, the collection data (such as randomly generated unique identifier and other information about your computer) may also be mandatory and a condition of using the Software. Data collected only if: 1) the purpose is to develop, improve, and support products and services, and 2) the data will not be used to identify or contact You or other individuals 45 | Termination 46 | 47 | This EULA agreement is effective from the date you first use the Software and shall continue until terminated. You may terminate it at any time upon written notice to Merging Technologies. 48 | 49 | It will also terminate immediately if you fail to comply with any term of this EULA agreement. Upon such termination, the licenses granted by this EULA agreement will immediately terminate and you agree to stop all access and use of the Software. The provisions that by their nature continue and survive will survive any termination of this EULA agreement. 50 | ## Governing Law ## 51 | 52 | This EULA agreement, and any dispute arising out of or in connection with this EULA agreement, shall be governed by and construed in accordance with the laws of Switzerland. 53 | -------------------------------------------------------------------------------- /Butler/Merging_RAVENNA_Daemon: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dewiweb/ALSA-RAVENNA-AES67-Driver/3c4fe34ca113870091038db4a43c6390336b6376/Butler/Merging_RAVENNA_Daemon -------------------------------------------------------------------------------- /Butler/VERSION: -------------------------------------------------------------------------------- 1 | 100100074 2 | 1.1 (build 74) stable 3 | stable 4 | -------------------------------------------------------------------------------- /Butler/merging_ravenna_daemon.conf: -------------------------------------------------------------------------------- 1 | interface_name=eth0 2 | web_app_port=9090 3 | tic_frame_size_at_1fs=192 4 | config_pathname=/var/alsa-aes67-driver/butler.config -------------------------------------------------------------------------------- /Butler/webapp/advanced/dijit/themes/tundra/Calendar.css: -------------------------------------------------------------------------------- 1 | .tundra .dijitCalendarIncrementControl {width:15px; height:15px; background-image: url("images/spriteRoundedIconsSmall.png"); background-repeat: no-repeat}.dj_ie6 .tundra .dijitCalendarIncrementControl {font-size:.1em; background-image: url("images/spriteRoundedIconsSmall.gif");}.tundra .dijitA11ySideArrow {display: none;}.tundra .dijitCalendarDecrease {background-position: top left;}.tundra .dijitCalendarIncrease {background-position: -30px top;}.tundra .dijitCalendarContainer {font-size: 100%; border-spacing: 0; border-collapse: separate; border: 1px solid #ccc; margin: 0;}.tundra .dijitCalendarMonthContainer th {background:#d3d3d3 url("images/titleBar.png") repeat-x top; padding-top:.3em; padding-bottom:.2em; text-align:center;}.dj_ie6 .tundra .dijitCalendarMonthContainer th {padding-top:.2em; padding-bottom:.1em;}.tundra .dijitCalendarDayLabelTemplate {background:white url("images/calendarDayLabel.png") repeat-x bottom; font-weight:normal; padding-top:.15em; padding-bottom:0; border-top: 1px solid #eeeeee; color:#293a4b; text-align:center;}.tundra .dijitCalendarBodyContainer {border-bottom: 1px solid #eeeeee;}.tundra .dijitCalendarMonthLabel {color:#293a4b; font-weight: bold; padding: 0 4px;}.tundra .dijitCalendarDateTemplate {font-size: 0.9em; font-weight: bold; text-align: center; padding: 0.3em 0.3em 0.05em 0.3em; letter-spacing: 1px;}.dj_ie .tundra .dijitCalendarDateTemplate {padding: 0.1em .33em 0.02em .33em;}.tundra .dijitCalendarPreviousMonth,.tundra .dijitCalendarNextMonth {color:#999999; background-color:#f8f8f8;}.tundra .dijitCalendarCurrentMonth {background-color: white;}.tundra .dijitCalendarCurrentDate {text-decoration:underline; font-weight:bold;}.tundra .dijitCalendarHoveredDate {background-color: #e2ebf2;}.tundra .dijitCalendarDisabledDate {text-decoration: line-through; background-color: white;}.tundra .dijitCalendarSelectedDate {background-color:#bbc4d0 !important; color:black !important;}.tundra .dijitCalendarYearContainer {background:white url("images/calendarYearLabel.png") repeat-x bottom; border-top:1px solid #ccc;}.tundra .dijitCalendarYearLabel {margin:0; padding:0.4em 0 0.25em 0; text-align:center; font-size: 1.17em;}.tundra .dijitCalendarSelectedYear {font-weight:bolder; color:black; padding:0.2em; padding-bottom:0.1em; background-color:#bbc4d0 !important;}.tundra .dijitCalendarNextYear,.tundra .dijitCalendarPreviousYear {color:black !important; font-weight:normal;}.tundra .dijitCalendar .dijitDropDownButton {margin: 0;}.tundra .dijitCalendar .dijitButtonText {padding: 0;}.tundra .dijitCalendar .dijitDropDownButton .dijitButtonNode {background-color: transparent; background-image: none; padding: 0;}.tundra .dijitCalendarMonthMenu .dijitCalendarMonthLabelHover {background-color: #3559ac; color:#fff;} -------------------------------------------------------------------------------- /Butler/webapp/advanced/dijit/themes/tundra/Calendar_rtl.css: -------------------------------------------------------------------------------- 1 | .tundra .dijitCalendarRtl .dijitCalendarDecrease {background-position: -30px top;}.tundra .dijitCalendarRtl .dijitCalendarIncrease {background-position: 0 top;} -------------------------------------------------------------------------------- /Butler/webapp/advanced/dijit/themes/tundra/ColorPalette.css: -------------------------------------------------------------------------------- 1 | .dijitColorPalette {border:1px solid #7eabcd; background:#fff; -moz-border-radius: 0 !important;} -------------------------------------------------------------------------------- /Butler/webapp/advanced/dijit/themes/tundra/Common.css: -------------------------------------------------------------------------------- 1 | .tundra .dojoDndItemBefore {border-top: 2px solid #369;}.tundra .dojoDndItemAfter {border-bottom: 2px solid #369;}.tundra .dojoDndItemOver {cursor:pointer;}.tundra table.dojoDndAvatar {-moz-border-radius: 0; border: 1px solid #ccc; border-collapse: collapse; background-color: #fff; font-size: 75%; color: black;}.tundra .dojoDndAvatar td {border: none;}.tundra .dojoDndAvatar tr {border: none;}.tundra .dojoDndAvatarHeader td {height: 20px; padding: 0 0 0 21px;}.tundra .dojoDndAvatarItem td {padding: 2px;}.tundra.dojoDndMove .dojoDndAvatarHeader {background-color: #f58383; background-image: url(images/dndNoMove.png); background-repeat: no-repeat; background-position: 2px center;}.tundra.dojoDndCopy .dojoDndAvatarHeader {background-color: #f58383; background-image: url(images/dndNoCopy.png); background-repeat: no-repeat; background-position: 2px center;}.tundra.dojoDndMove .dojoDndAvatarCanDrop .dojoDndAvatarHeader {background-color: #97e68d; background-image: url(images/dndMove.png); background-repeat: no-repeat; background-position: 2px center;}.tundra.dojoDndCopy .dojoDndAvatarCanDrop .dojoDndAvatarHeader {background-color: #97e68d; background-image: url(images/dndCopy.png); background-repeat: no-repeat; background-position: 2px center;}.tundra .dijitIconLoading {background:url('images/loading.gif') no-repeat left center; width: 24px; height: 24px;}.tundra .dijitIconError {background:url('images/warning.png') no-repeat left center; width: 16px; height: 16px;} -------------------------------------------------------------------------------- /Butler/webapp/advanced/dijit/themes/tundra/Dialog.css: -------------------------------------------------------------------------------- 1 | .tundra .dijitDialog {background: #fff; border: 1px solid #7eabcd; padding: 0; -webkit-box-shadow: 0 5px 10px #adadad;}.tundra .dijitDialogPaneContent {background: #fff; border-top: 1px solid #d3d3d3; padding:10px;}.tundra .dijitDialogTitleBar {background: #fafafa url("images/titleBar.png") repeat-x top left; padding: 5px 6px 3px 6px; outline:0;}.tundra .dijitDialogTitle {font-weight: bold; padding: 0 4px;}.tundra .dijitDialogCloseIcon {background: url("images/tabClose.png") no-repeat right top; position: absolute; vertical-align: middle; right: 6px; top: 4px; height: 15px; width: 15px;}.dj_ie6 .tundra .dijitDialogCloseIcon {background : url("images/tabClose.gif") no-repeat right top;}.tundra .dijitDialogCloseIconHover {background: url("images/tabCloseHover.png") no-repeat right top;}.dj_ie6 .tundra .dijitDialogCloseIconHover {background : url("images/tabCloseHover.gif") no-repeat right top;}.tundra .dijitTooltip,.tundra .dijitTooltipDialog {background: transparent;}.dijitTooltipBelow {padding-top: 13px;}.dijitTooltipAbove {padding-bottom: 13px;}.tundra .dijitTooltipContainer {background: #ffffff url("images/popupMenuBg.gif") repeat-x bottom left; border: 1px solid #7eabcd; padding: 0.45em; -webkit-border-radius: 3px; -moz-border-radius: 3px;}.tundra .dijitTooltipConnector {border:0; z-index: 2;}.tundra .dijitTooltipABRight .dijitTooltipConnector {left: auto !important; right: 3px;}.tundra .dijitTooltipBelow .dijitTooltipConnector {top: 0; left: 3px; background:url("images/tooltipConnectorUp.png") no-repeat top left; width:16px; height:14px;}.dj_ie .tundra .dijitTooltipBelow .dijitTooltipConnector {background-image: url("images/tooltipConnectorUp.gif");}.tundra .dijitTooltipAbove .dijitTooltipConnector {bottom: 0; left: 3px; background:url("images/tooltipConnectorDown.png") no-repeat top left; width:16px; height:14px;}.dj_ie .tundra .dijitTooltipAbove .dijitTooltipConnector {background-image: url("images/tooltipConnectorDown.gif");}.dj_ie6 .tundra .dijitTooltipAbove .dijitTooltipConnector {bottom: -3px;}.tundra .dijitTooltipLeft {padding-right: 14px;}.tundra .dijitTooltipLeft .dijitTooltipConnector {right: 0; background:url("images/tooltipConnectorRight.png") no-repeat top left; width:16px; height:14px;}.dj_ie .tundra .dijitTooltipLeft .dijitTooltipConnector {background-image: url("images/tooltipConnectorRight.gif");}.tundra .dijitTooltipRight {padding-left: 14px;}.tundra .dijitTooltipRight .dijitTooltipConnector {left: 0; background:url("images/tooltipConnectorLeft.png") no-repeat top left; width:16px; height:14px;}.dj_ie .tundra .dijitTooltipRight .dijitTooltipConnector {background-image: url("images/tooltipConnectorLeft.gif");}.dj_webkit .tundra .dijitTooltipContainer {-webkit-box-shadow: 0 5px 10px #adadad;} -------------------------------------------------------------------------------- /Butler/webapp/advanced/dijit/themes/tundra/Dialog_rtl.css: -------------------------------------------------------------------------------- 1 | .tundra .dijitDialogRtl .dijitDialogCloseIcon {right: auto; left: 5px;} -------------------------------------------------------------------------------- /Butler/webapp/advanced/dijit/themes/tundra/Editor.css: -------------------------------------------------------------------------------- 1 | .dijitEditor {border:1px solid #bfbfbf; border-top:0;}.tundra .dijitEditorIcon {background-image: url('../../icons/images/editorIconsEnabled.png'); background-repeat: no-repeat; width: 18px; height: 18px; text-align: center;}.tundra .dijitDisabled .dijitEditorIcon {background-image: url('../../icons/images/editorIconsDisabled.png');} -------------------------------------------------------------------------------- /Butler/webapp/advanced/dijit/themes/tundra/Editor_rtl.css: -------------------------------------------------------------------------------- 1 | .tundra .dijitEditorRtl .dijitEditorIcon {background-image: url('../../icons/images/editorIconsEnabled_rtl.png');}.tundra .dijitEditorRtlDisabled .dijitEditorIcon {background-image: url('../../icons/images/editorIconsDisabled_rtl.png');} -------------------------------------------------------------------------------- /Butler/webapp/advanced/dijit/themes/tundra/Menu.css: -------------------------------------------------------------------------------- 1 | .tundra .dijitMenu,.tundra .dijitMenuBar {border: 1px solid #7eabcd; margin: 0; padding: 0; background-color: #f7f7f7;}.tundra .dijitBorderContainer .dijitMenuBar {border:1px solid #ccc;}.tundra .dijitMenuItem {font-family: sans-serif; margin: 0;}.tundra .dijitMenuItem {padding: 4px 5px;}.tundra .dijitMenuPreviousButton, .tundra .dijitMenuNextButton {font-style: italic;}.tundra .dijitMenuItem td {padding: 2px;}.tundra .dijitMenuPassive .dijitMenuItemHover,.tundra .dijitMenuItemSelected {background-color: #3559ac; color:#fff;}.tundra .dijitMenuItemIcon {width: 16px; height: 16px;}.tundra .dijitMenuExpand {width: 7px; height: 7px; background-image: url('images/spriteArrows.png'); background-position: -14px 0;}.dj_ie6 .tundra .dijitMenuExpand {background-image: url('images/spriteArrows.gif');}.tundra .dijitMenuSeparatorTop {border-bottom: 1px solid #9b9b9b;}.tundra .dijitMenuSeparatorBottom {border-top: 1px solid #e8e8e8;}.tundra .dijitCheckedMenuItemIconChar {display: none;}.tundra .dijitCheckedMenuItemIcon {background-image: url('images/checkmark.png'); background-position: -80px;}.dj_ie6 .tundra .dijitCheckedMenuItemIcon {background-image: url('images/checkmark.gif');}.tundra .dijitCheckedMenuItemChecked .dijitCheckedMenuItemIcon {background-position: -64px;} -------------------------------------------------------------------------------- /Butler/webapp/advanced/dijit/themes/tundra/Menu_rtl.css: -------------------------------------------------------------------------------- 1 | .tundra .dijitMenuItemRtl .dijitMenuExpand {background-position: -7px 0;} -------------------------------------------------------------------------------- /Butler/webapp/advanced/dijit/themes/tundra/ProgressBar.css: -------------------------------------------------------------------------------- 1 | .tundra .dijitProgressBar {margin:2px 0 2px 0;}.tundra .dijitProgressBarEmpty {background:#fff url("images/progressBarEmpty.png") repeat-x center center; border-color: #a2a2a2 #b8b8b8 #b8b8b8 #a2a2a2;}.tundra .dijitProgressBarTile {background:#f0f0f0 url("images/progressBarFull.png") repeat-x center center;}.tundra .dijitProgressBarFull {border-right:1px solid #b8b8b8;}.tundra .dijitProgressBarLabel {color:#293a4b;}.tundra .dijitProgressBarIndeterminate .dijitProgressBarTile {background:#cad2de url("images/progressBarAnim.gif") repeat-x center center;} -------------------------------------------------------------------------------- /Butler/webapp/advanced/dijit/themes/tundra/TimePicker.css: -------------------------------------------------------------------------------- 1 | .tundra .dijitTimePickerTick,.tundra .dijitTimePickerMarker {border-color: #ccc;}.tundra .dijitTimePickerTick {color:white;}.tundra .dijitTimePickerMarker {background:#d3d3d3 url("images/titleBar.png") repeat-x top; color:#293a4b; font-weight: bold;}.tundra .dijitTimePickerItemSelected {color: black; background: #bbc4d0 none;}.tundra .dijitTimePickerItemHover {background: #60a1ea none; color:white;}.tundra .dijitTimePickerItemHover,.tundra .dijitTimePickerItemSelected {position: relative; z-index: 10;}.tundra .dijitTimePickerTick .dijitTimePickerItemInner {font-size:0.4em;}.tundra .dijitTimePickerItemHover .dijitTimePickerItemInner,.tundra .dijitTimePickerItemSelected .dijitTimePickerItemInner {font-size:1em;}.tundra .dijitTimePickerMarkerHover {border-top: 1px solid #ccc;}.tundra .dijitTimePickerTickHover,.tundra .dijitTimePickerTickSelected {margin-top:-0.3em; margin-bottom:-0.3em; border-bottom: none;} -------------------------------------------------------------------------------- /Butler/webapp/advanced/dijit/themes/tundra/TimePicker_rtl.css: -------------------------------------------------------------------------------- 1 | .dj_ie6 .tundra .dijitTimePickerRtl .dijitTimePickerMarkerHover,.dj_ie7 .tundra .dijitTimePickerRtl .dijitTimePickerMarkerHover {border-top: 0;} -------------------------------------------------------------------------------- /Butler/webapp/advanced/dijit/themes/tundra/TitlePane.css: -------------------------------------------------------------------------------- 1 | .tundra .dijitTitlePaneTitle {background: #cccccc; background:#fff url("images/titleBar.png") repeat-x bottom left; border:1px solid #bfbfbf; padding:3px 4px;}.tundra .dijitTitlePaneTitleHover {background: #f8fafd url("images/accordionItemHover.gif") bottom repeat-x;}.tundra .dijitTitlePane .dijitArrowNode {background-image: url('images/spriteArrows.png'); background-repeat: no-repeat; background-position: 0 0; height: 7px; width: 7px;}.dj_ie6 .tundra .dijitTitlePane .dijitArrowNode {background-image: url('images/spriteArrows.gif');}.tundra .dijitTitlePane .dijitClosed .dijitArrowNode {background-position: -14px 0;}.tundra .dijitTitlePaneContentOuter {background: #ffffff; border:1px solid #bfbfbf; border-top: 0;}.tundra .dijitTitlePaneContentInner {padding:10px;}.tundra .dijitTitlePaneTextNode {margin-left: 4px; margin-right: 4px;} -------------------------------------------------------------------------------- /Butler/webapp/advanced/dijit/themes/tundra/TitlePane_rtl.css: -------------------------------------------------------------------------------- 1 | .tundra .dijitTitlePaneRtl .dijitClosed .dijitArrowNode {background-position: -7px 0;} -------------------------------------------------------------------------------- /Butler/webapp/advanced/dijit/themes/tundra/Toolbar.css: -------------------------------------------------------------------------------- 1 | .tundra .dijitToolbar {border-bottom: 1px solid #ccc; background:#eaeaea url("images/titleBar.png") repeat-x top left;}.dj_ie6 .tundra .dijitToolbar {height: 10px;}.tundra .dijitToolbar .dijitButtonNode,.tundra .dijitToolbar .dijitComboButton .dijitButtonContents,.tundra .dijitToolbar .dijitComboButton .dijitDownArrowButton {background: none; margin: 0; padding: 0; border: none; font-size: 12px;}.tundra .dijitToolbar .dijitButton,.tundra .dijitToolbar .dijitToggleButton,.tundra .dijitToolbar .dijitDropDownButton,.tundra .dijitToolbar .dijitComboButton .dijitButtonContents,.tundra .dijitToolbar .dijitComboButton .dijitDownArrowButton {background: none; padding: 1px;}.tundra .dijitToolbar .dijitButtonChecked,.tundra .dijitToolbar .dijitToggleButtonChecked {background-color:#d4dff2; border:1px solid #316ac5; padding: 0;}.tundra .dijitToolbar .dijitButtonCheckedHover,.tundra .dijitToolbar .dijitToggleButtonCheckedHover {background-color:#abc1e5; border:1px solid #316ac5; padding: 0;}.tundra .dijitToolbar .dijitButtonHover,.tundra .dijitToolbar .dijitToggleButtonHover,.tundra .dijitToolbar .dijitDropDownButtonHover,.tundra .dijitToolbar .dijitComboButton .dijitButtonContentsHover,.tundra .dijitToolbar .dijitComboButton .dijitDownArrowButtonHover {border: 1px solid #869cbf; padding: 0; background-color:#e1e5f0;}.tundra .dijitToolbar label {padding: 3px 3px 0 6px;}.dj_ie .tundra .dijitToolbar .dijitComboButton .dijitButtonContentsFocused,.dj_ie .tundra .dijitToolbar .dijitComboButton .dijitDownArrowButtonFocused {border: 1px #555 dotted !important; padding: 0;}.tundra .dijitToolbarSeparator {background: url('../../icons/images/editorIconsEnabled.png');}.tundra .dijitToolbarRtl .dijitToolbarSeparator {background-image: url('../../icons/images/editorIconsDisabled.png');} -------------------------------------------------------------------------------- /Butler/webapp/advanced/dijit/themes/tundra/Tree.css: -------------------------------------------------------------------------------- 1 | .tundra .dijitTreeNode {background-image : url('images/i.gif'); background-repeat : repeat-y; zoom: 1;}.tundra .dijitTreeIsLast {background: url('images/i_half.gif') no-repeat;}.tundra .dijitTreeIsRoot {margin-left: 0; background-image: none;}.tundra .dijitTreeExpando {width: 18px; height: 18px;}.tundra .dijitTreeRow {padding-bottom: 2px;}.tundra .dijitTreeContent {min-height: 18px; min-width: 18px;}.tundra .dijitTreeRowSelected .dijitTreeLabel {background:#e2ebfe;}.tundra .dijitTreeRowHover {background-image: url(images/treeHover.png); background-repeat: repeat; background-color: transparent !important;}.tundra .dijitTreeExpandoOpened {background-image: url('images/treeExpand_minus.gif');}.tundra .dijitTreeExpandoClosed {background-image: url('images/treeExpand_plus.gif');}.tundra .dijitTreeExpandoLeaf {background-image: url('images/treeExpand_leaf.gif');}.tundra .dijitTreeExpandoLoading {background-image: url('images/treeExpand_loading.gif');}.tundra .dijitTreeIcon {width: 16px; height: 16px;}.tundra .dijitFolderOpened {background: url('images/folderOpened.gif') no-repeat;}.tundra .dijitFolderClosed {background: url('images/folderClosed.gif') no-repeat;}.tundra .dijitLeaf {background: url('images/leaf.gif') no-repeat;}.tundra .dijitTreeNode .dojoDndItemBefore,.tundra .dijitTreeNode .dojoDndItemAfter {border-bottom: none; border-top: none;}.tundra .dijitTreeNode .dojoDndItemBefore .dijitTreeContent {border-top: 2px solid #369;}.tundra .dijitTreeNode .dojoDndItemAfter .dijitTreeContent {border-bottom: 2px solid #369;} -------------------------------------------------------------------------------- /Butler/webapp/advanced/dijit/themes/tundra/Tree_rtl.css: -------------------------------------------------------------------------------- 1 | .tundra .dijitTreeNodeRtl,.tundra .dijitTreeNodeRtl .dijitTreeExpandoLeaf {background-image: none;}.tundra .dijitTreeNodeRtl .dijitTreeExpandoOpened {background-image: url('images/treeExpand_minus_rtl.gif');}.tundra .dijitTreeNodeRtl .dijitTreeExpandoClosed {background-image: url('images/treeExpand_plus_rtl.gif');} -------------------------------------------------------------------------------- /Butler/webapp/advanced/dijit/themes/tundra/form/Button.css: -------------------------------------------------------------------------------- 1 | .tundra .dijitButtonNode {border: 1px solid #c0c0c0; border-bottom: 1px solid #9b9b9b; padding: 0.1em 0.2em 0.2em 0.2em; background: #fff url("../images/buttonEnabled.png") repeat-x bottom left;}.tundra .dijitButtonText {text-align: center; padding: 0 0.3em;}.tundra .dijitDisabled .dijitButtonText {color: #7F7F7F;}.tundra .dijitArrowButton {color: #111;}.tundra .dijitComboButton .dijitDownArrowButton {padding-right:4px;}.tundra .dijitTextBoxReadOnly,.tundra .dijitTextBoxReadOnly .dijitButtonNode,.tundra .dijitButtonDisabled .dijitButtonNode,.tundra .dijitToggleButtonDisabled .dijitButtonNode,.tundra .dijitDropDownButtonDisabled .dijitButtonNode,.tundra .dijitComboButtonDisabled .dijitButtonNode,.tundra .dijitTextBoxDisabled,.tundra .dijitTextBoxDisabled .dijitButtonNode {border-color: #d5d5d5 #d5d5d5 #bdbdbd #d5d5d5; background:#e4e4e4 url("../images/buttonDisabled.png") top repeat-x;}.tundra .dijitButtonHover .dijitButtonNode,.tundra .dijitButtonNodeHover,.tundra .dijitToggleButtonHover .dijitButtonNode,.tundra .dijitDropDownButtonHover .dijitButtonNode,.tundra .dijitComboButton .dijitButtonContentsHover,.tundra .dijitComboButton .dijitDownArrowButtonHover {border-color: #a5beda; border-bottom-color:#5c7590; color:#243C5F; background:#fcfdff url("../images/buttonHover.png") repeat-x bottom;}.tundra .dijitDownArrowButtonHover,.tundra .dijitUpArrowButtonHover {color:#243C5F; background:#fcfdff url("../images/buttonHover.png") repeat-x bottom;}.tundra .dijitUpArrowButtonActive,.tundra .dijitDownArrowButtonActive,.tundra .dijitButtonActive .dijitButtonNode,.tundra .dijitToggleButtonActive .dijitButtonNode,.tundra .dijitDropDownButtonActive .dijitButtonNode,.tundra .dijitButtonContentsActive,.tundra .dijitStackController .dijitToggleButtonChecked .dijitButtonNode {border-color:#366dba; background: #ededed url("../images/buttonActive.png") bottom repeat-x;}.tundra .dijitArrowButtonInner {background:url("../images/spriteArrows.png") no-repeat scroll 0 center; width: 7px; height: 7px; margin: 0 4px 0 4px;}.tundra .dijitTextBox .dijitArrowButtonInner {background-position: 0 center;}.dj_ie6 .tundra .dijitArrowButtonInner {background-image:url("../images/spriteArrows.gif");}.tundra .dijitLeftArrowButton .dijitArrowButtonInner {background-position: -7px center;}.tundra .dijitRightArrowButton .dijitArrowButtonInner {background-position: -14px center;}.tundra .dijitUpArrowButton .dijitArrowButtonInner {background-position: -21px center;}.tundra .dijitDisabled .dijitArrowButtonInner {background-position: -28px center;}.tundra .dijitDisabled .dijitLeftArrowButton .dijitArrowButtonInner {background-position: -35px center;}.tundra .dijitDisabled .dijitRightArrowButton .dijitArrowButtonInner {background-position: -42px center;}.tundra .dijitDisabled .dijitUpArrowButton .dijitArrowButtonInner {background-position: -49px center;}.dj_webkit .tundra .dijitSpinner .dijitUpArrowButton .dijitArrowButtonInner {margin-top: -1px;}.dj_ie .tundra .dijitSpinner .dijitDownArrowButton .dijitArrowButtonInner {margin-top: -2px;}.dj_ie8 .tundra .dijitSpinner .dijitDownArrowButton .dijitArrowButtonInner {margin-top: -1px;}.tundra .dijitSpinnerButtonContainer {width: auto; padding: 0;}.tundra .dijitSpinner .dijitArrowButton {width: 15px;}.tundra .dijitSpinner .dijitSpinnerButtonInner {width: 15px;}.tundra .dijitSpinner .dijitArrowButtonInner .dijitInputField {padding: 0;} -------------------------------------------------------------------------------- /Butler/webapp/advanced/dijit/themes/tundra/form/Checkbox.css: -------------------------------------------------------------------------------- 1 | .tundra .dijitToggleButton .dijitCheckBoxIcon {background-image: url('../images/checkmarkNoBorder.png');}.dj_ie6 .tundra .dijitToggleButton .dijitCheckBoxIcon {background-image: url('../images/checkmarkNoBorder.gif');}.tundra .dijitCheckBox,.tundra .dijitCheckBoxIcon {background-image: url('../images/checkmark.png'); background-repeat: no-repeat; width: 16px; height: 16px; margin: 0 2px 0 0; padding: 0;}.dj_ie6 .tundra .dijitCheckBox,.dj_ie6 .tundra .dijitCheckBoxIcon {background-image: url('../images/checkmark.gif');}.tundra .dijitCheckBox,.tundra .dijitToggleButton .dijitCheckBoxIcon {background-position: -16px;}.tundra .dijitCheckBoxChecked,.tundra .dijitToggleButtonChecked .dijitCheckBoxIcon {background-position: 0;}.tundra .dijitCheckBoxDisabled {background-position: -48px;}.tundra .dijitCheckBoxCheckedDisabled {background-position: -32px;}.tundra .dijitCheckBoxHover {background-position: -80px;}.tundra .dijitCheckBoxCheckedHover {background-position: -64px;} -------------------------------------------------------------------------------- /Butler/webapp/advanced/dijit/themes/tundra/form/Common.css: -------------------------------------------------------------------------------- 1 | .tundra .dijitInputContainer input,.tundra .dijitTextBox {margin: 0 0.1em;}.tundra .dijitTextArea {padding: 3px;}.tundra .dijitTextBox {background:#fff url("../images/validationInputBg.png") repeat-x top left; #background:#fff url('../images/validationInputBg.gif') repeat-x top left; border:1px solid #b3b3b3;}.tundra .dijitComboBox .dijitButtonNode {padding: 0 0.2em;}.tundra .dijitTextBox .dijitButtonNode {border-color: #9b9b9b;}.tundra .dijitTextBoxFocused {border-color:#406b9b;}.tundra .dijitTextBoxFocused .dijitButtonNode {border-color:#366dba;}.tundra .dijitError {background-color:#f9f7ba; background-image:none;}.tundra .dijitErrorFocused {background-color:#f9f999; background-image:none;}.tundra .dijitValidationIcon {width: 16px; background: transparent url('../images/warning.png') no-repeat center center;}.tundra .dijitComboBoxHighlightMatch {background-color:#a5beda;}.tundra .dijitFocusedLabel {outline: 1px dotted #666666;} -------------------------------------------------------------------------------- /Butler/webapp/advanced/dijit/themes/tundra/form/RadioButton.css: -------------------------------------------------------------------------------- 1 | .tundra .dijitRadio, .tundra .dijitRadioIcon {background-image: url('../images/checkmark.png'); background-repeat: no-repeat; width: 16px; height: 16px; margin: 0; padding: 0;}.dj_ie6 .tundra .dijitRadio,.dj_ie6 .tundra .dijitRadioIcon {background-image: url('../images/checkmark.gif');}.tundra .dijitToggleButton .dijitRadioIcon {background-image: url('../images/checkmarkNoBorder.png');}.dj_ie6 .tundra .dijitToggleButton .dijitRadioIcon {background-image: url('../images/checkmarkNoBorder.gif');}.tundra .dijitRadio,.tundra .dijitRadioIcon {background-position: -112px;}.tundra .dijitRadioDisabled {background-position: -144px;}.tundra .dijitRadioHover {background-position: -176px;}.tundra .dijitRadioChecked,.tundra .dijitRadioCheckedHover,.tundra .dijitToggleButtonChecked .dijitRadioIcon {background-position: -96px;}.tundra .dijitRadioCheckedDisabled {background-position: -128px;} -------------------------------------------------------------------------------- /Butler/webapp/advanced/dijit/themes/tundra/form/Select.css: -------------------------------------------------------------------------------- 1 | .tundra .dijitSelect .dijitButtonNode {padding: 0;}.tundra .dijitSelect .dijitButtonNode .dijitArrowButtonInner {margin: 0 4px 0 5px;}.tundra .dijitSelect .dijitButtonContents {padding-top: 1px; background:#fff url("../images/validationInputBg.png") repeat-x top left; #background:#fff url('../images/validationInputBg.gif') repeat-x top left;}.tundra .dijitSelectHover .dijitButtonContents,.tundra .dijitSelectActive .dijitButtonContents,.tundra .dijitSelectOpened .dijitButtonContents,.tundra .dijitSelectDisabled .dijitButtonContents,.tundra .dijitSelectReadOnly .dijitButtonContents{background: transparent none;}.dj_ie .tundra .dijitSelect .dijitButtonContents {padding-top: 0;}.tundra .dijitSelectDisabled .dijitButtonNode {border-color: #d5d5d5 #bdbdbd #bdbdbd #d5d5d5; background:#e4e4e4 url("../images/buttonDisabled.png") top repeat-x;}.dj_ie .tundra .dijitSelectDisabled .dijitButtonNode * {filter: gray() alpha(opacity=50);}.tundra .dijitSelectHover .dijitButtonNode {border-color:#a5beda; border-bottom-color:#5c7590; border-right-color:#5c7590; color:#243C5F; background:#fcfdff url("../images/buttonHover.png") repeat-x bottom;}.tundra .dijitSelectActive .dijitButtonNode,.tundra .dijitSelectOpened .dijitButtonNode {border-color:#366dba; background: #ededed url("../images/buttonActive.png") bottom repeat-x;}.tundra .dijitSelectMenu td {padding: 0;}.tundra .dijitSelectMenu .dijitMenuItemLabel,.tundra .dijitSelectMenu .dijitMenuArrowCell {padding: 0.1em 0.2em;} -------------------------------------------------------------------------------- /Butler/webapp/advanced/dijit/themes/tundra/form/Slider.css: -------------------------------------------------------------------------------- 1 | .tundra .dijitSliderProgressBarH {border-color: #aab0bb; background: #c0c2c5 url("../images/sliderFull.png") repeat-x top left;}.tundra .dijitSliderProgressBarV {border-color: #aab0bb; background: #c0c2c5 url("../images/sliderFullVertical.png") repeat-y bottom left;}.tundra .dijitSliderFocused .dijitSliderProgressBarH,.tundra .dijitSliderFocused .dijitSliderLeftBumper {background-image:url("../images/sliderFullFocus.png");}.tundra .dijitSliderFocused .dijitSliderProgressBarV,.tundra .dijitSliderFocused .dijitSliderBottomBumper {background-image:url("../images/sliderFullVerticalFocus.png");}.tundra .dijitSliderRemainingBarV {border-color: #b4b4b4; background: #dcdcdc url("../images/sliderEmptyVertical.png") repeat-y bottom left;}.tundra .dijitSliderRemainingBarH {border-color: #b4b4b4; background: #dcdcdc url("../images/sliderEmpty.png") repeat-x top left;}.tundra .dijitSliderBar {border-style: solid; outline:1px;}.tundra .dijitSliderFocused .dijitSliderBar {border-color:#888;}.tundra .dijitSliderImageHandleH {border:0; width:16px; height:16px; background:url("../images/preciseSliderThumb.png") no-repeat center top;}.tundra .dijitSliderFocused .dijitSliderImageHandleH {background-image:url("../images/preciseSliderThumbFocus.png"); #background-image:url("../images/preciseSliderThumbFocus.gif");}.dj_ie6 .tundra .dijitSliderImageHandleH {background-image:url("../images/preciseSliderThumb.gif");}.tundra .dijitSliderLeftBumper {border-left-width: 1px; border-color: #aab0bb; background: #c0c2c5 url("../images/sliderFull.png") repeat-x top left;}.tundra .dijitSliderRightBumper {background: #dcdcdc url("../images/sliderEmpty.png") repeat-x top left; border-color: #b4b4b4; border-right-width: 1px;}.tundra .dijitSliderImageHandleV {border:0; width:16px; height:16px; background:url("../images/sliderThumb.png") no-repeat center center;}.tundra .dijitSliderFocused .dijitSliderImageHandleV {background-image:url("../images/sliderThumbFocus.png");}.dj_ie6 .tundra .dijitSliderFocused .dijitSliderImageHandleV {background-image:url("../images/sliderThumbFocus.gif");}.tundra .dijitSliderBottomBumper {border-bottom-width: 1px; border-color: #aab0bb; background: #c0c2c5 url("../images/sliderFullVertical.png") repeat-y bottom left;}.tundra .dijitSliderTopBumper {background: #dcdcdc url("../images/sliderEmptyVertical.png") repeat-y top left; border-color: #b4b4b4; border-top-width: 1px;}.tundra .dijitSliderDecrementIconH,.tundra .dijitSliderDecrementIconV,.tundra .dijitSliderIncrementIconH,.tundra .dijitSliderIncrementIconV {background-image: url('../images/spriteArrows.png'); background-repeat: no-repeat; margin: 5px; height: 7px; width: 7px; font-size: 1px;}.dj_ie6 .tundra .dijitSliderDecrementIconH,.dj_ie6 .tundra .dijitSliderDecrementIconV,.dj_ie6 .tundra .dijitSliderIncrementIconH,.dj_ie6 .tundra .dijitSliderIncrementIconV {background-image: url('../images/spriteArrows.gif');}.tundra .dijitSliderDecrementIconH {background-position: -7px 0;}.tundra .dijitSliderIncrementIconH {background-position: -14px 0;}.tundra .dijitSliderDecrementIconV {background-position: 0 0;}.tundra .dijitSliderIncrementIconV {background-position: -21px 0;}.tundra .dijitSliderButtonInner {visibility:hidden;}.tundra .dijitSliderReadOnly *,.tundra .dijitSliderDisabled * {border-color: #d5d5d5 #bdbdbd #bdbdbd #d5d5d5; color: #bdbdbd;}.tundra .dijitSliderReadOnly .dijitSliderDecrementIconH,.tundra .dijitSliderDisabled .dijitSliderDecrementIconH {background-position: -35px 0;}.tundra .dijitSliderReadOnly .dijitSliderIncrementIconH,.tundra .dijitSliderDisabled .dijitSliderIncrementIconH {background-position: -42px 0;}.tundra .dijitSliderReadOnly .dijitSliderDecrementIconV,.tundra .dijitSliderDisabled .dijitSliderDecrementIconV {background-position: -28px 0;}.tundra .dijitSliderReadOnly .dijitSliderIncrementIconV,.tundra .dijitSliderDisabled .dijitSliderIncrementIconV {background-position: -49px 0;} -------------------------------------------------------------------------------- /Butler/webapp/advanced/dijit/themes/tundra/form/Slider_rtl.css: -------------------------------------------------------------------------------- 1 | .tundra .dijitSliderRtl .dijitSliderProgressBarH,.tundra .dijitSliderRtl .dijitSliderRemainingBarH,.tundra .dijitSliderRtl .dijitSliderLeftBumper,.tundra .dijitSliderRtl .dijitSliderRightBumper,.tundra .dijitSliderRtl .dijitSliderTopBumper {background-position: top right;}.tundra .dijitSliderRtl .dijitSliderProgressBarV,.tundra .dijitSliderRtl .dijitSliderRemainingBarV,.tundra .dijitSliderRtl .dijitSliderBottomBumper {background-position: bottom right;}.tundra .dijitSliderRtl .dijitSliderLeftBumper {border-left-width: 0; border-right-width: 1px;}.tundra .dijitSliderRtl .dijitSliderRightBumper {border-left-width: 1px; border-right-width: 0;}.tundra .dijitSliderRtl .dijitSliderIncrementIconH {background-position: -7px 0;}.tundra .dijitSliderRtl .dijitSliderDecrementIconH {background-position: -14px 0;} -------------------------------------------------------------------------------- /Butler/webapp/advanced/dijit/themes/tundra/images/accordionItemActive.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dewiweb/ALSA-RAVENNA-AES67-Driver/3c4fe34ca113870091038db4a43c6390336b6376/Butler/webapp/advanced/dijit/themes/tundra/images/accordionItemActive.gif -------------------------------------------------------------------------------- /Butler/webapp/advanced/dijit/themes/tundra/images/accordionItemHover.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dewiweb/ALSA-RAVENNA-AES67-Driver/3c4fe34ca113870091038db4a43c6390336b6376/Butler/webapp/advanced/dijit/themes/tundra/images/accordionItemHover.gif -------------------------------------------------------------------------------- /Butler/webapp/advanced/dijit/themes/tundra/images/buttonActive.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dewiweb/ALSA-RAVENNA-AES67-Driver/3c4fe34ca113870091038db4a43c6390336b6376/Butler/webapp/advanced/dijit/themes/tundra/images/buttonActive.png -------------------------------------------------------------------------------- /Butler/webapp/advanced/dijit/themes/tundra/images/buttonDisabled.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dewiweb/ALSA-RAVENNA-AES67-Driver/3c4fe34ca113870091038db4a43c6390336b6376/Butler/webapp/advanced/dijit/themes/tundra/images/buttonDisabled.png -------------------------------------------------------------------------------- /Butler/webapp/advanced/dijit/themes/tundra/images/buttonEnabled.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dewiweb/ALSA-RAVENNA-AES67-Driver/3c4fe34ca113870091038db4a43c6390336b6376/Butler/webapp/advanced/dijit/themes/tundra/images/buttonEnabled.png -------------------------------------------------------------------------------- /Butler/webapp/advanced/dijit/themes/tundra/images/buttonHover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dewiweb/ALSA-RAVENNA-AES67-Driver/3c4fe34ca113870091038db4a43c6390336b6376/Butler/webapp/advanced/dijit/themes/tundra/images/buttonHover.png -------------------------------------------------------------------------------- /Butler/webapp/advanced/dijit/themes/tundra/images/calendarDayLabel.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dewiweb/ALSA-RAVENNA-AES67-Driver/3c4fe34ca113870091038db4a43c6390336b6376/Butler/webapp/advanced/dijit/themes/tundra/images/calendarDayLabel.png -------------------------------------------------------------------------------- /Butler/webapp/advanced/dijit/themes/tundra/images/calendarMonthLabel.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dewiweb/ALSA-RAVENNA-AES67-Driver/3c4fe34ca113870091038db4a43c6390336b6376/Butler/webapp/advanced/dijit/themes/tundra/images/calendarMonthLabel.png -------------------------------------------------------------------------------- /Butler/webapp/advanced/dijit/themes/tundra/images/calendarYearLabel.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dewiweb/ALSA-RAVENNA-AES67-Driver/3c4fe34ca113870091038db4a43c6390336b6376/Butler/webapp/advanced/dijit/themes/tundra/images/calendarYearLabel.png -------------------------------------------------------------------------------- /Butler/webapp/advanced/dijit/themes/tundra/images/checkmark.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dewiweb/ALSA-RAVENNA-AES67-Driver/3c4fe34ca113870091038db4a43c6390336b6376/Butler/webapp/advanced/dijit/themes/tundra/images/checkmark.gif -------------------------------------------------------------------------------- /Butler/webapp/advanced/dijit/themes/tundra/images/checkmark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dewiweb/ALSA-RAVENNA-AES67-Driver/3c4fe34ca113870091038db4a43c6390336b6376/Butler/webapp/advanced/dijit/themes/tundra/images/checkmark.png -------------------------------------------------------------------------------- /Butler/webapp/advanced/dijit/themes/tundra/images/checkmarkNoBorder.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dewiweb/ALSA-RAVENNA-AES67-Driver/3c4fe34ca113870091038db4a43c6390336b6376/Butler/webapp/advanced/dijit/themes/tundra/images/checkmarkNoBorder.gif -------------------------------------------------------------------------------- /Butler/webapp/advanced/dijit/themes/tundra/images/checkmarkNoBorder.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dewiweb/ALSA-RAVENNA-AES67-Driver/3c4fe34ca113870091038db4a43c6390336b6376/Butler/webapp/advanced/dijit/themes/tundra/images/checkmarkNoBorder.png -------------------------------------------------------------------------------- /Butler/webapp/advanced/dijit/themes/tundra/images/circleIcon.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dewiweb/ALSA-RAVENNA-AES67-Driver/3c4fe34ca113870091038db4a43c6390336b6376/Butler/webapp/advanced/dijit/themes/tundra/images/circleIcon.gif -------------------------------------------------------------------------------- /Butler/webapp/advanced/dijit/themes/tundra/images/circleIcon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dewiweb/ALSA-RAVENNA-AES67-Driver/3c4fe34ca113870091038db4a43c6390336b6376/Butler/webapp/advanced/dijit/themes/tundra/images/circleIcon.png -------------------------------------------------------------------------------- /Butler/webapp/advanced/dijit/themes/tundra/images/comboArrowDown.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dewiweb/ALSA-RAVENNA-AES67-Driver/3c4fe34ca113870091038db4a43c6390336b6376/Butler/webapp/advanced/dijit/themes/tundra/images/comboArrowDown.gif -------------------------------------------------------------------------------- /Butler/webapp/advanced/dijit/themes/tundra/images/dijitProgressBarAnim.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dewiweb/ALSA-RAVENNA-AES67-Driver/3c4fe34ca113870091038db4a43c6390336b6376/Butler/webapp/advanced/dijit/themes/tundra/images/dijitProgressBarAnim.gif -------------------------------------------------------------------------------- /Butler/webapp/advanced/dijit/themes/tundra/images/dijitProgressBarAnim.psd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dewiweb/ALSA-RAVENNA-AES67-Driver/3c4fe34ca113870091038db4a43c6390336b6376/Butler/webapp/advanced/dijit/themes/tundra/images/dijitProgressBarAnim.psd -------------------------------------------------------------------------------- /Butler/webapp/advanced/dijit/themes/tundra/images/dndCopy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dewiweb/ALSA-RAVENNA-AES67-Driver/3c4fe34ca113870091038db4a43c6390336b6376/Butler/webapp/advanced/dijit/themes/tundra/images/dndCopy.png -------------------------------------------------------------------------------- /Butler/webapp/advanced/dijit/themes/tundra/images/dndMove.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dewiweb/ALSA-RAVENNA-AES67-Driver/3c4fe34ca113870091038db4a43c6390336b6376/Butler/webapp/advanced/dijit/themes/tundra/images/dndMove.png -------------------------------------------------------------------------------- /Butler/webapp/advanced/dijit/themes/tundra/images/dndNoCopy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dewiweb/ALSA-RAVENNA-AES67-Driver/3c4fe34ca113870091038db4a43c6390336b6376/Butler/webapp/advanced/dijit/themes/tundra/images/dndNoCopy.png -------------------------------------------------------------------------------- /Butler/webapp/advanced/dijit/themes/tundra/images/dndNoMove.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dewiweb/ALSA-RAVENNA-AES67-Driver/3c4fe34ca113870091038db4a43c6390336b6376/Butler/webapp/advanced/dijit/themes/tundra/images/dndNoMove.png -------------------------------------------------------------------------------- /Butler/webapp/advanced/dijit/themes/tundra/images/dojoTundraGradientBg.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dewiweb/ALSA-RAVENNA-AES67-Driver/3c4fe34ca113870091038db4a43c6390336b6376/Butler/webapp/advanced/dijit/themes/tundra/images/dojoTundraGradientBg.gif -------------------------------------------------------------------------------- /Butler/webapp/advanced/dijit/themes/tundra/images/dojoTundraGradientBg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dewiweb/ALSA-RAVENNA-AES67-Driver/3c4fe34ca113870091038db4a43c6390336b6376/Butler/webapp/advanced/dijit/themes/tundra/images/dojoTundraGradientBg.png -------------------------------------------------------------------------------- /Butler/webapp/advanced/dijit/themes/tundra/images/doubleArrowDown.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dewiweb/ALSA-RAVENNA-AES67-Driver/3c4fe34ca113870091038db4a43c6390336b6376/Butler/webapp/advanced/dijit/themes/tundra/images/doubleArrowDown.png -------------------------------------------------------------------------------- /Butler/webapp/advanced/dijit/themes/tundra/images/doubleArrowUp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dewiweb/ALSA-RAVENNA-AES67-Driver/3c4fe34ca113870091038db4a43c6390336b6376/Butler/webapp/advanced/dijit/themes/tundra/images/doubleArrowUp.png -------------------------------------------------------------------------------- /Butler/webapp/advanced/dijit/themes/tundra/images/folderClosed.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dewiweb/ALSA-RAVENNA-AES67-Driver/3c4fe34ca113870091038db4a43c6390336b6376/Butler/webapp/advanced/dijit/themes/tundra/images/folderClosed.gif -------------------------------------------------------------------------------- /Butler/webapp/advanced/dijit/themes/tundra/images/folderOpened.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dewiweb/ALSA-RAVENNA-AES67-Driver/3c4fe34ca113870091038db4a43c6390336b6376/Butler/webapp/advanced/dijit/themes/tundra/images/folderOpened.gif -------------------------------------------------------------------------------- /Butler/webapp/advanced/dijit/themes/tundra/images/i.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dewiweb/ALSA-RAVENNA-AES67-Driver/3c4fe34ca113870091038db4a43c6390336b6376/Butler/webapp/advanced/dijit/themes/tundra/images/i.gif -------------------------------------------------------------------------------- /Butler/webapp/advanced/dijit/themes/tundra/images/i_half.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dewiweb/ALSA-RAVENNA-AES67-Driver/3c4fe34ca113870091038db4a43c6390336b6376/Butler/webapp/advanced/dijit/themes/tundra/images/i_half.gif -------------------------------------------------------------------------------- /Butler/webapp/advanced/dijit/themes/tundra/images/i_half_rtl.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dewiweb/ALSA-RAVENNA-AES67-Driver/3c4fe34ca113870091038db4a43c6390336b6376/Butler/webapp/advanced/dijit/themes/tundra/images/i_half_rtl.gif -------------------------------------------------------------------------------- /Butler/webapp/advanced/dijit/themes/tundra/images/i_rtl.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dewiweb/ALSA-RAVENNA-AES67-Driver/3c4fe34ca113870091038db4a43c6390336b6376/Butler/webapp/advanced/dijit/themes/tundra/images/i_rtl.gif -------------------------------------------------------------------------------- /Butler/webapp/advanced/dijit/themes/tundra/images/leaf.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dewiweb/ALSA-RAVENNA-AES67-Driver/3c4fe34ca113870091038db4a43c6390336b6376/Butler/webapp/advanced/dijit/themes/tundra/images/leaf.gif -------------------------------------------------------------------------------- /Butler/webapp/advanced/dijit/themes/tundra/images/loading.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dewiweb/ALSA-RAVENNA-AES67-Driver/3c4fe34ca113870091038db4a43c6390336b6376/Butler/webapp/advanced/dijit/themes/tundra/images/loading.gif -------------------------------------------------------------------------------- /Butler/webapp/advanced/dijit/themes/tundra/images/menu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dewiweb/ALSA-RAVENNA-AES67-Driver/3c4fe34ca113870091038db4a43c6390336b6376/Butler/webapp/advanced/dijit/themes/tundra/images/menu.png -------------------------------------------------------------------------------- /Butler/webapp/advanced/dijit/themes/tundra/images/minusButton.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dewiweb/ALSA-RAVENNA-AES67-Driver/3c4fe34ca113870091038db4a43c6390336b6376/Butler/webapp/advanced/dijit/themes/tundra/images/minusButton.gif -------------------------------------------------------------------------------- /Butler/webapp/advanced/dijit/themes/tundra/images/no.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dewiweb/ALSA-RAVENNA-AES67-Driver/3c4fe34ca113870091038db4a43c6390336b6376/Butler/webapp/advanced/dijit/themes/tundra/images/no.gif -------------------------------------------------------------------------------- /Butler/webapp/advanced/dijit/themes/tundra/images/noX.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dewiweb/ALSA-RAVENNA-AES67-Driver/3c4fe34ca113870091038db4a43c6390336b6376/Butler/webapp/advanced/dijit/themes/tundra/images/noX.gif -------------------------------------------------------------------------------- /Butler/webapp/advanced/dijit/themes/tundra/images/plusButton.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dewiweb/ALSA-RAVENNA-AES67-Driver/3c4fe34ca113870091038db4a43c6390336b6376/Butler/webapp/advanced/dijit/themes/tundra/images/plusButton.gif -------------------------------------------------------------------------------- /Butler/webapp/advanced/dijit/themes/tundra/images/popupMenuBg.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dewiweb/ALSA-RAVENNA-AES67-Driver/3c4fe34ca113870091038db4a43c6390336b6376/Butler/webapp/advanced/dijit/themes/tundra/images/popupMenuBg.gif -------------------------------------------------------------------------------- /Butler/webapp/advanced/dijit/themes/tundra/images/preciseSliderThumb.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dewiweb/ALSA-RAVENNA-AES67-Driver/3c4fe34ca113870091038db4a43c6390336b6376/Butler/webapp/advanced/dijit/themes/tundra/images/preciseSliderThumb.gif -------------------------------------------------------------------------------- /Butler/webapp/advanced/dijit/themes/tundra/images/preciseSliderThumb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dewiweb/ALSA-RAVENNA-AES67-Driver/3c4fe34ca113870091038db4a43c6390336b6376/Butler/webapp/advanced/dijit/themes/tundra/images/preciseSliderThumb.png -------------------------------------------------------------------------------- /Butler/webapp/advanced/dijit/themes/tundra/images/preciseSliderThumbFocus.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dewiweb/ALSA-RAVENNA-AES67-Driver/3c4fe34ca113870091038db4a43c6390336b6376/Butler/webapp/advanced/dijit/themes/tundra/images/preciseSliderThumbFocus.gif -------------------------------------------------------------------------------- /Butler/webapp/advanced/dijit/themes/tundra/images/preciseSliderThumbFocus.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dewiweb/ALSA-RAVENNA-AES67-Driver/3c4fe34ca113870091038db4a43c6390336b6376/Butler/webapp/advanced/dijit/themes/tundra/images/preciseSliderThumbFocus.png -------------------------------------------------------------------------------- /Butler/webapp/advanced/dijit/themes/tundra/images/progressBarAnim-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dewiweb/ALSA-RAVENNA-AES67-Driver/3c4fe34ca113870091038db4a43c6390336b6376/Butler/webapp/advanced/dijit/themes/tundra/images/progressBarAnim-1.png -------------------------------------------------------------------------------- /Butler/webapp/advanced/dijit/themes/tundra/images/progressBarAnim-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dewiweb/ALSA-RAVENNA-AES67-Driver/3c4fe34ca113870091038db4a43c6390336b6376/Butler/webapp/advanced/dijit/themes/tundra/images/progressBarAnim-2.png -------------------------------------------------------------------------------- /Butler/webapp/advanced/dijit/themes/tundra/images/progressBarAnim-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dewiweb/ALSA-RAVENNA-AES67-Driver/3c4fe34ca113870091038db4a43c6390336b6376/Butler/webapp/advanced/dijit/themes/tundra/images/progressBarAnim-3.png -------------------------------------------------------------------------------- /Butler/webapp/advanced/dijit/themes/tundra/images/progressBarAnim-4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dewiweb/ALSA-RAVENNA-AES67-Driver/3c4fe34ca113870091038db4a43c6390336b6376/Butler/webapp/advanced/dijit/themes/tundra/images/progressBarAnim-4.png -------------------------------------------------------------------------------- /Butler/webapp/advanced/dijit/themes/tundra/images/progressBarAnim-5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dewiweb/ALSA-RAVENNA-AES67-Driver/3c4fe34ca113870091038db4a43c6390336b6376/Butler/webapp/advanced/dijit/themes/tundra/images/progressBarAnim-5.png -------------------------------------------------------------------------------- /Butler/webapp/advanced/dijit/themes/tundra/images/progressBarAnim-6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dewiweb/ALSA-RAVENNA-AES67-Driver/3c4fe34ca113870091038db4a43c6390336b6376/Butler/webapp/advanced/dijit/themes/tundra/images/progressBarAnim-6.png -------------------------------------------------------------------------------- /Butler/webapp/advanced/dijit/themes/tundra/images/progressBarAnim-7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dewiweb/ALSA-RAVENNA-AES67-Driver/3c4fe34ca113870091038db4a43c6390336b6376/Butler/webapp/advanced/dijit/themes/tundra/images/progressBarAnim-7.png -------------------------------------------------------------------------------- /Butler/webapp/advanced/dijit/themes/tundra/images/progressBarAnim-8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dewiweb/ALSA-RAVENNA-AES67-Driver/3c4fe34ca113870091038db4a43c6390336b6376/Butler/webapp/advanced/dijit/themes/tundra/images/progressBarAnim-8.png -------------------------------------------------------------------------------- /Butler/webapp/advanced/dijit/themes/tundra/images/progressBarAnim-9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dewiweb/ALSA-RAVENNA-AES67-Driver/3c4fe34ca113870091038db4a43c6390336b6376/Butler/webapp/advanced/dijit/themes/tundra/images/progressBarAnim-9.png -------------------------------------------------------------------------------- /Butler/webapp/advanced/dijit/themes/tundra/images/progressBarAnim.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dewiweb/ALSA-RAVENNA-AES67-Driver/3c4fe34ca113870091038db4a43c6390336b6376/Butler/webapp/advanced/dijit/themes/tundra/images/progressBarAnim.gif -------------------------------------------------------------------------------- /Butler/webapp/advanced/dijit/themes/tundra/images/progressBarAnim.psd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dewiweb/ALSA-RAVENNA-AES67-Driver/3c4fe34ca113870091038db4a43c6390336b6376/Butler/webapp/advanced/dijit/themes/tundra/images/progressBarAnim.psd -------------------------------------------------------------------------------- /Butler/webapp/advanced/dijit/themes/tundra/images/progressBarEmpty.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dewiweb/ALSA-RAVENNA-AES67-Driver/3c4fe34ca113870091038db4a43c6390336b6376/Butler/webapp/advanced/dijit/themes/tundra/images/progressBarEmpty.png -------------------------------------------------------------------------------- /Butler/webapp/advanced/dijit/themes/tundra/images/progressBarFull.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dewiweb/ALSA-RAVENNA-AES67-Driver/3c4fe34ca113870091038db4a43c6390336b6376/Butler/webapp/advanced/dijit/themes/tundra/images/progressBarFull.png -------------------------------------------------------------------------------- /Butler/webapp/advanced/dijit/themes/tundra/images/radioButtonActive.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dewiweb/ALSA-RAVENNA-AES67-Driver/3c4fe34ca113870091038db4a43c6390336b6376/Butler/webapp/advanced/dijit/themes/tundra/images/radioButtonActive.png -------------------------------------------------------------------------------- /Butler/webapp/advanced/dijit/themes/tundra/images/radioButtonActiveDisabled.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dewiweb/ALSA-RAVENNA-AES67-Driver/3c4fe34ca113870091038db4a43c6390336b6376/Butler/webapp/advanced/dijit/themes/tundra/images/radioButtonActiveDisabled.png -------------------------------------------------------------------------------- /Butler/webapp/advanced/dijit/themes/tundra/images/radioButtonActiveHover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dewiweb/ALSA-RAVENNA-AES67-Driver/3c4fe34ca113870091038db4a43c6390336b6376/Butler/webapp/advanced/dijit/themes/tundra/images/radioButtonActiveHover.png -------------------------------------------------------------------------------- /Butler/webapp/advanced/dijit/themes/tundra/images/radioButtonDisabled.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dewiweb/ALSA-RAVENNA-AES67-Driver/3c4fe34ca113870091038db4a43c6390336b6376/Butler/webapp/advanced/dijit/themes/tundra/images/radioButtonDisabled.png -------------------------------------------------------------------------------- /Butler/webapp/advanced/dijit/themes/tundra/images/radioButtonEnabled.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dewiweb/ALSA-RAVENNA-AES67-Driver/3c4fe34ca113870091038db4a43c6390336b6376/Butler/webapp/advanced/dijit/themes/tundra/images/radioButtonEnabled.png -------------------------------------------------------------------------------- /Butler/webapp/advanced/dijit/themes/tundra/images/radioButtonHover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dewiweb/ALSA-RAVENNA-AES67-Driver/3c4fe34ca113870091038db4a43c6390336b6376/Butler/webapp/advanced/dijit/themes/tundra/images/radioButtonHover.png -------------------------------------------------------------------------------- /Butler/webapp/advanced/dijit/themes/tundra/images/sliderEmpty.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dewiweb/ALSA-RAVENNA-AES67-Driver/3c4fe34ca113870091038db4a43c6390336b6376/Butler/webapp/advanced/dijit/themes/tundra/images/sliderEmpty.png -------------------------------------------------------------------------------- /Butler/webapp/advanced/dijit/themes/tundra/images/sliderEmptyVertical.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dewiweb/ALSA-RAVENNA-AES67-Driver/3c4fe34ca113870091038db4a43c6390336b6376/Butler/webapp/advanced/dijit/themes/tundra/images/sliderEmptyVertical.png -------------------------------------------------------------------------------- /Butler/webapp/advanced/dijit/themes/tundra/images/sliderFull.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dewiweb/ALSA-RAVENNA-AES67-Driver/3c4fe34ca113870091038db4a43c6390336b6376/Butler/webapp/advanced/dijit/themes/tundra/images/sliderFull.png -------------------------------------------------------------------------------- /Butler/webapp/advanced/dijit/themes/tundra/images/sliderFullFocus.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dewiweb/ALSA-RAVENNA-AES67-Driver/3c4fe34ca113870091038db4a43c6390336b6376/Butler/webapp/advanced/dijit/themes/tundra/images/sliderFullFocus.png -------------------------------------------------------------------------------- /Butler/webapp/advanced/dijit/themes/tundra/images/sliderFullVertical.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dewiweb/ALSA-RAVENNA-AES67-Driver/3c4fe34ca113870091038db4a43c6390336b6376/Butler/webapp/advanced/dijit/themes/tundra/images/sliderFullVertical.png -------------------------------------------------------------------------------- /Butler/webapp/advanced/dijit/themes/tundra/images/sliderFullVerticalFocus.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dewiweb/ALSA-RAVENNA-AES67-Driver/3c4fe34ca113870091038db4a43c6390336b6376/Butler/webapp/advanced/dijit/themes/tundra/images/sliderFullVerticalFocus.png -------------------------------------------------------------------------------- /Butler/webapp/advanced/dijit/themes/tundra/images/sliderThumb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dewiweb/ALSA-RAVENNA-AES67-Driver/3c4fe34ca113870091038db4a43c6390336b6376/Butler/webapp/advanced/dijit/themes/tundra/images/sliderThumb.png -------------------------------------------------------------------------------- /Butler/webapp/advanced/dijit/themes/tundra/images/sliderThumbFocus.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dewiweb/ALSA-RAVENNA-AES67-Driver/3c4fe34ca113870091038db4a43c6390336b6376/Butler/webapp/advanced/dijit/themes/tundra/images/sliderThumbFocus.gif -------------------------------------------------------------------------------- /Butler/webapp/advanced/dijit/themes/tundra/images/sliderThumbFocus.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dewiweb/ALSA-RAVENNA-AES67-Driver/3c4fe34ca113870091038db4a43c6390336b6376/Butler/webapp/advanced/dijit/themes/tundra/images/sliderThumbFocus.png -------------------------------------------------------------------------------- /Butler/webapp/advanced/dijit/themes/tundra/images/smallArrowDown.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dewiweb/ALSA-RAVENNA-AES67-Driver/3c4fe34ca113870091038db4a43c6390336b6376/Butler/webapp/advanced/dijit/themes/tundra/images/smallArrowDown.png -------------------------------------------------------------------------------- /Butler/webapp/advanced/dijit/themes/tundra/images/smallArrowUp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dewiweb/ALSA-RAVENNA-AES67-Driver/3c4fe34ca113870091038db4a43c6390336b6376/Butler/webapp/advanced/dijit/themes/tundra/images/smallArrowUp.png -------------------------------------------------------------------------------- /Butler/webapp/advanced/dijit/themes/tundra/images/splitContainerSizerH-thumb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dewiweb/ALSA-RAVENNA-AES67-Driver/3c4fe34ca113870091038db4a43c6390336b6376/Butler/webapp/advanced/dijit/themes/tundra/images/splitContainerSizerH-thumb.png -------------------------------------------------------------------------------- /Butler/webapp/advanced/dijit/themes/tundra/images/splitContainerSizerH.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dewiweb/ALSA-RAVENNA-AES67-Driver/3c4fe34ca113870091038db4a43c6390336b6376/Butler/webapp/advanced/dijit/themes/tundra/images/splitContainerSizerH.png -------------------------------------------------------------------------------- /Butler/webapp/advanced/dijit/themes/tundra/images/splitContainerSizerV-thumb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dewiweb/ALSA-RAVENNA-AES67-Driver/3c4fe34ca113870091038db4a43c6390336b6376/Butler/webapp/advanced/dijit/themes/tundra/images/splitContainerSizerV-thumb.png -------------------------------------------------------------------------------- /Butler/webapp/advanced/dijit/themes/tundra/images/splitContainerSizerV.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dewiweb/ALSA-RAVENNA-AES67-Driver/3c4fe34ca113870091038db4a43c6390336b6376/Butler/webapp/advanced/dijit/themes/tundra/images/splitContainerSizerV.png -------------------------------------------------------------------------------- /Butler/webapp/advanced/dijit/themes/tundra/images/spriteArrows.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dewiweb/ALSA-RAVENNA-AES67-Driver/3c4fe34ca113870091038db4a43c6390336b6376/Butler/webapp/advanced/dijit/themes/tundra/images/spriteArrows.gif -------------------------------------------------------------------------------- /Butler/webapp/advanced/dijit/themes/tundra/images/spriteArrows.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dewiweb/ALSA-RAVENNA-AES67-Driver/3c4fe34ca113870091038db4a43c6390336b6376/Butler/webapp/advanced/dijit/themes/tundra/images/spriteArrows.png -------------------------------------------------------------------------------- /Butler/webapp/advanced/dijit/themes/tundra/images/spriteRoundedIconsSmall.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dewiweb/ALSA-RAVENNA-AES67-Driver/3c4fe34ca113870091038db4a43c6390336b6376/Butler/webapp/advanced/dijit/themes/tundra/images/spriteRoundedIconsSmall.gif -------------------------------------------------------------------------------- /Butler/webapp/advanced/dijit/themes/tundra/images/spriteRoundedIconsSmall.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dewiweb/ALSA-RAVENNA-AES67-Driver/3c4fe34ca113870091038db4a43c6390336b6376/Butler/webapp/advanced/dijit/themes/tundra/images/spriteRoundedIconsSmall.png -------------------------------------------------------------------------------- /Butler/webapp/advanced/dijit/themes/tundra/images/tabActive.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dewiweb/ALSA-RAVENNA-AES67-Driver/3c4fe34ca113870091038db4a43c6390336b6376/Butler/webapp/advanced/dijit/themes/tundra/images/tabActive.png -------------------------------------------------------------------------------- /Butler/webapp/advanced/dijit/themes/tundra/images/tabClose.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dewiweb/ALSA-RAVENNA-AES67-Driver/3c4fe34ca113870091038db4a43c6390336b6376/Butler/webapp/advanced/dijit/themes/tundra/images/tabClose.gif -------------------------------------------------------------------------------- /Butler/webapp/advanced/dijit/themes/tundra/images/tabClose.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dewiweb/ALSA-RAVENNA-AES67-Driver/3c4fe34ca113870091038db4a43c6390336b6376/Butler/webapp/advanced/dijit/themes/tundra/images/tabClose.png -------------------------------------------------------------------------------- /Butler/webapp/advanced/dijit/themes/tundra/images/tabCloseHover.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dewiweb/ALSA-RAVENNA-AES67-Driver/3c4fe34ca113870091038db4a43c6390336b6376/Butler/webapp/advanced/dijit/themes/tundra/images/tabCloseHover.gif -------------------------------------------------------------------------------- /Butler/webapp/advanced/dijit/themes/tundra/images/tabCloseHover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dewiweb/ALSA-RAVENNA-AES67-Driver/3c4fe34ca113870091038db4a43c6390336b6376/Butler/webapp/advanced/dijit/themes/tundra/images/tabCloseHover.png -------------------------------------------------------------------------------- /Butler/webapp/advanced/dijit/themes/tundra/images/tabDisabled.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dewiweb/ALSA-RAVENNA-AES67-Driver/3c4fe34ca113870091038db4a43c6390336b6376/Butler/webapp/advanced/dijit/themes/tundra/images/tabDisabled.png -------------------------------------------------------------------------------- /Butler/webapp/advanced/dijit/themes/tundra/images/tabEnabled.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dewiweb/ALSA-RAVENNA-AES67-Driver/3c4fe34ca113870091038db4a43c6390336b6376/Butler/webapp/advanced/dijit/themes/tundra/images/tabEnabled.png -------------------------------------------------------------------------------- /Butler/webapp/advanced/dijit/themes/tundra/images/tabHover.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dewiweb/ALSA-RAVENNA-AES67-Driver/3c4fe34ca113870091038db4a43c6390336b6376/Butler/webapp/advanced/dijit/themes/tundra/images/tabHover.gif -------------------------------------------------------------------------------- /Butler/webapp/advanced/dijit/themes/tundra/images/tabHover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dewiweb/ALSA-RAVENNA-AES67-Driver/3c4fe34ca113870091038db4a43c6390336b6376/Butler/webapp/advanced/dijit/themes/tundra/images/tabHover.png -------------------------------------------------------------------------------- /Butler/webapp/advanced/dijit/themes/tundra/images/titleBar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dewiweb/ALSA-RAVENNA-AES67-Driver/3c4fe34ca113870091038db4a43c6390336b6376/Butler/webapp/advanced/dijit/themes/tundra/images/titleBar.png -------------------------------------------------------------------------------- /Butler/webapp/advanced/dijit/themes/tundra/images/titleBarBg.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dewiweb/ALSA-RAVENNA-AES67-Driver/3c4fe34ca113870091038db4a43c6390336b6376/Butler/webapp/advanced/dijit/themes/tundra/images/titleBarBg.gif -------------------------------------------------------------------------------- /Butler/webapp/advanced/dijit/themes/tundra/images/tooltipConnectorDown.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dewiweb/ALSA-RAVENNA-AES67-Driver/3c4fe34ca113870091038db4a43c6390336b6376/Butler/webapp/advanced/dijit/themes/tundra/images/tooltipConnectorDown.gif -------------------------------------------------------------------------------- /Butler/webapp/advanced/dijit/themes/tundra/images/tooltipConnectorDown.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dewiweb/ALSA-RAVENNA-AES67-Driver/3c4fe34ca113870091038db4a43c6390336b6376/Butler/webapp/advanced/dijit/themes/tundra/images/tooltipConnectorDown.png -------------------------------------------------------------------------------- /Butler/webapp/advanced/dijit/themes/tundra/images/tooltipConnectorLeft.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dewiweb/ALSA-RAVENNA-AES67-Driver/3c4fe34ca113870091038db4a43c6390336b6376/Butler/webapp/advanced/dijit/themes/tundra/images/tooltipConnectorLeft.gif -------------------------------------------------------------------------------- /Butler/webapp/advanced/dijit/themes/tundra/images/tooltipConnectorLeft.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dewiweb/ALSA-RAVENNA-AES67-Driver/3c4fe34ca113870091038db4a43c6390336b6376/Butler/webapp/advanced/dijit/themes/tundra/images/tooltipConnectorLeft.png -------------------------------------------------------------------------------- /Butler/webapp/advanced/dijit/themes/tundra/images/tooltipConnectorRight.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dewiweb/ALSA-RAVENNA-AES67-Driver/3c4fe34ca113870091038db4a43c6390336b6376/Butler/webapp/advanced/dijit/themes/tundra/images/tooltipConnectorRight.gif -------------------------------------------------------------------------------- /Butler/webapp/advanced/dijit/themes/tundra/images/tooltipConnectorRight.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dewiweb/ALSA-RAVENNA-AES67-Driver/3c4fe34ca113870091038db4a43c6390336b6376/Butler/webapp/advanced/dijit/themes/tundra/images/tooltipConnectorRight.png -------------------------------------------------------------------------------- /Butler/webapp/advanced/dijit/themes/tundra/images/tooltipConnectorUp.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dewiweb/ALSA-RAVENNA-AES67-Driver/3c4fe34ca113870091038db4a43c6390336b6376/Butler/webapp/advanced/dijit/themes/tundra/images/tooltipConnectorUp.gif -------------------------------------------------------------------------------- /Butler/webapp/advanced/dijit/themes/tundra/images/tooltipConnectorUp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dewiweb/ALSA-RAVENNA-AES67-Driver/3c4fe34ca113870091038db4a43c6390336b6376/Butler/webapp/advanced/dijit/themes/tundra/images/tooltipConnectorUp.png -------------------------------------------------------------------------------- /Butler/webapp/advanced/dijit/themes/tundra/images/treeExpand_leaf.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dewiweb/ALSA-RAVENNA-AES67-Driver/3c4fe34ca113870091038db4a43c6390336b6376/Butler/webapp/advanced/dijit/themes/tundra/images/treeExpand_leaf.gif -------------------------------------------------------------------------------- /Butler/webapp/advanced/dijit/themes/tundra/images/treeExpand_leaf_rtl.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dewiweb/ALSA-RAVENNA-AES67-Driver/3c4fe34ca113870091038db4a43c6390336b6376/Butler/webapp/advanced/dijit/themes/tundra/images/treeExpand_leaf_rtl.gif -------------------------------------------------------------------------------- /Butler/webapp/advanced/dijit/themes/tundra/images/treeExpand_loading.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dewiweb/ALSA-RAVENNA-AES67-Driver/3c4fe34ca113870091038db4a43c6390336b6376/Butler/webapp/advanced/dijit/themes/tundra/images/treeExpand_loading.gif -------------------------------------------------------------------------------- /Butler/webapp/advanced/dijit/themes/tundra/images/treeExpand_minus.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dewiweb/ALSA-RAVENNA-AES67-Driver/3c4fe34ca113870091038db4a43c6390336b6376/Butler/webapp/advanced/dijit/themes/tundra/images/treeExpand_minus.gif -------------------------------------------------------------------------------- /Butler/webapp/advanced/dijit/themes/tundra/images/treeExpand_minus_rtl.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dewiweb/ALSA-RAVENNA-AES67-Driver/3c4fe34ca113870091038db4a43c6390336b6376/Butler/webapp/advanced/dijit/themes/tundra/images/treeExpand_minus_rtl.gif -------------------------------------------------------------------------------- /Butler/webapp/advanced/dijit/themes/tundra/images/treeExpand_mius.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dewiweb/ALSA-RAVENNA-AES67-Driver/3c4fe34ca113870091038db4a43c6390336b6376/Butler/webapp/advanced/dijit/themes/tundra/images/treeExpand_mius.gif -------------------------------------------------------------------------------- /Butler/webapp/advanced/dijit/themes/tundra/images/treeExpand_plus.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dewiweb/ALSA-RAVENNA-AES67-Driver/3c4fe34ca113870091038db4a43c6390336b6376/Butler/webapp/advanced/dijit/themes/tundra/images/treeExpand_plus.gif -------------------------------------------------------------------------------- /Butler/webapp/advanced/dijit/themes/tundra/images/treeExpand_plus_rtl.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dewiweb/ALSA-RAVENNA-AES67-Driver/3c4fe34ca113870091038db4a43c6390336b6376/Butler/webapp/advanced/dijit/themes/tundra/images/treeExpand_plus_rtl.gif -------------------------------------------------------------------------------- /Butler/webapp/advanced/dijit/themes/tundra/images/treeHover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dewiweb/ALSA-RAVENNA-AES67-Driver/3c4fe34ca113870091038db4a43c6390336b6376/Butler/webapp/advanced/dijit/themes/tundra/images/treeHover.png -------------------------------------------------------------------------------- /Butler/webapp/advanced/dijit/themes/tundra/images/validationInputBg.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dewiweb/ALSA-RAVENNA-AES67-Driver/3c4fe34ca113870091038db4a43c6390336b6376/Butler/webapp/advanced/dijit/themes/tundra/images/validationInputBg.gif -------------------------------------------------------------------------------- /Butler/webapp/advanced/dijit/themes/tundra/images/validationInputBg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dewiweb/ALSA-RAVENNA-AES67-Driver/3c4fe34ca113870091038db4a43c6390336b6376/Butler/webapp/advanced/dijit/themes/tundra/images/validationInputBg.png -------------------------------------------------------------------------------- /Butler/webapp/advanced/dijit/themes/tundra/images/warning.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dewiweb/ALSA-RAVENNA-AES67-Driver/3c4fe34ca113870091038db4a43c6390336b6376/Butler/webapp/advanced/dijit/themes/tundra/images/warning.png -------------------------------------------------------------------------------- /Butler/webapp/advanced/dijit/themes/tundra/layout/AccordionContainer.css: -------------------------------------------------------------------------------- 1 | .tundra .dijitAccordionContainer {border-color: #ccc; background-color: #fff;}.tundra .dijitAccordionTitle {background:#fafafa url("../images/titleBar.png") repeat-x bottom left; border-top: 1px solid #bfbfbf; padding: 4px 4px 4px 8px;}.tundra .dijitAccordionTitleHover {background: #f8fafd url("../images/accordionItemHover.gif") bottom repeat-x;}.tundra .dijitAccordionTitleSelected {background: #f9f9f9 url("../images/accordionItemActive.gif") bottom repeat-x; font-weight: bold; border-top: 1px solid #aaaaaa; border-bottom: 1px solid #bfbfbf; padding: 4px 4px 4px 8px;} -------------------------------------------------------------------------------- /Butler/webapp/advanced/dijit/themes/tundra/layout/BorderContainer.css: -------------------------------------------------------------------------------- 1 | .tundra .dijitBorderContainer {background-color: #fcfcfc; padding: 5px;}.tundra .dijitSplitContainer-child,.tundra .dijitBorderContainer-child {border: 1px #ccc solid;}.tundra .dijitBorderContainer-dijitTabContainerTop,.tundra .dijitBorderContainer-dijitTabContainerBottom,.tundra .dijitBorderContainer-dijitTabContainerLeft,.tundra .dijitBorderContainer-dijitTabContainerRight {border: none;}.tundra .dijitBorderContainer-dijitBorderContainer {border: none; padding: 0;}.tundra .dijitSplitterH,.tundra .dijitGutterH {background:#fcfcfc; border:0; height:5px;}.tundra .dijitSplitterH .dijitSplitterThumb {background:#B0B0B0 none; height:1px; top:2px; width:19px;}.tundra .dijitSplitterV,.tundra .dijitGutterV {background:#fcfcfc; border:0; width:5px;}.tundra .dijitSplitterV .dijitSplitterThumb {background:#B0B0B0 none; height:19px; left:2px; width:1px;}.tundra .dijitSplitterActive {font-size: 1px; background-image: none; background-color: #aaa; -moz-opacity: 0.6; opacity: 0.6; filter: Alpha(Opacity=60); margin: 0;} -------------------------------------------------------------------------------- /Butler/webapp/advanced/dijit/themes/tundra/layout/ContentPane.css: -------------------------------------------------------------------------------- 1 | .tundra .dijitContentPane {padding: 0;}.tundra .dijitTabContainerTop-dijitContentPane,.tundra .dijitTabContainerLeft-dijitContentPane,.tundra .dijitTabContainerBottom-dijitContentPane,.tundra .dijitTabContainerRight-dijitContentPane,.tundra .dijitAccordionContainer-dijitContentPane {background-color: #fff; padding: 5px;}.tundra .dijitSplitContainer-dijitContentPane,.tundra .dijitBorderContainer-dijitContentPane {background-color: #fff; padding: 5px;} -------------------------------------------------------------------------------- /Butler/webapp/advanced/dijit/themes/tundra/layout/SplitContainer.css: -------------------------------------------------------------------------------- 1 | .tundra .dijitSplitContainerSizerH {background:url("../images/splitContainerSizerV.png") repeat-y #fff; border:0; border-left:1px solid #bfbfbf; border-right:1px solid #bfbfbf; width:7px;}.tundra .dijitSplitContainerSizerH .thumb {background:url("../images/splitContainerSizerV-thumb.png") no-repeat #ccc; left:1px; width:3px; height:19px; overflow: hidden;}.tundra .dijitSplitContainerSizerV {background:url("../images/splitContainerSizerH.png") repeat-x #fff; border:0; border-top:1px solid #bfbfbf; border-bottom:1px solid #bfbfbf; height:7px;}.tundra .dijitSplitContainerSizerV .thumb {background:url("../images/splitContainerSizerH-thumb.png") no-repeat #ccc; top:1px; width:19px; height:3px; overflow: hidden;} -------------------------------------------------------------------------------- /Butler/webapp/advanced/dijit/themes/tundra/layout/TabContainer.css: -------------------------------------------------------------------------------- 1 | .tundra .dijitTabPaneWrapper {background:#fff; border:1px solid #ccc; margin: 0; padding: 0;}.tundra .dijitTab {line-height:normal; margin-right:4px; padding:0; border:1px solid #ccc; background:#e2e2e2 url("../images/tabEnabled.png") repeat-x;}.tundra .dijitTabInnerDiv {padding:2px 8px 2px 9px;}.tundra .dijitTabSpacer {display: none;}.tundra .dijitTabContainer .tabStripRBtn {margin-right: 20px;}.tundra .dijitTabContainer .tabStripLBtn {margin-left: 20px;}.tundra .nowrapTabStrip .dijitTab {top: 2px;}.tundra .dijitTabContainerBottom .nowrapTabStrip .dijitTab {top: 0; bottom: 2px;}.tundra .dijitTabChecked {background-color:#fff; border-color: #ccc; background-image:none;}.tundra .dijitTabHover {color: #243C5F; border-top-color:#92a0b3; border-left-color:#92a0b3; border-right-color:#92a0b3; border-bottom-color:#92a0b3; background:#e2e2e2 url("../images/tabHover.gif") repeat-x;}.tundra .dijitTabContainerTop .dijitTabHover {border-bottom-color:#ccc;}.tundra .dijitTabContainerBottom .dijitTabHover {border-top-color:#ccc;}.tundra .dijitTabContainerLeft .dijitTabHover {border-right-color:#ccc;}.tundra .dijitTabContainerRight .dijitTabHover {border-left-color:#ccc;}.tundra .dijitTabContainer .dijitTabCheckedHover {color: inherit; border:1px solid #ccc; background:#fff;}.tundra .dijitTab .tabLabel {min-height: 12px; display: inline-block;}.tundra .dijitTabContainerNested .dijitTabListWrapper {height: auto;}.tundra .dijitTabContainerNested .dijitTabContainerTop-tabs {border-bottom: 1px solid #CCC;}.tundra .dijitTabContainerTabListNested .dijitTab {background: none; border: none; top: 0;}.tundra .dijitTabContainerTabListNested .dijitTab .dijitTabContent {}.tundra .dijitTabContainerTabListNested .dijitTabHover .dijitTabContent .tabLabel {text-decoration: underline;}.tundra .dijitTabContainerTabListNested .dijitTabChecked .dijitTabContent .tabLabel {text-decoration: underline; font-weight: bold;}.tundra .dijitTabContainer .dijitTabPaneWrapperNested {border: none;}.tundra .dijitTabCloseButton {background: url("../images/tabClose.png") no-repeat right top; width: 12px; height: 12px;}.dj_ie6 .tundra .dijitTabCloseButton {background-image : url("../images/tabClose.gif");}.tundra .dijitTabCloseButtonHover {background-image : url("../images/tabCloseHover.png");}.dj_ie6 .tundra .dijitTabCloseButtonHover {background-image : url("../images/tabCloseHover.gif");}.tundra .dijitTabContainerTop-tabs {margin-bottom: 0; border-color: #cccccc; padding-left: 3px; background-position: bottom;}.tundra .dijitTabContainerTop-tabs .dijitTab {top: 0; margin-bottom: -1px;}.tundra .dijitTabContainerTop-container {border-top: none;}.tundra .dijitTabContainerTop-tabs .dijitTabChecked {border-bottom-color:white;}.tundra .dijitTabContainerTop-tabs,.tundra .dijitTabContainerBottom-tabs {padding-left: 3px; padding-right: 3px;}.tundra .dijitTabContainerTopStrip {border-top: 1px solid #CCC; border-right: 1px solid #CCC; border-left: 1px solid #CCC; padding-top: 2px; background: #f2f2f2;}.tundra .dijitTabContainerTopNone {padding-top: 0;}.tundra .dijitTabContainerBottom-tabs {margin-top: 0; border-color: #cccccc; background-position: top; padding-left: 3px;}.tundra .dijitTabContainerBottom-tabs .dijitTab {bottom: 0; margin-top: -1px;}.tundra .dijitTabContainerBottom-container {border-bottom: none;}.tundra .dijitTabContainerBottom-tabs .dijitTabChecked {border-top-color:white;}.tundra .dijitTabContainerBottomStrip {padding-bottom: 2px; border: 1px solid #ccc; background: #f2f2f2; border-top: none;}.tundra .dijitTabContainerRight-tabs {border-color: #ccc; height: 100%; padding-top: 3px;}.tundra .dijitTabContainerRightStrip {margin-left: -1px;}.tundra .dijitTabContainerRight-container {border-right: none;}.tundra .dijitTabContainerRight-tabs .dijitTabChecked {border-left-color:white;}.tundra .dijitTabContainerRightStrip {padding-right: 2px; border: 1px solid #ccc;}.tundra .dijitTabContainerRightStrip {background: #f2f2f2;}.tundra .dijitTabContainerLeft-tabs {border-color: #ccc; padding-top: 3px; height: 100%;}.tundra .dijitTabContainerLeft-container {border-left: none;}.tundra .dijitTabContainerLeft-tabs .dijitTabChecked {border-right-color:white;}.tundra .dijitTabContainerLeftStrip {padding-left: 2px; border: 1px solid #ccc; background: #f2f2f2; border-right: none;}.tundra .dijitTabContainerLeft-tabs .dijitTab,.tundra .dijitTabContainerRight-tabs .dijitTab {margin-right:0; margin-bottom:4px;}.tundra .dijitTabContainerTop-dijitContentPane .dijitTabContainerTop-tabs {border-left: 0 solid #ccc; border-top: 0 solid #ccc; border-right: 0 solid #ccc; padding-top: 0; padding-left: 0;}.tundra .dijitTabContainer .tabStripButton {margin-right: 0; padding-top: 2px; z-index: 12;}.tundra .dijitTabContainerBottom .tabStripButton {padding-top: 2px;}.tundra .tabStrip-disabled .tabStripButton .dijitTabInnerDiv {padding-bottom: 3px; padding-top: 1px;}.tundra .tabStripButton .dijitTabInnerDiv {padding: 3px 2px 4px 2px;}.dj_ie6 .tundra .tabStripButton .dijitTabInnerDiv,.dj_ie7 .tundra .tabStripButton .dijitTabInnerDiv,.dj_opera .tundra .tabStripButton .dijitTabInnerDiv {padding-bottom: 5px;}.dj_ie6 .tundra .tabStrip-disabled .tabStripButton .dijitTabInnerDiv,.dj_ie7 .tundra .tabStrip-disabled .tabStripButton .dijitTabInnerDiv,.dj_opera .tundra .tabStrip-disabled .tabStripButton .dijitTabInnerDiv {padding-bottom: 4px;}.tundra .dijitTabStripIcon {height: 14px; width: 14px; background: url(../images/spriteRoundedIconsSmall.png) no-repeat left top ;}.dj_ie6 .tundra .dijitTabStripIcon {background-image: url(../images/spriteRoundedIconsSmall.gif);}.tundra .dijitTabStripSlideRightIcon {background-position: -30px top;}.tundra .dijitTabStripMenuIcon {background-position: -15px top;} -------------------------------------------------------------------------------- /Butler/webapp/advanced/dijit/themes/tundra/layout/TabContainer_rtl.css: -------------------------------------------------------------------------------- 1 | .tundra .dijitTabRtl {-moz-box-orient:horizontal; text-align: right;}.tundra .dijitTabRtl .dijitTabInnerDiv {padding:2px 9px 2px 8px;}.tundra .tabStrip-disabled .tabStripButtonRtl .dijitTabInnerDiv {padding-bottom: 3px; padding-top: 1px;}.tundra .tabStripButtonRtl .dijitTabInnerDiv {padding: 3px 2px 4px 2px;}.tundra .dijitTabPaneWrapper {#zoom: 1;}.dj_ie-rtl .tundra .dijitTabContainerLeft-tabs {margin-left: 1px !important;}.dj_ie-rtl .tundra .dijitTabContainerRight-tabs {margin-right: 1px !important;}.tundra .dijitTabContainerLeft-tabs .dijitTabRtl,.tundra .dijitTabContainerRight-tabs .dijitTabRtl {margin-left:0;}.dj_ie .tundra .dijitTabRtl .dijitTabInnerDiv {width : 0.1% !important;}.dj_iequirks-rtl .tundra .dijitTabContainerTopNone,.dj_iequirks-rtl .tundra .dijitTabContainerBottomNone {border-left: 1px solid #fff; border-right: 1px solid #fff;} -------------------------------------------------------------------------------- /Butler/webapp/advanced/dijit/themes/tundra/tundra_rtl.css: -------------------------------------------------------------------------------- 1 | .dijitRtl .dijitPlaceHolder {left: auto; right: 0;}.dijitMenuItemRtl {text-align: right;}.dj_iequirks .dijitComboButtonRtl button {float:left;}.dijitTextBoxRtl .dijitValidationContainer,.dijitTextBoxRtl .dijitSpinnerButtonContainer,.dijitComboBoxRtl .dijitArrowButtonContainer {border-right-width: 1px !important; border-left-width: 0 !important;}.dijitSpinnerRtl .dijitSpinnerButtonContainer .dijitArrowButton {right: 0; left: auto;}.dj_ie7 .dijitInputContainer {display: inline-block;}.dijitTextBoxRtl .dijitSpinnerButtonContainer,.dijitTextBoxRtl .dijitValidationContainer,.dijitTextBoxRtl .dijitArrowButtonContainer {float: left;}.dijitCalendarRtl .dijitCalendarNextYear {margin:0 0.55em 0 0;}.dijitCalendarRtl .dijitCalendarPreviousYear {margin:0 0 0 0.55em;}.dijitSliderRtl .dijitSliderImageHandleV {left:auto;}.dijitSliderRtl .dijitSliderImageHandleH {left:-50%;}.dijitSliderRtl .dijitSliderMoveableH {right:auto; left:0;}.dijitSliderRtl .dijitRuleContainerV {float:right;}.dj_ie .dijitSliderRtl .dijitRuleContainerV {text-align:right;}.dj_ie .dijitSliderRtl .dijitRuleLabelV {text-align:left;}.dj_ie .dijitSliderRtl .dijitRuleLabelH {zoom:1;}.dijitSliderRtl .dijitSliderProgressBarH {float:right; right:0; left:auto;}.dijitRtl .dijitContentPaneLoading .dijitIconLoading,.dijitRtl .dijitContentPaneError .dijitIconError {margin-right: 0; margin-left: 9px;}.dijitTabControllerRtl .nowrapTabStrip {text-align: right;}.dijitTabRtl .dijitTabCloseButton {margin-left: 0; margin-right: 1em;}.dj_ie .dijitTimePickerRtl .dijitTimePickerItem {width:100%;}.dijitColorPaletteRtl .dijitColorPaletteUnder {left: auto; right: 0;}.dijitSelectRtl .dijitButtonContents {text-align: right;}.tundra .dijitCalendarRtl .dijitCalendarDecrease {background-position: -30px top;}.tundra .dijitCalendarRtl .dijitCalendarIncrease {background-position: 0 top;} .dj_ie6 .tundra .dijitTimePickerRtl .dijitTimePickerMarkerHover,.dj_ie7 .tundra .dijitTimePickerRtl .dijitTimePickerMarkerHover {border-top: 0;}.tundra .dijitDialogRtl .dijitDialogCloseIcon {right: auto; left: 5px;}.tundra .dijitEditorRtl .dijitEditorIcon {background-image: url(../../icons/images/editorIconsEnabled_rtl.png);}.tundra .dijitEditorRtlDisabled .dijitEditorIcon {background-image: url(../../icons/images/editorIconsDisabled_rtl.png);}.dijitEditorRtl .dijitEditorIcon {background-image: url(../../icons/images/editorIconsEnabled_rtl.png);}.dijitEditorRtlDisabled .dijitEditorIcon {background-image: url(../../icons/images/editorIconsDisabled_rtl.png);}.dijitToolbarRtl .dijitToolbarSeparator {background-image: url(../../icons/images/editorIconsEnabled_rtl.png);}.tundra .dijitMenuItemRtl .dijitMenuExpand {background-position: -7px 0;}.tundra .dijitTreeNodeRtl,.tundra .dijitTreeNodeRtl .dijitTreeExpandoLeaf {background-image: none;}.tundra .dijitTreeNodeRtl .dijitTreeExpandoOpened {background-image: url(images/treeExpand_minus_rtl.gif);}.tundra .dijitTreeNodeRtl .dijitTreeExpandoClosed {background-image: url(images/treeExpand_plus_rtl.gif);}.tundra .dijitTitlePaneRtl .dijitClosed .dijitArrowNode {background-position: -7px 0;}.tundra .dijitTabRtl {-moz-box-orient:horizontal; text-align: right;}.tundra .dijitTabRtl .dijitTabInnerDiv {padding:2px 9px 2px 8px;}.tundra .tabStrip-disabled .tabStripButtonRtl .dijitTabInnerDiv {padding-bottom: 3px; padding-top: 1px;}.tundra .tabStripButtonRtl .dijitTabInnerDiv {padding: 3px 2px 4px 2px;}.tundra .dijitTabPaneWrapper {#zoom: 1;}.dj_ie-rtl .tundra .dijitTabContainerLeft-tabs {margin-left: 1px !important;}.dj_ie-rtl .tundra .dijitTabContainerRight-tabs {margin-right: 1px !important;}.tundra .dijitTabContainerLeft-tabs .dijitTabRtl,.tundra .dijitTabContainerRight-tabs .dijitTabRtl {margin-left:0;}.dj_ie .tundra .dijitTabRtl .dijitTabInnerDiv {width : 0.1% !important;}.dj_iequirks-rtl .tundra .dijitTabContainerTopNone,.dj_iequirks-rtl .tundra .dijitTabContainerBottomNone {border-left: 1px solid #fff; border-right: 1px solid #fff;}.tundra .dijitSliderRtl .dijitSliderProgressBarH,.tundra .dijitSliderRtl .dijitSliderRemainingBarH,.tundra .dijitSliderRtl .dijitSliderLeftBumper,.tundra .dijitSliderRtl .dijitSliderRightBumper,.tundra .dijitSliderRtl .dijitSliderTopBumper {background-position: top right;}.tundra .dijitSliderRtl .dijitSliderProgressBarV,.tundra .dijitSliderRtl .dijitSliderRemainingBarV,.tundra .dijitSliderRtl .dijitSliderBottomBumper {background-position: bottom right;}.tundra .dijitSliderRtl .dijitSliderLeftBumper {border-left-width: 0; border-right-width: 1px;}.tundra .dijitSliderRtl .dijitSliderRightBumper {border-left-width: 1px; border-right-width: 0;}.tundra .dijitSliderRtl .dijitSliderIncrementIconH {background-position: -7px 0;}.tundra .dijitSliderRtl .dijitSliderDecrementIconH {background-position: -14px 0;} -------------------------------------------------------------------------------- /Butler/webapp/advanced/dojo/resources/LICENSE: -------------------------------------------------------------------------------- 1 | License Disclaimer: 2 | 3 | All contents of this directory are Copyright (c) the Dojo Foundation, with the 4 | following exceptions: 5 | ------------------------------------------------------------------------------- 6 | 7 | dojo.css: 8 | * parts Copyright (c) 2007, Yahoo! Inc. All rights reserved. 9 | Distributed under the terms of the BSD License 10 | 11 | The Program includes all or portions of the following software which was obtained under the terms and conditions of the BSD License. 12 | 13 | http://developer.yahoo.com/yui/license.html 14 | 15 | Copyright (c) 2007, Yahoo! Inc. 16 | All rights reserved. 17 | Redistribution and use of this software in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 18 | * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 19 | * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the 20 | documentation and/or other materials provided with the distribution. 21 | * Neither the name of Yahoo! Inc. nor the names of its contributors may be used to endorse or promote products derived from this software without 22 | specific prior written permission of Yahoo! Inc. 23 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY 24 | EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 25 | MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 26 | COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, 27 | OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 28 | LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 29 | WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 30 | OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 31 | -------------------------------------------------------------------------------- /Butler/webapp/advanced/dojo/resources/_modules.js: -------------------------------------------------------------------------------- 1 | /*===== 2 | // Supplemental summaries for those hard-to-doc places your conventional doc parser can't reach. 3 | // Where possible, these summaries should appear inline in the code. 4 | // 5 | // this is "package level documentation" 6 | 7 | dojo.cldr = { 8 | // summary: transformation of relevant pieces of the Unicode.org Common Locale Data Repository 9 | // (see http://unicode.org/cldr) to JSON from the original XML with associated utility classes 10 | }; 11 | 12 | dojo.data = { 13 | // summary: A uniform data access layer 14 | }; 15 | 16 | dojo.dnd = { 17 | // summary: Drag and Drop resources 18 | }; 19 | 20 | dojo.io = { 21 | // summary: Additional I/O transports (Ajax) 22 | }; 23 | 24 | dojo.rpc = { 25 | // summary: Dojo remote-procedure-call resources 26 | }; 27 | 28 | // "variables" 29 | 30 | dojo.baseUrl = { 31 | // summary: The root relative path to dojo.js (as a string) 32 | // example: 33 | // if(typeof dojo != "undefined"){ console.log(dojo.baseUrl); } 34 | }; 35 | 36 | =====*/ 37 | -------------------------------------------------------------------------------- /Butler/webapp/advanced/dojo/resources/blank.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dewiweb/ALSA-RAVENNA-AES67-Driver/3c4fe34ca113870091038db4a43c6390336b6376/Butler/webapp/advanced/dojo/resources/blank.gif -------------------------------------------------------------------------------- /Butler/webapp/advanced/dojo/resources/blank.html: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /Butler/webapp/advanced/dojo/resources/dnd.css: -------------------------------------------------------------------------------- 1 | .dojoDndAvatar {font-size: 75%; color: black;}.dojoDndAvatarHeader td {padding-left: 20px; padding-right: 4px; height: 16px;}.dojoDndAvatarHeader {background: #ccc;}.dojoDndAvatarItem {background: #eee;}.dojoDndMove .dojoDndAvatarHeader {background-image: url(images/dndNoMove.png); background-repeat: no-repeat;}.dojoDndCopy .dojoDndAvatarHeader {background-image: url(images/dndNoCopy.png); background-repeat: no-repeat;}.dojoDndMove .dojoDndAvatarCanDrop .dojoDndAvatarHeader {background-image: url(images/dndMove.png); background-repeat: no-repeat;}.dojoDndCopy .dojoDndAvatarCanDrop .dojoDndAvatarHeader {background-image: url(images/dndCopy.png); background-repeat: no-repeat;}.dojoDndHandle {cursor: move;}.dojoDndIgnore {cursor: default;}.dijit_a11y .dojoDndAvatar {font-size: 1em; font-weight:bold;}.dijit_a11y .dojoDndAvatarHeader td {padding-left:2px !important;}.dijit_a11y .dojoDndAvatarHeader td span {padding-right: 5px;} -------------------------------------------------------------------------------- /Butler/webapp/advanced/dojo/resources/dojo.css: -------------------------------------------------------------------------------- 1 | body, div, dl, dt, dd, li, h1, h2, h3, h4, h5, h6, pre, form, fieldset, input, textarea, p, blockquote, th, td {margin: 0; padding: 0;}fieldset, img {border: 0 none;}address, caption, cite, code, dfn, th, var {font-style: normal; font-weight: normal;}caption, th {text-align: left;}q:before, q:after {content:"";}abbr, acronym {border:0;}body {font: 12px Myriad,Helvetica,Tahoma,Arial,clean,sans-serif; *font-size: 75%;}h1 {font-size: 1.5em; font-weight: normal; line-height: 1em; margin-top: 1em; margin-bottom:0;}h2 {font-size: 1.1667em; font-weight: bold; line-height: 1.286em; margin-top: 1.929em; margin-bottom:0.643em;}h3, h4, h5, h6 {font-size: 1em; font-weight: bold; line-height: 1.5em; margin-top: 1.5em; margin-bottom: 0;}p {font-size: 1em; margin-top: 1.5em; margin-bottom: 1.5em; line-height: 1.5em;}blockquote {font-size: 0.916em; margin-top: 3.272em; margin-bottom: 3.272em; line-height: 1.636em; padding: 1.636em; border-top: 1px solid #ccc; border-bottom: 1px solid #ccc;}ol li, ul li {font-size: 1em; line-height: 1.5em; margin: 0;}pre, code {font-size:115%; *font-size:100%; font-family: Courier, "Courier New"; background-color: #efefef; border: 1px solid #ccc;}pre {border-width: 1px 0; padding: 1.5em;}table {font-size:100%;}.dojoTabular {border-collapse: collapse; border-spacing: 0; border: 1px solid #ccc; margin: 0 1.5em;}.dojoTabular th {text-align: center; font-weight: bold;}.dojoTabular thead,.dojoTabular tfoot {background-color: #efefef; border: 1px solid #ccc; border-width: 1px 0;}.dojoTabular th,.dojoTabular td {padding: 0.25em 0.5em;} -------------------------------------------------------------------------------- /Butler/webapp/advanced/dojo/resources/iframe_history.html: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | 6 | 7 | 8 | 38 | 39 | 40 |

The Dojo Toolkit -- iframe_history.html

41 | 42 |

This file is used in Dojo's back/fwd button management.

43 | 44 | 45 | -------------------------------------------------------------------------------- /Butler/webapp/advanced/dojo/resources/images/dndCopy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dewiweb/ALSA-RAVENNA-AES67-Driver/3c4fe34ca113870091038db4a43c6390336b6376/Butler/webapp/advanced/dojo/resources/images/dndCopy.png -------------------------------------------------------------------------------- /Butler/webapp/advanced/dojo/resources/images/dndMove.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dewiweb/ALSA-RAVENNA-AES67-Driver/3c4fe34ca113870091038db4a43c6390336b6376/Butler/webapp/advanced/dojo/resources/images/dndMove.png -------------------------------------------------------------------------------- /Butler/webapp/advanced/dojo/resources/images/dndNoCopy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dewiweb/ALSA-RAVENNA-AES67-Driver/3c4fe34ca113870091038db4a43c6390336b6376/Butler/webapp/advanced/dojo/resources/images/dndNoCopy.png -------------------------------------------------------------------------------- /Butler/webapp/advanced/dojo/resources/images/dndNoMove.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dewiweb/ALSA-RAVENNA-AES67-Driver/3c4fe34ca113870091038db4a43c6390336b6376/Butler/webapp/advanced/dojo/resources/images/dndNoMove.png -------------------------------------------------------------------------------- /Butler/webapp/advanced/images/UserManualButton.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dewiweb/ALSA-RAVENNA-AES67-Driver/3c4fe34ca113870091038db4a43c6390336b6376/Butler/webapp/advanced/images/UserManualButton.png -------------------------------------------------------------------------------- /Butler/webapp/advanced/images/WelcomeOffLine.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dewiweb/ALSA-RAVENNA-AES67-Driver/3c4fe34ca113870091038db4a43c6390336b6376/Butler/webapp/advanced/images/WelcomeOffLine.jpg -------------------------------------------------------------------------------- /Butler/webapp/advanced/images/create-session.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dewiweb/ALSA-RAVENNA-AES67-Driver/3c4fe34ca113870091038db4a43c6390336b6376/Butler/webapp/advanced/images/create-session.png -------------------------------------------------------------------------------- /Butler/webapp/advanced/images/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dewiweb/ALSA-RAVENNA-AES67-Driver/3c4fe34ca113870091038db4a43c6390336b6376/Butler/webapp/advanced/images/favicon.ico -------------------------------------------------------------------------------- /Butler/webapp/advanced/images/merging_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dewiweb/ALSA-RAVENNA-AES67-Driver/3c4fe34ca113870091038db4a43c6390336b6376/Butler/webapp/advanced/images/merging_logo.png -------------------------------------------------------------------------------- /Butler/webapp/advanced/images/network-error.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dewiweb/ALSA-RAVENNA-AES67-Driver/3c4fe34ca113870091038db4a43c6390336b6376/Butler/webapp/advanced/images/network-error.png -------------------------------------------------------------------------------- /Butler/webapp/advanced/images/network-offline.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dewiweb/ALSA-RAVENNA-AES67-Driver/3c4fe34ca113870091038db4a43c6390336b6376/Butler/webapp/advanced/images/network-offline.png -------------------------------------------------------------------------------- /Butler/webapp/advanced/images/network-receive-error.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dewiweb/ALSA-RAVENNA-AES67-Driver/3c4fe34ca113870091038db4a43c6390336b6376/Butler/webapp/advanced/images/network-receive-error.png -------------------------------------------------------------------------------- /Butler/webapp/advanced/images/network-receive.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dewiweb/ALSA-RAVENNA-AES67-Driver/3c4fe34ca113870091038db4a43c6390336b6376/Butler/webapp/advanced/images/network-receive.png -------------------------------------------------------------------------------- /Butler/webapp/advanced/images/network-transmit.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dewiweb/ALSA-RAVENNA-AES67-Driver/3c4fe34ca113870091038db4a43c6390336b6376/Butler/webapp/advanced/images/network-transmit.png -------------------------------------------------------------------------------- /Butler/webapp/advanced/images/planet.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dewiweb/ALSA-RAVENNA-AES67-Driver/3c4fe34ca113870091038db4a43c6390336b6376/Butler/webapp/advanced/images/planet.png -------------------------------------------------------------------------------- /Butler/webapp/advanced/images/ravenna.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dewiweb/ALSA-RAVENNA-AES67-Driver/3c4fe34ca113870091038db4a43c6390336b6376/Butler/webapp/advanced/images/ravenna.png -------------------------------------------------------------------------------- /Butler/webapp/advanced/images/ravenna_AES67.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dewiweb/ALSA-RAVENNA-AES67-Driver/3c4fe34ca113870091038db4a43c6390336b6376/Butler/webapp/advanced/images/ravenna_AES67.png -------------------------------------------------------------------------------- /Butler/webapp/advanced/images/ravenna_tm.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dewiweb/ALSA-RAVENNA-AES67-Driver/3c4fe34ca113870091038db4a43c6390336b6376/Butler/webapp/advanced/images/ravenna_tm.png -------------------------------------------------------------------------------- /Butler/webapp/advanced/images/vendor.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dewiweb/ALSA-RAVENNA-AES67-Driver/3c4fe34ca113870091038db4a43c6390336b6376/Butler/webapp/advanced/images/vendor.png -------------------------------------------------------------------------------- /Butler/webapp/advanced/images/vendor_alc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dewiweb/ALSA-RAVENNA-AES67-Driver/3c4fe34ca113870091038db4a43c6390336b6376/Butler/webapp/advanced/images/vendor_alc.png -------------------------------------------------------------------------------- /Butler/webapp/advanced/images/vendor_dot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dewiweb/ALSA-RAVENNA-AES67-Driver/3c4fe34ca113870091038db4a43c6390336b6376/Butler/webapp/advanced/images/vendor_dot.png -------------------------------------------------------------------------------- /Butler/webapp/advanced/images/vendor_dot1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dewiweb/ALSA-RAVENNA-AES67-Driver/3c4fe34ca113870091038db4a43c6390336b6376/Butler/webapp/advanced/images/vendor_dot1.png -------------------------------------------------------------------------------- /Butler/webapp/advanced/images/vendor_dsa.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dewiweb/ALSA-RAVENNA-AES67-Driver/3c4fe34ca113870091038db4a43c6390336b6376/Butler/webapp/advanced/images/vendor_dsa.png -------------------------------------------------------------------------------- /Butler/webapp/advanced/images/vendor_genelec.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dewiweb/ALSA-RAVENNA-AES67-Driver/3c4fe34ca113870091038db4a43c6390336b6376/Butler/webapp/advanced/images/vendor_genelec.png -------------------------------------------------------------------------------- /Butler/webapp/advanced/images/vendor_lawo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dewiweb/ALSA-RAVENNA-AES67-Driver/3c4fe34ca113870091038db4a43c6390336b6376/Butler/webapp/advanced/images/vendor_lawo.png -------------------------------------------------------------------------------- /Butler/webapp/advanced/images/vendor_lsb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dewiweb/ALSA-RAVENNA-AES67-Driver/3c4fe34ca113870091038db4a43c6390336b6376/Butler/webapp/advanced/images/vendor_lsb.png -------------------------------------------------------------------------------- /Butler/webapp/advanced/images/vendor_merging.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dewiweb/ALSA-RAVENNA-AES67-Driver/3c4fe34ca113870091038db4a43c6390336b6376/Butler/webapp/advanced/images/vendor_merging.png -------------------------------------------------------------------------------- /Butler/webapp/advanced/images/vendor_schoeps.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dewiweb/ALSA-RAVENNA-AES67-Driver/3c4fe34ca113870091038db4a43c6390336b6376/Butler/webapp/advanced/images/vendor_schoeps.png -------------------------------------------------------------------------------- /Butler/webapp/advanced/images/vendor_template.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dewiweb/ALSA-RAVENNA-AES67-Driver/3c4fe34ca113870091038db4a43c6390336b6376/Butler/webapp/advanced/images/vendor_template.png -------------------------------------------------------------------------------- /Butler/webapp/advanced/images/vendor_vsm.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dewiweb/ALSA-RAVENNA-AES67-Driver/3c4fe34ca113870091038db4a43c6390336b6376/Butler/webapp/advanced/images/vendor_vsm.png -------------------------------------------------------------------------------- /Butler/webapp/advanced/rickshaw/rickshaw.min.css: -------------------------------------------------------------------------------- 1 | .rickshaw_graph .detail .item.left,.rickshaw_graph .detail .x_label.left{left:0}.rickshaw_graph .detail .item.right,.rickshaw_graph .detail .x_label.right{right:0}.rickshaw_graph .detail .item,.rickshaw_graph .detail .x_label,.rickshaw_graph .x_tick .title{font-family:Arial,sans-serif;font-size:12px;white-space:nowrap}.rickshaw_graph .detail{pointer-events:none;position:absolute;top:0;z-index:2;background:rgba(0,0,0,.1);bottom:0;width:1px;transition:opacity .25s linear;-moz-transition:opacity .25s linear;-o-transition:opacity .25s linear;-webkit-transition:opacity .25s linear}.rickshaw_graph .detail.inactive{opacity:0}.rickshaw_graph .detail .item.active{opacity:1}.rickshaw_graph .detail .x_label{border-radius:3px;padding:6px;opacity:.5;border:1px solid #e0e0e0;position:absolute;background:#fff}.rickshaw_graph .detail .item{position:absolute;z-index:2;border-radius:3px;padding:.25em;opacity:0;background:rgba(0,0,0,.4);color:#fff;border:1px solid rgba(0,0,0,.4);margin-left:1em;margin-right:1em;margin-top:-1em}.rickshaw_graph .detail .item.active{background:rgba(0,0,0,.8)}.rickshaw_graph .detail .item:after{position:absolute;display:block;width:0;height:0;content:"";border:5px solid transparent}.rickshaw_graph .detail .item.left:after{top:1em;left:-5px;margin-top:-5px;border-right-color:rgba(0,0,0,.8);border-left-width:0}.rickshaw_graph .detail .item.right:after{top:1em;right:-5px;margin-top:-5px;border-left-color:rgba(0,0,0,.8);border-right-width:0}.rickshaw_graph .detail .dot{width:4px;height:4px;margin-left:-3px;margin-top:-3.5px;border-radius:5px;position:absolute;box-shadow:0 0 2px rgba(0,0,0,.6);box-sizing:content-box;-moz-box-sizing:content-box;background:#fff;border-width:2px;border-style:solid;display:none;background-clip:padding-box}.rickshaw_graph .detail .dot.active{display:block}.rickshaw_graph{position:relative}.rickshaw_graph svg{display:block;overflow:hidden}.rickshaw_graph .x_tick{position:absolute;top:0;bottom:0;width:0;border-left:1px dotted rgba(0,0,0,.2);pointer-events:none}.rickshaw_graph .x_tick .title{position:absolute;opacity:.5;margin-left:3px;bottom:1px}.rickshaw_annotation_timeline{height:1px;border-top:1px solid #e0e0e0;margin-top:10px;position:relative}.rickshaw_annotation_timeline .annotation{position:absolute;height:6px;width:6px;margin-left:-2px;top:-3px;border-radius:5px;background-color:rgba(0,0,0,.25)}.rickshaw_graph .annotation_line{position:absolute;top:0;bottom:-6px;width:0;border-left:2px solid rgba(0,0,0,.3);display:none}.rickshaw_graph .annotation_line.active{display:block}.rickshaw_graph .annotation_range{background:rgba(0,0,0,.1);display:none;position:absolute;top:0;bottom:-6px}.rickshaw_graph .annotation_range.active{display:block}.rickshaw_graph .annotation_range.active.offscreen{display:none}.rickshaw_annotation_timeline .annotation .content{background:#fff;color:#000;opacity:.9;box-shadow:0 0 2px rgba(0,0,0,.8);border-radius:3px;position:relative;z-index:20;font-size:12px;padding:6px 8px 8px;top:18px;left:-11px;width:160px;display:none;cursor:pointer}.rickshaw_annotation_timeline .annotation .content:before{content:"\25b2";position:absolute;top:-11px;color:#fff;text-shadow:0 -1px 1px rgba(0,0,0,.8)}.rickshaw_annotation_timeline .annotation.active,.rickshaw_annotation_timeline .annotation:hover{background-color:rgba(0,0,0,.8);cursor:none}.rickshaw_annotation_timeline .annotation .content:hover{z-index:50}.rickshaw_annotation_timeline .annotation.active .content{display:block}.rickshaw_annotation_timeline .annotation:hover .content{display:block;z-index:50}.rickshaw_graph .x_axis_d3,.rickshaw_graph .y_axis{fill:none}.rickshaw_graph .x_ticks_d3 .tick,.rickshaw_graph .y_ticks .tick line{stroke:rgba(0,0,0,.16);stroke-width:2px;shape-rendering:crisp-edges;pointer-events:none}.rickshaw_graph .x_grid_d3 .tick,.rickshaw_graph .y_grid .tick{z-index:-1;stroke:rgba(0,0,0,.2);stroke-width:1px;stroke-dasharray:1 1}.rickshaw_graph .y_grid .tick[data-y-value="0"]{stroke-dasharray:1 0}.rickshaw_graph .x_grid_d3 path,.rickshaw_graph .y_grid path{fill:none;stroke:none}.rickshaw_graph .x_ticks_d3 path,.rickshaw_graph .y_ticks path{fill:none;stroke:grey}.rickshaw_graph .x_ticks_d3 text,.rickshaw_graph .y_ticks text{opacity:.5;font-size:12px;pointer-events:none}.rickshaw_graph .x_tick.glow .title,.rickshaw_graph .y_ticks.glow text{fill:#000;color:#000;text-shadow:-1px 1px 0 rgba(255,255,255,.1),1px -1px 0 rgba(255,255,255,.1),1px 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1),0 -1px 0 rgba(255,255,255,.1),1px 0 0 rgba(255,255,255,.1),-1px 0 0 rgba(255,255,255,.1),-1px -1px 0 rgba(255,255,255,.1)}.rickshaw_graph .x_tick.inverse .title,.rickshaw_graph .y_ticks.inverse text{fill:#fff;color:#fff;text-shadow:-1px 1px 0 rgba(0,0,0,.8),1px -1px 0 rgba(0,0,0,.8),1px 1px 0 rgba(0,0,0,.8),0 1px 0 rgba(0,0,0,.8),0 -1px 0 rgba(0,0,0,.8),1px 0 0 rgba(0,0,0,.8),-1px 0 0 rgba(0,0,0,.8),-1px -1px 0 rgba(0,0,0,.8)}.rickshaw_legend{font-family:Arial;font-size:12px;color:#fff;background:#404040;display:inline-block;padding:12px 5px;border-radius:2px;position:relative}.rickshaw_legend:hover{z-index:10}.rickshaw_legend .swatch{width:10px;height:10px;border:1px solid rgba(0,0,0,.2)}.rickshaw_legend .line{clear:both;line-height:140%;padding-right:15px}.rickshaw_legend .line .swatch{display:inline-block;margin-right:3px;border-radius:2px}.rickshaw_legend .label{margin:0;white-space:nowrap;display:inline;font-size:inherit;background-color:transparent;color:inherit;font-weight:400;line-height:normal;padding:0;text-shadow:none}.rickshaw_legend .action:hover{opacity:.6}.rickshaw_legend .action{margin-right:.2em;opacity:.2;cursor:pointer;font-size:14px}.rickshaw_legend .line.disabled{opacity:.4}.rickshaw_legend ul{list-style-type:none;padding:0;margin:2px;cursor:pointer}.rickshaw_legend li{padding:0 0 0 2px;min-width:80px;white-space:nowrap}.rickshaw_legend li:hover{background:rgba(255,255,255,.08);border-radius:3px}.rickshaw_legend li:active{background:rgba(255,255,255,.2);border-radius:3px} -------------------------------------------------------------------------------- /Butler/webapp/advanced/rickshaw/src/css/detail.css: -------------------------------------------------------------------------------- 1 | .rickshaw_graph .detail { 2 | pointer-events: none; 3 | position: absolute; 4 | top: 0; 5 | z-index: 2; 6 | background: rgba(0, 0, 0, 0.1); 7 | bottom: 0; 8 | width: 1px; 9 | transition: opacity 0.25s linear; 10 | -moz-transition: opacity 0.25s linear; 11 | -o-transition: opacity 0.25s linear; 12 | -webkit-transition: opacity 0.25s linear; 13 | } 14 | .rickshaw_graph .detail.inactive { 15 | opacity: 0; 16 | } 17 | .rickshaw_graph .detail .item.active { 18 | opacity: 1; 19 | } 20 | .rickshaw_graph .detail .x_label { 21 | font-family: Arial, sans-serif; 22 | border-radius: 3px; 23 | padding: 6px; 24 | opacity: 0.5; 25 | border: 1px solid #e0e0e0; 26 | font-size: 12px; 27 | position: absolute; 28 | background: blue; 29 | color:White; 30 | white-space: nowrap; 31 | } 32 | .rickshaw_graph .detail .x_label.left { 33 | left: 0; 34 | } 35 | .rickshaw_graph .detail .x_label.right { 36 | right: 0; 37 | } 38 | .rickshaw_graph .detail .item { 39 | position: absolute; 40 | z-index: 2; 41 | border-radius: 3px; 42 | padding: 0.25em; 43 | font-size: 12px; 44 | font-family: Arial, sans-serif; 45 | opacity: 0; 46 | background: rgba(0, 0, 0, 0.4); 47 | color: white; 48 | border: 1px solid rgba(0, 0, 0, 0.4); 49 | margin-left: 1em; 50 | margin-right: 1em; 51 | margin-top: -1em; 52 | white-space: nowrap; 53 | } 54 | .rickshaw_graph .detail .item.left { 55 | left: 0; 56 | } 57 | .rickshaw_graph .detail .item.right { 58 | right: 0; 59 | } 60 | .rickshaw_graph .detail .item.active { 61 | opacity: 1; 62 | background: rgba(0, 0, 0, 0.8); 63 | } 64 | .rickshaw_graph .detail .item:after { 65 | position: absolute; 66 | display: block; 67 | width: 0; 68 | height: 0; 69 | 70 | content: ""; 71 | 72 | border: 5px solid transparent; 73 | } 74 | .rickshaw_graph .detail .item.left:after { 75 | top: 1em; 76 | left: -5px; 77 | margin-top: -5px; 78 | border-right-color: rgba(0, 0, 0, 0.8); 79 | border-left-width: 0; 80 | } 81 | .rickshaw_graph .detail .item.right:after { 82 | top: 1em; 83 | right: -5px; 84 | margin-top: -5px; 85 | border-left-color: rgba(0, 0, 0, 0.8); 86 | border-right-width: 0; 87 | } 88 | .rickshaw_graph .detail .dot { 89 | width: 4px; 90 | height: 4px; 91 | margin-left: -3px; 92 | margin-top: -3.5px; 93 | border-radius: 5px; 94 | position: absolute; 95 | box-shadow: 0 0 2px rgba(0, 0, 0, 0.6); 96 | box-sizing: content-box; 97 | -moz-box-sizing: content-box; 98 | background: white; 99 | border-width: 2px; 100 | border-style: solid; 101 | display: none; 102 | background-clip: padding-box; 103 | } 104 | .rickshaw_graph .detail .dot.active { 105 | display: block; 106 | } 107 | -------------------------------------------------------------------------------- /Butler/webapp/advanced/rickshaw/src/css/graph.css: -------------------------------------------------------------------------------- 1 | /* graph */ 2 | 3 | .rickshaw_graph { 4 | position: relative; 5 | } 6 | .rickshaw_graph svg { 7 | display: block; 8 | overflow: hidden; 9 | } 10 | 11 | /* ticks */ 12 | 13 | .rickshaw_graph .x_tick { 14 | position: absolute; 15 | top: 0; 16 | bottom: 0; 17 | width: 0px; 18 | border-left: 1px dotted rgba(0, 0, 0, 0.2); 19 | pointer-events: none; 20 | } 21 | .rickshaw_graph .x_tick .title { 22 | position: absolute; 23 | font-size: 12px; 24 | font-family: Arial, sans-serif; 25 | opacity: 0.5; 26 | white-space: nowrap; 27 | margin-left: 3px; 28 | bottom: 1px; 29 | } 30 | 31 | /* annotations */ 32 | 33 | .rickshaw_annotation_timeline { 34 | height: 1px; 35 | border-top: 1px solid #e0e0e0; 36 | margin-top: 10px; 37 | position: relative; 38 | } 39 | .rickshaw_annotation_timeline .annotation { 40 | position: absolute; 41 | height: 6px; 42 | width: 6px; 43 | margin-left: -2px; 44 | top: -3px; 45 | border-radius: 5px; 46 | background-color: rgba(0, 0, 0, 0.25); 47 | } 48 | .rickshaw_graph .annotation_line { 49 | position: absolute; 50 | top: 0; 51 | bottom: -6px; 52 | width: 0px; 53 | border-left: 2px solid rgba(0, 0, 0, 0.3); 54 | display: none; 55 | } 56 | .rickshaw_graph .annotation_line.active { 57 | display: block; 58 | } 59 | 60 | .rickshaw_graph .annotation_range { 61 | background: rgba(0, 0, 0, 0.1); 62 | display: none; 63 | position: absolute; 64 | top: 0; 65 | bottom: -6px; 66 | } 67 | .rickshaw_graph .annotation_range.active { 68 | display: block; 69 | } 70 | .rickshaw_graph .annotation_range.active.offscreen { 71 | display: none; 72 | } 73 | 74 | .rickshaw_annotation_timeline .annotation .content { 75 | background: white; 76 | color: black; 77 | opacity: 0.9; 78 | padding: 5px 5px; 79 | box-shadow: 0 0 2px rgba(0, 0, 0, 0.8); 80 | border-radius: 3px; 81 | position: relative; 82 | z-index: 20; 83 | font-size: 12px; 84 | padding: 6px 8px 8px; 85 | top: 18px; 86 | left: -11px; 87 | width: 160px; 88 | display: none; 89 | cursor: pointer; 90 | } 91 | .rickshaw_annotation_timeline .annotation .content:before { 92 | content: "\25b2"; 93 | position: absolute; 94 | top: -11px; 95 | color: white; 96 | text-shadow: 0 -1px 1px rgba(0, 0, 0, 0.8); 97 | } 98 | .rickshaw_annotation_timeline .annotation.active, 99 | .rickshaw_annotation_timeline .annotation:hover { 100 | background-color: rgba(0, 0, 0, 0.8); 101 | cursor: none; 102 | } 103 | .rickshaw_annotation_timeline .annotation .content:hover { 104 | z-index: 50; 105 | } 106 | .rickshaw_annotation_timeline .annotation.active .content { 107 | display: block; 108 | } 109 | .rickshaw_annotation_timeline .annotation:hover .content { 110 | display: block; 111 | z-index: 50; 112 | } 113 | .rickshaw_graph .y_axis, 114 | .rickshaw_graph .x_axis_d3 { 115 | fill: none; 116 | } 117 | .rickshaw_graph .y_ticks .tick line, 118 | .rickshaw_graph .x_ticks_d3 .tick { 119 | stroke: #dddddd; /*rgba(0, 0, 0, 0.16);*/ 120 | stroke-width: 2px; 121 | shape-rendering: crisp-edges; 122 | pointer-events: none; 123 | } 124 | .rickshaw_graph .y_grid .tick, 125 | .rickshaw_graph .x_grid_d3 .tick { 126 | z-index: -1; 127 | stroke: #dddddd; /*rgba(255, 0, 0, 0.20);*/ 128 | stroke-width: 1px; 129 | stroke-dasharray: 1 1; 130 | } 131 | .rickshaw_graph .y_grid .tick[data-y-value="0"] { 132 | stroke-dasharray: 1 0; 133 | } 134 | .rickshaw_graph .y_grid path, 135 | .rickshaw_graph .x_grid_d3 path { 136 | fill: none; 137 | stroke: none; 138 | } 139 | .rickshaw_graph .y_ticks path, 140 | .rickshaw_graph .x_ticks_d3 path { 141 | fill: none; 142 | stroke: #FFFFFF; 143 | } 144 | .rickshaw_graph .y_ticks text, 145 | .rickshaw_graph .x_ticks_d3 text 146 | { 147 | stroke:#FFFFFF; 148 | /*opacity: 0.5;*/ 149 | font-size: 12px; 150 | font-family: Arial, sans-serif; 151 | pointer-events: none; 152 | } 153 | .rickshaw_graph .x_tick.glow .title, 154 | .rickshaw_graph .y_ticks.glow text { 155 | fill: black; 156 | color: black; 157 | text-shadow: 158 | -1px 1px 0 rgba(255, 255, 255, 0.1), 159 | 1px -1px 0 rgba(255, 255, 255, 0.1), 160 | 1px 1px 0 rgba(255, 255, 255, 0.1), 161 | 0px 1px 0 rgba(255, 255, 255, 0.1), 162 | 0px -1px 0 rgba(255, 255, 255, 0.1), 163 | 1px 0px 0 rgba(255, 255, 255, 0.1), 164 | -1px 0px 0 rgba(255, 255, 255, 0.1), 165 | -1px -1px 0 rgba(255, 255, 255, 0.1); 166 | } 167 | .rickshaw_graph .x_tick.inverse .title, 168 | .rickshaw_graph .y_ticks.inverse text { 169 | fill: white; 170 | color: white; 171 | text-shadow: 172 | -1px 1px 0 rgba(0, 0, 0, 0.8), 173 | 1px -1px 0 rgba(0, 0, 0, 0.8), 174 | 1px 1px 0 rgba(0, 0, 0, 0.8), 175 | 0px 1px 0 rgba(0, 0, 0, 0.8), 176 | 0px -1px 0 rgba(0, 0, 0, 0.8), 177 | 1px 0px 0 rgba(0, 0, 0, 0.8), 178 | -1px 0px 0 rgba(0, 0, 0, 0.8), 179 | -1px -1px 0 rgba(0, 0, 0, 0.8); 180 | } 181 | -------------------------------------------------------------------------------- /Butler/webapp/advanced/rickshaw/src/css/legend.css: -------------------------------------------------------------------------------- 1 | .rickshaw_legend { 2 | font-family: Arial; 3 | font-size: 12px; 4 | color: white; 5 | background: #404040; 6 | display: inline-block; 7 | padding: 12px 5px; 8 | border-radius: 2px; 9 | position: relative; 10 | } 11 | .rickshaw_legend:hover { 12 | z-index: 10; 13 | } 14 | .rickshaw_legend .swatch { 15 | width: 10px; 16 | height: 10px; 17 | border: 1px solid rgba(0, 0, 0, 0.2); 18 | } 19 | .rickshaw_legend .line { 20 | clear: both; 21 | line-height: 140%; 22 | padding-right: 15px; 23 | } 24 | .rickshaw_legend .line .swatch { 25 | display: inline-block; 26 | margin-right: 3px; 27 | border-radius: 2px; 28 | } 29 | .rickshaw_legend .label { 30 | margin: 0; 31 | white-space: nowrap; 32 | display: inline; 33 | font-size: inherit; 34 | background-color: transparent; 35 | color: inherit; 36 | font-weight: normal; 37 | line-height: normal; 38 | padding: 0px; 39 | text-shadow: none; 40 | } 41 | .rickshaw_legend .action:hover { 42 | opacity: 0.6; 43 | } 44 | .rickshaw_legend .action { 45 | margin-right: 0.2em; 46 | font-size: 10px; 47 | opacity: 0.2; 48 | cursor: pointer; 49 | font-size: 14px; 50 | } 51 | .rickshaw_legend .line.disabled { 52 | opacity: 0.4; 53 | } 54 | .rickshaw_legend ul { 55 | list-style-type: none; 56 | margin: 0; 57 | padding: 0; 58 | margin: 2px; 59 | cursor: pointer; 60 | } 61 | .rickshaw_legend li { 62 | padding: 0 0 0 2px; 63 | min-width: 80px; 64 | white-space: nowrap; 65 | } 66 | .rickshaw_legend li:hover { 67 | background: rgba(255, 255, 255, 0.08); 68 | border-radius: 3px; 69 | } 70 | .rickshaw_legend li:active { 71 | background: rgba(255, 255, 255, 0.2); 72 | border-radius: 3px; 73 | } 74 | -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # Changelog 2 | 3 | ## v1.1.74 (28/06/2019) 4 | 5 | #### Enhancements: 6 | 7 | - [RAV-980](https://jira.merging.com/browse/RAV-980) ALSA mmap support 8 | - [RAV-988](https://jira.merging.com/browse/RAV-988) Remove the 8 channels limit of public ALSA driver when a Merging product is present 9 | - [RAV-944](https://jira.merging.com/browse/RAV-944) Webapp : check if user provides a valid IP in 10 | - [RAV-947](https://jira.merging.com/browse/RAV-947) Global safety playout delay added 11 | - [RAV-987](https://jira.merging.com/browse/RAV-987) SSM option added 12 | - [ZOEM-195](https://jira.merging.com/browse/ZOEM-195) Sources can be enabled/disabled 13 | 14 | #### Bug Fixes: 15 | 16 | - [RAV-990](https://jira.merging.com/browse/RAV-990) Advanded webpage may infinity popup new windows 17 | - [RAV-957](https://jira.merging.com/browse/RAV-957) Wrong TTL value in source's SDP 18 | - [ZOEM-185](https://jira.merging.com/browse/ZOEM-185) Session sink reports RTP status error while the audio is correct 19 | 20 | --- -------------------------------------------------------------------------------- /common/MTAL_IPC.h: -------------------------------------------------------------------------------- 1 | /**************************************************************************** 2 | * 3 | * Module Name : MT_PTPv2d_IPC.h 4 | * 5 | * Abstract : IPC for communication between Horus/zman and PTPv2d processes 6 | * 7 | * Written by : van Kempen Bertrand 8 | * Date : 22/03/2017 9 | * Modified by : 10 | * Date : 11 | * Modification : 12 | * Known problems : None 13 | * 14 | * Copyright 1993-2018 Merging Technologies S.A., All Rights Reserved - CONFIDENTIAL - 15 | ****************************************************************************/ 16 | 17 | #pragma once 18 | 19 | 20 | #ifdef __cplusplus 21 | extern "C" { 22 | #endif 23 | 24 | 25 | #include 26 | 27 | #define MTAL_IPC_PTPV2D 1 28 | 29 | ///////////////////////////////////////////////////////// 30 | // Error 31 | typedef enum 32 | { 33 | MIE_SUCCESS = 0, 34 | MIE_FAIL = -1, 35 | MIE_INVALID_ARG = -2, 36 | MIE_INVALID_BUFFER_SIZE = -3, 37 | MIE_TIMEOUT = -4, 38 | MIE_FIFO_ERROR = -5, 39 | MIE_HANDLE_INVALID = -6, 40 | MIE_NOT_IMPL = -7 41 | } EMTAL_IPC_Error; 42 | 43 | typedef int32_t(*MTAL_IPC_IOCTL_CALLBACK)(void* cb_user, uint32_t ui32MsgId, void const * pui8InBuffer, uint32_t ui32InBufferSize, void* pui8OutBuffer, uint32_t* pui32OutBufferSize); 44 | 45 | //////////////////////////////////////////////////////////////// 46 | // inputs: 47 | // ui32LocalServerPrefix: if 0 means no server capability 48 | // ui32PeerServerPrefix: if 0 means no client capability 49 | // outputs: 50 | // pptrHandle handle of the IPC which must be pass to MTAL_IPC_destroy(), MTAL_IPC_SendIOCTL() 51 | // remark: 52 | // if the same Local and Peer prefix are used by multiple process, callback works only with the latest process calling init 53 | #ifdef WIN32 54 | EMTAL_IPC_Error MTAL_IPC_init_WIN32(int8_t bHost, uint32_t ui32Prefix, MTAL_IPC_IOCTL_CALLBACK cb, void* cb_user, uintptr_t* pptrHandle); 55 | #else 56 | EMTAL_IPC_Error MTAL_IPC_init(uint32_t ui32LocalServerPrefix, uint32_t ui32PeerServerPrefix, MTAL_IPC_IOCTL_CALLBACK cb, void* cb_user, uintptr_t* pptrHandle); 57 | EMTAL_IPC_Error MTAL_IPC_init_ex(uint32_t ui32LocalServerPrefix, uint32_t ui32PeerServerPrefix, MTAL_IPC_IOCTL_CALLBACK cb, void* cb_user, char const* pcThreadName, uintptr_t* pptrHandle); 58 | EMTAL_IPC_Error MTAL_IPC_set_priority(uintptr_t ptrHandle, int policy, int priority); 59 | #endif 60 | EMTAL_IPC_Error MTAL_IPC_destroy(uintptr_t ptrHandle); 61 | // debug 62 | EMTAL_IPC_Error MTAL_IPC_set_display_elapsedtime_threshold(uintptr_t ptrHandle, uint32_t ui32threshold); // [us]. ~0 means disabled 63 | 64 | // PTPv2d only 65 | #ifdef MTAL_IPC_PTPV2D 66 | // Note: MTAL_IPC_init_PTPV2D will not create a thread; incomming pmessages are processed by calling MTAL_IPC_process_FIFO() 67 | EMTAL_IPC_Error MTAL_IPC_init_PTPV2D(uint32_t ui32LocalServerPrefix, uint32_t ui32PeerServerPrefix, MTAL_IPC_IOCTL_CALLBACK cb, void* cb_user, uintptr_t* pptrHandle); 68 | EMTAL_IPC_Error MTAL_IPC_get_FIFO_fd(uintptr_t ptrHandle, int * piFd); 69 | EMTAL_IPC_Error MTAL_IPC_process_FIFO(uintptr_t ptrHandle, void* user, int * piRet); 70 | #endif 71 | 72 | //////////////////////////////////////////////////////////////// 73 | // inputs: 74 | // .... 75 | // outputs: 76 | // pui32OutBufferSize: input; size of pui8OutBuffer buffer [byte] 77 | // pui32OutBufferSize: output; number of bytes written to pui8OutBuffer 78 | // pi32MsgErr: error return by the callback which process the message 79 | EMTAL_IPC_Error MTAL_IPC_SendIOCTL(uintptr_t ptrHandle, uint32_t ui32MsgId, void const * pui8InBuffer, uint32_t ui32InBufferSize, void* pui8OutBuffer, uint32_t* pui32OutBufferSize, int32_t *pi32MsgErr); 80 | 81 | #ifdef __cplusplus 82 | } 83 | #endif 84 | -------------------------------------------------------------------------------- /common/MT_ALSA_daemon_message_defs.h: -------------------------------------------------------------------------------- 1 | /**************************************************************************** 2 | * 3 | * Module Name : MT_ALSA_daemon_message_defs.h 4 | * Version : 0.1 5 | * 6 | * Abstract : RAVENNA/AES67 ALSA LKM 7 | * 8 | * Written by : Baume Florian 9 | * Date : 18/07/2017 10 | * Modified by : 11 | * Date : 12 | * Modification : 13 | * Known problems : None 14 | * 15 | * Copyright(C) 2017 Merging Technologies 16 | * 17 | * RAVENNA/AES67 ALSA LKM is free software; you can redistribute it and / or 18 | * modify it under the terms of the GNU General Public License 19 | * as published by the Free Software Foundation; either version 2 20 | * of the License, or (at your option) any later version. 21 | * 22 | * RAVENNA/AES67 ALSA LKM is distributed in the hope that it will be useful, 23 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 24 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.See the 25 | * GNU General Public License for more details. 26 | * 27 | * You should have received a copy of the GNU General Public License 28 | * along with RAVAENNA ALSA LKM ; if not, see . 29 | * 30 | ****************************************************************************/ 31 | 32 | #include 33 | 34 | // Communication direction: 35 | // P2D: player to daemon 36 | // D2P: daemon to player 37 | 38 | typedef enum 39 | { 40 | // DAC association 41 | MT_ALSA_d_SetTarget_NADAC = 0x00, // P2D In MT_ALSA_d_T_device_id: the device ID 42 | MT_ALSA_d_GetTarget_NADAC = 0x01, // P2D Out MT_ALSA_d_T_device_id: the device ID 43 | 44 | // DAC discovering 45 | MT_ALSA_d_On_NADAC_Added = 0x10, // D2P Out MT_ALSA_d_T_device_id. A new device ID found on the network 46 | MT_ALSA_d_On_NADAC_Removed = 0x11, // D2P Out MT_ALSA_d_T_device_id: A device ID removed from the network 47 | MT_ALSA_d_Get_NADAC_Name = 0x12, // P2D In MT_ALSA_d_T_device_id: the device ID, Out MT_ALSA_d_T_device_name: the device name 48 | 49 | // Associated (through SetTargetNADAC) DAC player source control/notication 50 | MT_ALSA_d_Set_NADAC_Source_ToPlayer = 0x20, // P2D No parameters 51 | MT_ALSA_d_On_NADAC_PlayerSource_Lost = 0x21, // D2P No parameters 52 | MT_ALSA_d_On_NADAC_PlayerSource_Selected = 0x22, // D2P No parameters 53 | 54 | // DAC display 55 | MT_ALSA_d_Display_NADAC_IconPlay = 0x30, // P2D No parameters 56 | MT_ALSA_d_Display_NADAC_IconPause = 0x31, // P2D No parameters 57 | MT_ALSA_d_Display_NADAC_IconNone = 0x32, // P2D No parameters 58 | //MT_ALSA_d_Display_NADAC_TextInfo = 0x33, // P2D In MT_ALSA_d_T_device_text: 59 | 60 | // Associated DAC sources control/notication NOT IMPLEMENTED. Will do if requested 61 | //MT_ALSA_d_Set_NADAC_Source, // P2D One input: the source ID 62 | //MT_ALSA_d_Get_NADAC_Source, // P2D One output: the source ID 63 | //MT_ALSA_d_On_NADAC_SourceChanged, // D2P the previous source ID, the new source ID 64 | //MT_ALSA_d_Get_NADAC_SourceName, // P2D One output: the source name currently listen by the NADAC 65 | 66 | // DAC Volume control NOT IMPLEMENTED. Do it through ALSA API 67 | //MT_ALSA_d_GetMainVolume, // P2D In: No param, Out: ID_INT32 volume in [cB] [0.1dB] 68 | //MT_ALSA_d_GetMainMuteStatus, // P2D In: No param, Out: ID_INT32 0=unmuted, 1=muted 69 | 70 | 71 | } MT_ALSA_d_msg_id; 72 | 73 | typedef struct 74 | { 75 | uint16_t device_id; 76 | uint16_t reserved1; 77 | uint32_t reserved2; 78 | } MT_ALSA_d_T_device_id; 79 | 80 | 81 | typedef struct 82 | { 83 | char name[64]; 84 | } MT_ALSA_d_T_device_name; 85 | 86 | typedef struct 87 | { 88 | char name[64]; 89 | uint32_t color; // RGB color 90 | } MT_ALSA_d_T_device_text; 91 | 92 | typedef enum 93 | { 94 | MT_ALSA_d_E_SUCCESSFULL = 0, 95 | MT_ALSA_d_E_INVALID_ARGUMENT = -1, 96 | MT_ALSA_d_E_NOT_FOUND = -2, 97 | MT_ALSA_d_E_NO_CONNECTION = -3, 98 | MT_ALSA_d_E_INTERNAL = -4, 99 | MT_ALSA_d_E_NOT_IMPLEMENTED = -5, 100 | 101 | } MT_ALSA_d_error_code; 102 | -------------------------------------------------------------------------------- /common/MT_ALSA_message_defs.h: -------------------------------------------------------------------------------- 1 | /**************************************************************************** 2 | * 3 | * Module Name : MT_ALSA_message_defs.h 4 | * Version : 5 | * 6 | * Abstract : RAVENNA/AES67 ALSA LKM 7 | * 8 | * Written by : Baume Florian 9 | * Date : 24/03/2016 10 | * Modified by : 11 | * Date : 12 | * Modification : 13 | * Known problems : None 14 | * 15 | * Copyright(C) 2017 Merging Technologies 16 | * 17 | * RAVENNA/AES67 ALSA LKM is free software; you can redistribute it and / or 18 | * modify it under the terms of the GNU General Public License 19 | * as published by the Free Software Foundation; either version 2 20 | * of the License, or (at your option) any later version. 21 | * 22 | * RAVENNA/AES67 ALSA LKM is distributed in the hope that it will be useful, 23 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 24 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.See the 25 | * GNU General Public License for more details. 26 | * 27 | * You should have received a copy of the GNU General Public License 28 | * along with RAVAENNA ALSA LKM ; if not, see . 29 | * 30 | ****************************************************************************/ 31 | 32 | #ifndef MT_ALSA_MESSAGE_DEFINES_INCLUDED 33 | #define MT_ALSA_MESSAGE_DEFINES_INCLUDED 34 | 35 | #define NETLINK_U2K_ID 31 36 | #define NETLINK_K2U_ID 29 37 | 38 | #define MAX_PAYLOAD 1024 39 | 40 | enum MT_ALSA_msg_id 41 | { 42 | 43 | MT_ALSA_Msg_Start, // U2K No arguments 44 | MT_ALSA_Msg_Stop, // U2K No arguments 45 | MT_ALSA_Msg_Reset, // U2K No arguments 46 | MT_ALSA_Msg_StartIO, // U2K No arguments 47 | MT_ALSA_Msg_StopIO, // U2K No arguments 48 | MT_ALSA_Msg_SetSampleRate, // U2K K2U One input: the new sample rate as a 32 bit integer 49 | MT_ALSA_Msg_GetSampleRate, // U2K One input: the new sample rate as a 32 bit integer 50 | MT_ALSA_Msg_GetAudioMode, // U2K One input: the audio mode as a 32 bit integer 51 | MT_ALSA_Msg_SetDSDAudioMode, // U2K One input: the new DSD audio mode as a 32 bit integer 52 | MT_ALSA_Msg_SetTICFrameSizeAt1FS, // U2K One input: the new 1 Fs TIC Frame size as a 64 bit integer 53 | MT_ALSA_Msg_SetMaxTICFrameSize, // U2K One input: the new Max TIC Frame size as a 64 bit integer 54 | MT_ALSA_Msg_SetNumberOfInputs, // U2K One input: the new number of inputs as a 32 bit integer 55 | MT_ALSA_Msg_SetNumberOfOutputs, // U2K One input: the new number of outputs as a 32 bit integer 56 | MT_ALSA_Msg_GetNumberOfInputs, // U2K One input: the number of inputs as a 32 bit integer 57 | MT_ALSA_Msg_GetNumberOfOutputs, 58 | MT_ALSA_Msg_SetInterfaceName, // U2K One input: Struct_SetInterfaceName 59 | MT_ALSA_Msg_Add_RTPStream, // U2K One input: RTPStreamInfo, one output: hHandle 60 | MT_ALSA_Msg_Remove_RTPStream, // U2K One input: hHandle 61 | MT_ALSA_Msg_Update_RTPStream_Name, // U2K One input: CRTP_stream_update_name 62 | MT_ALSA_Msg_GetPTPInfo, // U2K One output: TPTPInfo (obsolete) 63 | MT_ALSA_Msg_Hello, // U2K K2U No arguments 64 | MT_ALSA_Msg_Bye, // U2K K2U No arguments 65 | MT_ALSA_Msg_Ping, // U2K K2U No arguments 66 | MT_ALSA_Msg_SetMasterOutputVolume, // U2K K2U NADAC only : one input: int32_t value (-99 to 0) 67 | MT_ALSA_Msg_SetMasterOutputSwitch, // U2K K2U NADAC only : one input: int32_t value (0 or 1) 68 | MT_ALSA_Msg_GetMasterOutputVolume, // K2U NADAC only : one output: int32_t value (-99 to 0) 69 | MT_ALSA_Msg_GetMasterOutputSwitch, // K2U NADAC only : one output: int32_t value (0 or 1) 70 | MT_ALSA_Msg_SetPlayoutDelay, // U2K one input: the delay in sample as a 32 bit signed integer 71 | MT_ALSA_Msg_SetCaptureDelay, // U2K one input: the delay in sample as a 32 bit signed integer 72 | MT_ALSA_Msg_GetRTPStreamStatus, // U2K One input: hHandle, one output: the RTP stream status struct 73 | MT_ALSA_Msg_SetPTPConfig, // U2K One input: TPTPConfig 74 | MT_ALSA_Msg_GetPTPConfig, // U2K One output: TPTPConfig 75 | MT_ALSA_Msg_GetPTPStatus // U2K One output: TPTPStatus 76 | }; 77 | 78 | struct MT_ALSA_msg 79 | { 80 | enum MT_ALSA_msg_id id; 81 | int errCode; 82 | int dataSize; 83 | void* data; 84 | // data are right here when sending through netlink 85 | }; 86 | 87 | #endif // MT_ALSA_MESSAGE_DEFINES_INCLUDED 88 | -------------------------------------------------------------------------------- /common/MergingRAVENNACommon.h: -------------------------------------------------------------------------------- 1 | /**************************************************************************** 2 | * 3 | * Module Name : MergingRAVENNACommon.h 4 | * Version : 5 | * 6 | * Abstract : RAVENNA/AES67 ALSA LKM 7 | * 8 | * Written by : van Kempen Bertrand, Baume Florian, Beguec Frederic 9 | * Date : 15/03/2016 10 | * Modified by : 11 | * Date : 12 | * Modification : 13 | * Known problems : None 14 | * 15 | * Copyright(C) 2017 Merging Technologies 16 | * 17 | * RAVENNA/AES67 ALSA LKM is free software; you can redistribute it and / or 18 | * modify it under the terms of the GNU General Public License 19 | * as published by the Free Software Foundation; either version 2 20 | * of the License, or (at your option) any later version. 21 | * 22 | * RAVENNA/AES67 ALSA LKM is distributed in the hope that it will be useful, 23 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 24 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.See the 25 | * GNU General Public License for more details. 26 | * 27 | * You should have received a copy of the GNU General Public License 28 | * along with RAVAENNA ALSA LKM ; if not, see . 29 | * 30 | ****************************************************************************/ 31 | 32 | #pragma once 33 | 34 | 35 | 36 | 37 | #define CONFIGURATION_PATHNAME "/mnt/SOURCES_SSD/Sources/trunk/ALSA_configuration.cfg" 38 | //#define CONFIGURATION_PATHNAME "/media/sf_svn_trunk/ALSA_configuration.cfg" 39 | #define WEBAPP_PATH "/mnt/SOURCES_SSD/Sources/trunk/webapp" 40 | //#define WEBAPP_PATH "/media/sf_svn_trunk/webapp" 41 | #define WEBAPP_PORT "9090" 42 | #define INTERFACE_NAME "eth0" 43 | 44 | 45 | //#define MTLOOPBACK 1 46 | //#define MT_TONE_TEST 47 | //#define MT_RAMP_TEST 1 48 | 49 | //#define AUDIODATAFORMAT24BIT 1 50 | 51 | #if !defined(AUDIODATAFORMAT24BIT) && !defined(AES67_LIMITED_BUILD) 52 | #define DOP_SUPPORT 1 // only implemented in floating point mode 53 | #endif 54 | 55 | 56 | #ifdef DOP_SUPPORT 57 | #define DSD256_at_705k6 1 58 | #endif 59 | 60 | 61 | 62 | #ifdef AES67_LIMITED_BUILD 63 | #define DEFAULT_TICFRAMESIZE 48 64 | 65 | #define MAX_NUMBEROFINPUTS 64 66 | #define MAX_NUMBEROFOUTPUTS 64 67 | #else 68 | #define DEFAULT_TICFRAMESIZE 64 69 | 70 | #define MAX_NUMBEROFINPUTS 128 71 | #define MAX_NUMBEROFOUTPUTS 128 72 | #endif 73 | 74 | #define DEFAULT_NADAC_TICFRAMESIZE 512 75 | 76 | #define DEFAULT_AUTOSELECT_INTERFACE true 77 | #define DEFAULT_SAMPLERATE 44100 78 | #define DEFAULT_AUDIOMODE MergingRAVENNACommon::AM_PCM 79 | #define DEFAULT_AUDIODATAFORMAT MergingRAVENNACommon::ADF_PCM 80 | #define DEFAULT_ZONE MergingRAVENNACommon::Z_8_HP 81 | #define DEFAULT_NUMBEROFINPUTS 64 82 | #define DEFAULT_NUMBEROFOUTPUTS 64 83 | #define DEFAULT_FOLLOWDOPDETECTION true 84 | 85 | #ifdef DSD256_at_705k6 86 | #define RINGBUFFERSIZE (48 * 64 * 16) // multiple of 48 * 16 and multiple of 64 * 16 //32768. Note * 16 because up to 16FS 87 | #else 88 | #define RINGBUFFERSIZE (48 * 64 * 8) // multiple of 48 * 8 and multiple of 64 * 8 //16384. Note * 8 because up to 8FS 89 | #endif 90 | #define MAX_HORUS_SUPPORTED_FRAMESIZE_IN_SAMPLES 1024 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | #ifdef DEBUG 99 | //#define MTTRANSPARENCY_CHECK 1 100 | #ifdef MTTRANSPARENCY_CHECK 101 | #define MTTRANSPARENCY_CHECK_CHANNEL_IDX 7 102 | 103 | #define MTTRANSPARENCY_CHECK_PLUGIN 1 104 | #ifdef MTTRANSPARENCY_CHECK_PLUGIN 105 | #define MTTRANSPARENCY_CHECK_PLUGIN_CHANNEL_IDX 3 106 | #endif 107 | #endif 108 | 109 | //#define MTLOOPBACK 1 110 | #ifdef MTLOOPBACK 111 | #define MTLOOPBACK_CHANNEL_IDX 6 112 | #endif 113 | 114 | #define STATISTICS 1 115 | 116 | //#define MTAL_TIMEDOCTOR_ENABLED 1 117 | #endif 118 | 119 | 120 | //#define VOLUME_SUPPORT 1 121 | 122 | #ifdef __cplusplus 123 | #include "MTAL_stdint.h" 124 | namespace MergingRAVENNACommon 125 | { 126 | #endif // __cplusplus 127 | enum eDeviceType //: uint32_t 128 | { 129 | DT_Unknown = 0, 130 | DT_Horus = 1, 131 | DT_Hapi = 2, 132 | DT_NADAC = 3, 133 | DT_MassCore = 4, 134 | DT_CoreAudio = 5, 135 | DT_ASIO = 6, 136 | DT_Horus_Maintenance = 7, 137 | DT_Hapi_Maintenance = 8, 138 | DT_NADAC_Maintenance = 9 139 | }; 140 | 141 | enum eDeviceStatus //: uint32_t 142 | { 143 | DS_OK = 0, 144 | DS_WrongInterface = 1, 145 | DS_Unreachable = 2, 146 | DS_WrongFirmware = 3 147 | }; 148 | 149 | enum eAudioMode //: uint32_t 150 | { 151 | AM_PCM = 0, 152 | AM_DSD64 = 2, 153 | AM_DSD128 = 3, 154 | AM_DSD256 = 4 155 | }; 156 | 157 | 158 | 159 | enum eZone //: uint32_t 160 | { 161 | /*Z_2 = 0, 162 | Z_2_HP = 1,*/ 163 | Z_8 = 0, 164 | Z_8_HP = 1, 165 | 166 | /*Z_MC_2 = 4, 167 | Z_MC_2_HP = 5,*/ 168 | Z_MC_8 = 2, 169 | Z_MC_8_HP = 3, 170 | 171 | Z_NumberOfZone 172 | }; 173 | 174 | #ifdef __cplusplus 175 | 176 | uint32_t GetNumberOfSamplingRateSupported(); 177 | bool IsSamplingRateSupported(uint32_t ui32SampleRate); 178 | 179 | 180 | bool IsAudioModeSupported(eAudioMode nAudioMode); 181 | 182 | 183 | 184 | bool IsNumberOfInputsSupported(uint32_t ui32NumberOfChannels); 185 | bool IsNumberOfOutputsSupported(uint32_t ui32NumberOfChannels); 186 | } 187 | 188 | #endif // __cplusplus 189 | -------------------------------------------------------------------------------- /driver/.gitignore: -------------------------------------------------------------------------------- 1 | *.cmd 2 | *.rc 3 | *.o 4 | *.order 5 | *.mod.c 6 | *.ko 7 | *.symvers 8 | *.cbp -------------------------------------------------------------------------------- /driver/EtherTubeNetfilter.h: -------------------------------------------------------------------------------- 1 | /**************************************************************************** 2 | * 3 | * Module Name : EtherTubeNetfilter.h 4 | * Version : 5 | * 6 | * Abstract : RAVENNA/AES67 ALSA LKM 7 | * 8 | * Written by : Baume Florian 9 | * Date : 30/03/2016 10 | * Modified by : Baume Florian 11 | * Date : 13/01/2017 12 | * Modification : C port 13 | * Known problems : None 14 | * 15 | * Copyright(C) 2017 Merging Technologies 16 | * 17 | * RAVENNA/AES67 ALSA LKM is free software; you can redistribute it and / or 18 | * modify it under the terms of the GNU General Public License 19 | * as published by the Free Software Foundation; either version 2 20 | * of the License, or (at your option) any later version. 21 | * 22 | * RAVENNA/AES67 ALSA LKM is distributed in the hope that it will be useful, 23 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 24 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.See the 25 | * GNU General Public License for more details. 26 | * 27 | * You should have received a copy of the GNU General Public License 28 | * along with RAVAENNA ALSA LKM ; if not, see . 29 | * 30 | ****************************************************************************/ 31 | 32 | #ifndef ETHERTUBE_NETFILTER_H 33 | #define ETHERTUBE_NETFILTER_H 34 | 35 | #define LINUX 1 36 | 37 | #include "EtherTubeInterfaces.h" 38 | 39 | /////////////////////////// 40 | /*typedef enum 41 | { 42 | DR_PACKET_ERROR = 0, 43 | DR_PACKET_NOT_USED = 1, 44 | DR_RTP_PACKET_USED = 2, 45 | DR_PTP_PACKET_USED = 4, 46 | DR_RTP_MIDI_PACKET_USED = 8 47 | } EDispatchResult; // bits field*/ 48 | 49 | /// Put functions to be called by RTP stream to Netfilter 50 | /*struct rtp_stream_ops 51 | { 52 | int (*is_link_up)(struct TEtherTubeNetfilter *eth_filter);/// returns pointer to the playback (output) Ravenna Ring Buffer 53 | 54 | };*/ 55 | 56 | typedef struct 57 | { 58 | struct TManager* manager_ptr_; 59 | 60 | void* netfilterLock_; 61 | 62 | void* nf_hook_fct_; 63 | void* nf_hook_struct_; 64 | 65 | void* nf_tx_skb_ptr_; 66 | 67 | char ifname_used_[16]; 68 | 69 | volatile int etherTubeEnable_; 70 | volatile int started_; 71 | 72 | rtp_stream_ops m_c_callbacks_; 73 | 74 | } TEtherTubeNetfilter; 75 | 76 | 77 | #if defined(__cplusplus) 78 | extern "C" 79 | { 80 | #endif // defined(__cplusplus) f10b pourra etre retire +/*extern*/ quand le port C sera termine 81 | 82 | 83 | /*extern*/ int IsLinkUp(TEtherTubeNetfilter* self); 84 | 85 | /*extern*/ int SendRawPacket(TEtherTubeNetfilter* self, void* pBuffer, uint32_t ui32Length); 86 | 87 | /*extern*/ int GetMACAddress(TEtherTubeNetfilter* self, unsigned char *Addr, uint32_t ui32Length); 88 | /*extern*/ uint32_t GetMaxPacketSize(TEtherTubeNetfilter* self); 89 | 90 | // An acquired packet must be transmited 91 | /*extern*/ int AcquireTransmitPacket(TEtherTubeNetfilter* self, void** pHandle, void** ppvPacket, uint32_t* pPacketSize); 92 | /*extern*/ int TransmitAcquiredPacket(TEtherTubeNetfilter* self, void* pHandle, void* pPacket, uint32_t PacketSize); 93 | 94 | // PTP 95 | /*extern*/ int EnablePTPTimeStamping(TEtherTubeNetfilter* self, int bEnable, uint16_t ui16PortNumber); // enable TimeStamp at emmit and transmit PTP packet 96 | /*extern*/ int GetPTPTimeStamp(TEtherTubeNetfilter* self, uint64_t* pui64TimeStamp); 97 | 98 | /*__attribute__((deprecated))*/ //void RegisterEtherTubeAdviseSink(CEtherTubeAdviseSink* /*m_pEtherTubeAdviseSink*/) {} 99 | /*extern*/ int EnableEtherTube(TEtherTubeNetfilter* self, int bEnable); 100 | /*extern*/ int IsEtherTubeEnabled(TEtherTubeNetfilter* self); 101 | 102 | /*__attribute__((deprecated))*/ //int Init(unsigned char /*byNICNum*/) { return false; } 103 | /*extern*/ int InitEtherTube(TEtherTubeNetfilter* self, struct TManager* pManager); // new method 104 | /*extern*/ int DestroyEtherTube(TEtherTubeNetfilter* self); 105 | 106 | /*__attribute__((deprecated))*/ //int Start() { return false; } 107 | /*extern*/ int Start(TEtherTubeNetfilter* self, const char *ifname); 108 | /*extern*/ int Stop(TEtherTubeNetfilter* self); 109 | 110 | /*extern*/ int IsEtherTubeStarted(TEtherTubeNetfilter* self); 111 | 112 | /*extern*/ void netfilter_hook_fct(TEtherTubeNetfilter* self, void* nf_hook_fct, void* nf_hook_struct); 113 | /*extern*/ int rx_packet(TEtherTubeNetfilter* self, void* packet, int packet_size, const char* ifname); 114 | 115 | #if defined(__cplusplus) 116 | } 117 | #endif // defined(__cplusplus) 118 | 119 | #endif 120 | -------------------------------------------------------------------------------- /driver/MTAL.h: -------------------------------------------------------------------------------- 1 | /**************************************************************************** 2 | * 3 | * Module Name : MTAL.h 4 | * Version : 5 | * 6 | * Abstract : MT Abstraction Layer; common functionnalities between RTX, 7 | * Win32, Windows Driver, Linux Kernel 8 | * 9 | * Written by : van Kempen Bertrand 10 | * Date : 24/08/2009 11 | * Modified by : 12 | * Date : 13 | * Modification : 14 | * Known problems : None 15 | * 16 | * Copyright(C) 2017 Merging Technologies 17 | * 18 | * RAVENNA/AES67 ALSA LKM is free software; you can redistribute it and / or 19 | * modify it under the terms of the GNU General Public License 20 | * as published by the Free Software Foundation; either version 2 21 | * of the License, or (at your option) any later version. 22 | * 23 | * RAVENNA/AES67 ALSA LKM is distributed in the hope that it will be useful, 24 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 25 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.See the 26 | * GNU General Public License for more details. 27 | * 28 | * You should have received a copy of the GNU General Public License 29 | * along with RAVAENNA ALSA LKM ; if not, see . 30 | * 31 | ****************************************************************************/ 32 | 33 | #ifndef __MTAL_H__ 34 | #define __MTAL_H__ 35 | 36 | #include "MTAL_NativeHeaders.h" 37 | #include "MTAL_stdint.h" 38 | #include "MTAL_DP.h" 39 | #include "MTAL_Utilities.h" 40 | #include "MTAL_EthUtils.h" 41 | #include "MTAL_Synchronization.h" 42 | #if !defined(MTAL_KERNEL) && (defined(MTAL_MAC) || defined(MTAL_LINUX)) || defined(MTAL_WIN) 43 | #include "MTAL_List.h" // useless 44 | #include "MTAL_Memory.h" 45 | #include "MTAL_Thread.h" 46 | #endif 47 | #include "MTAL_Perfmon.h" 48 | 49 | #endif // __MTAL_H__ 50 | 51 | -------------------------------------------------------------------------------- /driver/MTAL_LKernelAPI.c: -------------------------------------------------------------------------------- 1 | /**************************************************************************** 2 | * 3 | * Module Name : MTAL_LKernelAPI.c 4 | * Version : 5 | * 6 | * Abstract : MT Abstraction Layer for Linux Kernel 7 | * 8 | * Written by : Beguec Frederic, Baume Florian 9 | * Date : 16/03/2016 10 | * Modified by : 11 | * Date : 12 | * Modification : 13 | * Known problems : None 14 | * 15 | * Copyright(C) 2017 Merging Technologies 16 | * 17 | * RAVENNA/AES67 ALSA LKM is free software; you can redistribute it and / or 18 | * modify it under the terms of the GNU General Public License 19 | * as published by the Free Software Foundation; either version 2 20 | * of the License, or (at your option) any later version. 21 | * 22 | * RAVENNA/AES67 ALSA LKM is distributed in the hope that it will be useful, 23 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 24 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.See the 25 | * GNU General Public License for more details. 26 | * 27 | * You should have received a copy of the GNU General Public License 28 | * along with RAVAENNA ALSA LKM ; if not, see . 29 | * 30 | ****************************************************************************/ 31 | 32 | #include "MTAL_LKernelAPI.h" 33 | #include 34 | #include 35 | #include 36 | #include 37 | 38 | #if LINUX_VERSION_CODE >= KERNEL_VERSION(3,19,0) 39 | #include 40 | #else 41 | #include 42 | #endif 43 | 44 | #include 45 | #include 46 | #include /*NF_IP_PRE_FIRST*/ 47 | 48 | #include 49 | #include 50 | #include 51 | 52 | #include /*in_aton()*/ 53 | 54 | #include 55 | 56 | 57 | void *my_alloc(size_t s) { 58 | //printk(KERN_INFO "my_alloc %lu\n", s); 59 | return kmalloc(s, GFP_ATOMIC/*GFP_KERNEL*/); 60 | } 61 | void my_free(void *p) 62 | { 63 | //printk(KERN_INFO "my_free\n"); 64 | return kfree(p); 65 | } 66 | 67 | void __cxa_pure_virtual(void) 68 | { 69 | printk(KERN_ERR "pure virtual call!\n"); 70 | } 71 | 72 | void *malloc (size_t __size) 73 | { 74 | //printk(KERN_INFO "malloc %lu\n", __size); 75 | return vmalloc(__size); 76 | } 77 | void *calloc (size_t __nmemb, size_t __size) 78 | { 79 | //printk(KERN_INFO "vmalloc %lu\n", __nmemb *__size); 80 | //return vzalloc(__nmemb * __size); 81 | return vmalloc(__nmemb * __size); 82 | } 83 | /*void *realloc (void *__ptr, size_t __size) 84 | { 85 | return krealloc(__ptr, __size, GFP_KERNEL); 86 | }*/ 87 | void free (void *__ptr) 88 | { 89 | //printk(KERN_INFO "free\n"); 90 | //kfree(__ptr); 91 | vfree(__ptr); 92 | } 93 | 94 | #include 95 | int MTAL_LK_print(const char *fmt, ...) 96 | { 97 | va_list args; 98 | int res = 0; 99 | va_start(args, fmt); 100 | res = vprintk(fmt, args); 101 | va_end(args); 102 | return res; 103 | } 104 | 105 | MTAL_LK_spinlock_ptr MTAL_LK_spinlock_alloc(void) 106 | { 107 | spinlock_t* psl = (spinlock_t*)kmalloc(sizeof(spinlock_t), GFP_ATOMIC/*GFP_KERNEL*/); 108 | //printk(KERN_INFO "Spinlock alloc\n"); 109 | memset(psl, 0, sizeof(spinlock_t)); 110 | return (MTAL_LK_spinlock_ptr)psl; 111 | } 112 | 113 | void MTAL_LK_spinlock_free(MTAL_LK_spinlock_ptr lock) 114 | { 115 | //printk(KERN_INFO "Spinlock free\n"); 116 | if(lock != 0) 117 | kfree((void*)lock); 118 | } 119 | 120 | void MTAL_LK_spin_lock_init(MTAL_LK_spinlock_ptr lock) 121 | { 122 | spin_lock_init((spinlock_t*)lock); 123 | } 124 | 125 | void MTAL_LK_spin_lock_irqsave(MTAL_LK_spinlock_ptr lock, unsigned long* flags) 126 | { 127 | // warning the line below is a macro and the pseudo flag parameter is assigned inside the macro 128 | spin_lock_irqsave((spinlock_t*)lock, *flags); 129 | } 130 | 131 | void MTAL_LK_spin_unlock_irqrestore(MTAL_LK_spinlock_ptr lock, unsigned long flags) 132 | { 133 | spin_unlock_irqrestore((spinlock_t*)lock, flags); 134 | } 135 | 136 | void MTAL_LK_spin_lock(MTAL_LK_spinlock_ptr lock) 137 | { 138 | spin_lock((spinlock_t*)lock); 139 | } 140 | 141 | void MTAL_LK_spin_unlock(MTAL_LK_spinlock_ptr lock) 142 | { 143 | spin_unlock((spinlock_t*)lock); 144 | } 145 | 146 | //////////////////////////////////////////////// 147 | MTAL_LK_rwlock_ptr MTAL_LK_rwlock_alloc(void) 148 | { 149 | rwlock_t* psl = (rwlock_t*)kmalloc(sizeof(rwlock_t), GFP_KERNEL); 150 | memset(psl, 0, sizeof(rwlock_t)); 151 | return (MTAL_LK_rwlock_ptr)psl; 152 | } 153 | 154 | void MTAL_LK_rwlock_free(MTAL_LK_rwlock_ptr rwlock) 155 | { 156 | if(rwlock != 0) 157 | kfree((void*)rwlock); 158 | } 159 | 160 | void MTAL_LK_rwlock_init(MTAL_LK_rwlock_ptr rwlock) 161 | { 162 | rwlock_init((rwlock_t*)rwlock); 163 | } 164 | 165 | void MTAL_LK_read_lock_irqsave(MTAL_LK_rwlock_ptr rwlock, unsigned long* flags) 166 | { 167 | read_lock_irqsave((rwlock_t*)rwlock, *flags); 168 | } 169 | 170 | void MTAL_LK_read_unlock_irqrestore(MTAL_LK_rwlock_ptr rwlock, unsigned long flags) 171 | { 172 | read_unlock_irqrestore((rwlock_t*)rwlock, flags); 173 | } 174 | 175 | void MTAL_LK_write_lock_irqsave(MTAL_LK_rwlock_ptr rwlock, unsigned long* flags) 176 | { 177 | write_lock_irqsave((rwlock_t*)rwlock, *flags); 178 | } 179 | 180 | void MTAL_LK_write_unlock_irqrestore(MTAL_LK_rwlock_ptr rwlock, unsigned long flags) 181 | { 182 | write_unlock_irqrestore((rwlock_t*)rwlock, flags); 183 | } 184 | 185 | uint64_t MTAL_LK_GetCounterTime(void) // 100 ns precision 186 | { 187 | uint64_t timeVal = 0ull; 188 | 189 | #if LINUX_VERSION_CODE >= KERNEL_VERSION(5,0,0) 190 | struct timespec64 ts64; 191 | ktime_get_real_ts64(&ts64); 192 | 193 | // #if LINUX_VERSION_CODE >= KERNEL_VERSION(4,18,0) // getrawmonotonic64 deprecated in mid-2018 194 | // struct timespec64 ts64; 195 | // ktime_get_raw_ts64(&ts64); 196 | #elif LINUX_VERSION_CODE >= KERNEL_VERSION(3,19,0) 197 | struct timespec64 ts64; 198 | getrawmonotonic64(&ts64); 199 | #else 200 | struct timespec ts64; 201 | getrawmonotonic(&ts64); 202 | #endif // LINUX_VERSION_CODE 203 | 204 | timeVal += (uint64_t)ts64.tv_sec * 10000000ull; 205 | timeVal += (uint64_t)ts64.tv_nsec / 100ull; 206 | return timeVal; 207 | } 208 | 209 | uint64_t MTAL_LK_GetCounterFreq(void) 210 | { 211 | return 1000000000ull; 212 | } 213 | 214 | uint64_t MTAL_LK_GetSystemTime(void) 215 | { 216 | uint64_t timeVal = 0ull; 217 | #if LINUX_VERSION_CODE >= KERNEL_VERSION(3,19,0) 218 | struct timespec64 ts64; 219 | getnstimeofday64(&ts64); 220 | #else 221 | struct timespec ts64; 222 | getnstimeofday(&ts64); 223 | #endif // LINUX_VERSION_CODE 224 | timeVal += (uint64_t)ts64.tv_sec * 10000000ull; 225 | timeVal += (uint64_t)ts64.tv_nsec / 100ull; 226 | return timeVal; 227 | } 228 | -------------------------------------------------------------------------------- /driver/MTAL_LKernelAPI.h: -------------------------------------------------------------------------------- 1 | /**************************************************************************** 2 | * 3 | * Module Name : MTAL_LKernelAPI.h 4 | * Version : 5 | * 6 | * Abstract : MT Abstraction Layer for Linux Kernel 7 | * 8 | * Written by : Beguec Frederic, Baume Florian 9 | * Date : 16/03/2016 10 | * Modified by : 11 | * Date : 12 | * Modification : 13 | * Known problems : None 14 | * 15 | * Copyright(C) 2017 Merging Technologies 16 | * 17 | * RAVENNA/AES67 ALSA LKM is free software; you can redistribute it and / or 18 | * modify it under the terms of the GNU General Public License 19 | * as published by the Free Software Foundation; either version 2 20 | * of the License, or (at your option) any later version. 21 | * 22 | * RAVENNA/AES67 ALSA LKM is distributed in the hope that it will be useful, 23 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 24 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.See the 25 | * GNU General Public License for more details. 26 | * 27 | * You should have received a copy of the GNU General Public License 28 | * along with RAVAENNA ALSA LKM ; if not, see . 29 | * 30 | ****************************************************************************/ 31 | 32 | #ifndef __MTAL_LKERNELAPI_H__ 33 | #define __MTAL_LKERNELAPI_H__ 34 | 35 | #include "MTAL_TargetPlatform.h" 36 | 37 | #if defined(MTAL_LINUX) && defined(MTAL_KERNEL) 38 | 39 | #if defined(__cplusplus) 40 | extern "C" 41 | { 42 | #endif // defined(__cplusplus) 43 | 44 | //typedef unsigned long long uint64_t; 45 | 46 | /*#ifndef KERN_INFO 47 | #define KERN_INFO "\001" "6" 48 | #endif // KERN_INFO*/ 49 | 50 | 51 | #include "MTAL_stdint.h" 52 | 53 | #ifndef NULL 54 | #define NULL 0UL 55 | #endif // NULL 56 | 57 | extern void *my_alloc(size_t size); 58 | extern void my_free(void *p); 59 | extern void *malloc (size_t __size); 60 | extern void *calloc (size_t __nmemb, size_t __size); 61 | //extern void *realloc (void *__ptr, size_t __size); 62 | extern void free (void *__ptr); 63 | 64 | 65 | extern int snprintf(char *buf, size_t size, const char *fmt, ...); 66 | extern int MTAL_LK_print(const char *fmt, ...); 67 | 68 | typedef void* MTAL_LK_spinlock_ptr; 69 | 70 | extern MTAL_LK_spinlock_ptr MTAL_LK_spinlock_alloc(void); 71 | extern void MTAL_LK_spinlock_free(MTAL_LK_spinlock_ptr lock); 72 | extern void MTAL_LK_spin_lock_init(MTAL_LK_spinlock_ptr lock); 73 | extern void MTAL_LK_spin_lock_irqsave(MTAL_LK_spinlock_ptr lock, unsigned long* flags); 74 | extern void MTAL_LK_spin_unlock_irqrestore(MTAL_LK_spinlock_ptr lock, unsigned long flags); 75 | extern void MTAL_LK_spin_lock(MTAL_LK_spinlock_ptr lock); 76 | extern void MTAL_LK_spin_unlock(MTAL_LK_spinlock_ptr lock); 77 | 78 | 79 | typedef void* MTAL_LK_rwlock_ptr; 80 | 81 | extern MTAL_LK_rwlock_ptr MTAL_LK_rwlock_alloc(void); 82 | extern void MTAL_LK_rwlock_free(MTAL_LK_rwlock_ptr rwlock); 83 | extern void MTAL_LK_rwlock_init(MTAL_LK_rwlock_ptr rwlock); 84 | extern void MTAL_LK_read_lock_irqsave(MTAL_LK_rwlock_ptr rwlock, unsigned long* flags); 85 | extern void MTAL_LK_read_unlock_irqrestore(MTAL_LK_rwlock_ptr rwlock, unsigned long flags); 86 | extern void MTAL_LK_write_lock_irqsave(MTAL_LK_rwlock_ptr rwlock, unsigned long* flags); 87 | extern void MTAL_LK_write_unlock_irqrestore(MTAL_LK_rwlock_ptr rwlock, unsigned long flags); 88 | 89 | extern uint64_t MTAL_LK_GetCounterTime(void); // 100 ns precision 90 | extern uint64_t MTAL_LK_GetCounterFreq(void); // not sure what's the point of that one 91 | extern uint64_t MTAL_LK_GetSystemTime(void); // 100 ns precision 92 | 93 | #if defined(__cplusplus) 94 | } 95 | #endif // defined(__cplusplus) 96 | 97 | #endif // defined(MTAL_LINUX) && defined(MTAL_KERNEL) 98 | #endif //__MTAL_LKERNELAPI_H__ 99 | -------------------------------------------------------------------------------- /driver/MTAL_TargetPlatform.h: -------------------------------------------------------------------------------- 1 | /**************************************************************************** 2 | * 3 | * Module Name : MTAL_TargetPlatform.h 4 | * Version : 5 | * 6 | * Abstract : MT Abstraction Layer; common functionnalities between RTX, 7 | * Win32, Windows Driver, Linux Kernel 8 | * 9 | * Written by : Beguec Frederic 10 | * Date : 17/02/2016 11 | * Modified by : 12 | * Date : 13 | * Modification : 14 | * Known problems : None 15 | * 16 | * Macros defines: 17 | * - One of MTAL_WINDOWS, MTAL_MAC, MTAL_LINUX, MTAL_IOS, with eventual additional MTAL_KERNEL for drivers 18 | * - Either MTAL_32BIT or MTAL_64BIT 19 | * - Either MTAL_LITTLE_ENDIAN or MTAL_BIG_ENDIAN (processor endianness) 20 | * - Either MTAL_INTEL or MTAL_PPC or MTAL_ARM (processor architecture) 21 | * - Either MTAL_GCC or MTAL_MSVC (compiler) with eventual additional MTAL_CLANG for GCC 22 | * 23 | * Copyright(C) 2017 Merging Technologies 24 | * 25 | * RAVENNA/AES67 ALSA LKM is free software; you can redistribute it and / or 26 | * modify it under the terms of the GNU General Public License 27 | * as published by the Free Software Foundation; either version 2 28 | * of the License, or (at your option) any later version. 29 | * 30 | * RAVENNA/AES67 ALSA LKM is distributed in the hope that it will be useful, 31 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 32 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.See the 33 | * GNU General Public License for more details. 34 | * 35 | * You should have received a copy of the GNU General Public License 36 | * along with RAVAENNA ALSA LKM ; if not, see . 37 | * 38 | ****************************************************************************/ 39 | 40 | #ifndef __MTAL_TARGETPLATFORM_H__ 41 | #define __MTAL_TARGETPLATFORM_H__ 42 | 43 | #if (defined (_WIN32) || defined (_WIN64) || defined (NT_DRIVER)) 44 | #define MTAL_WIN 1 45 | #if defined(NT_DRIVER) 46 | #define MTAL_KERNEL 1 47 | #endif 48 | #elif defined (MTAL_ANDROID) 49 | #undef MTAL_ANDROID 50 | #define MTAL_ANDROID 1 51 | #if defined(__KERNEL__) 52 | #define MTAL_KERNEL 1 53 | #endif 54 | #elif (defined (LINUX) || defined (__linux__)) 55 | #define MTAL_LINUX 1 56 | 57 | #if defined(__KERNEL__) 58 | #if defined(MTAL_KERNEL) 59 | #undef MTAL_KERNEL 60 | #endif // defined(MTAL_KERNEL) 61 | #define MTAL_KERNEL 1 62 | #endif 63 | #elif defined (OSX_KEXT) 64 | #define MTAL_MAC 1 65 | #define MTAL_KERNEL 1 66 | #elif defined (__APPLE_CPP__) || defined (__APPLE_CC__) || defined (OSX) 67 | //#define Point CarbonDummyPointName // (workaround to avoid definition of "Point" by old Carbon headers) 68 | //#define Component CarbonDummyCompName 69 | #include // (needed to find out what platform we're using) 70 | //#undef Point 71 | //#undef Component 72 | #if TARGET_OS_IPHONE || TARGET_IPHONE_SIMULATOR 73 | #define MTAL_IOS 1 74 | #else 75 | #define MTAL_MAC 1 76 | #endif 77 | //#define MTAL_MAC 1 78 | #endif 79 | 80 | #if defined(MTAL_WIN) 81 | #ifdef _MSC_VER 82 | #ifdef _WIN64 83 | #define MTAL_64BIT 1 84 | #else 85 | #define MTAL_32BIT 1 86 | #endif 87 | #endif 88 | 89 | #ifdef _DEBUG 90 | #define MTAL_DEBUG 1 91 | #endif 92 | 93 | /** If defined, this indicates that the processor is little-endian. */ 94 | #define MTAL_LITTLE_ENDIAN 1 95 | 96 | #define MTAL_INTEL 1 97 | #endif // MTAL_WIN 98 | 99 | /*************************************************************************************************/ 100 | #if (defined(MTAL_MAC) || defined(MTAL_IOS)) 101 | #if defined (DEBUG) || defined (_DEBUG) || ! (defined (NDEBUG) || defined (_NDEBUG)) 102 | #define MTAL_DEBUG 1 103 | #endif 104 | 105 | /* #if ! (defined (DEBUG) || defined (_DEBUG) || defined (NDEBUG) || defined (_NDEBUG)) 106 | #warning "Neither NDEBUG or DEBUG has been defined - you should set one of these to make it clear whether this is a release build," 107 | #endif*/ 108 | 109 | #ifdef __LITTLE_ENDIAN__ 110 | #define MTAL_LITTLE_ENDIAN 1 111 | #else 112 | #define MTAL_BIG_ENDIAN 1 113 | #endif 114 | 115 | #ifdef __LP64__ 116 | #define MTAL_64BIT 1 117 | #else 118 | #define MTAL_32BIT 1 119 | #endif 120 | 121 | #if defined (__ppc__) || defined (__ppc64__) 122 | #define MTAL_PPC 1 123 | #elif defined (__arm__) || defined (__arm64__) 124 | #define MTAL_ARM 1 125 | #else 126 | #define MTAL_INTEL 1 127 | #endif 128 | #endif // MTAL_MAC || MTAL_IOS 129 | 130 | #if (defined(MTAL_LINUX) || defined(MTAL_ANDROID)) 131 | #ifdef _DEBUG 132 | #define MTAL_DEBUG 1 133 | #endif 134 | 135 | // Allow override for big-endian Linux platforms 136 | #if defined (__LITTLE_ENDIAN__) || ! defined (MTAL_BIG_ENDIAN) 137 | #define MTAL_LITTLE_ENDIAN 1 138 | #undef MTAL_BIG_ENDIAN 139 | #else 140 | #undef MTAL_LITTLE_ENDIAN 141 | #define MTAL_BIG_ENDIAN 1 142 | #endif 143 | 144 | #if defined (__LP64__) || defined (_LP64) || defined (__arm64__) 145 | #define MTAL_64BIT 1 146 | #else 147 | #define MTAL_32BIT 1 148 | #endif 149 | 150 | #if defined (__arm__) || defined (__arm64__) 151 | #define MTAL_ARM 1 152 | #elif (defined (__MMX__) || defined (__SSE__) || defined (__amd64__)) 153 | #define MTAL_INTEL 1 154 | #endif 155 | #endif // MTAL_LINUX || MTAL_ANDROID 156 | 157 | #ifdef __clang__ 158 | #define MTAL_CLANG 1 159 | #define MTAL_GCC 1 160 | #elif defined (__GNUC__) 161 | #define MTAL_GCC 1 162 | #elif defined (_MSC_VER) 163 | #define MTAL_MSVC 1 164 | #else 165 | #error unknown compiler 166 | #endif 167 | 168 | #endif // __MTAL_TARGETPLATFORM_H__ 169 | -------------------------------------------------------------------------------- /driver/MTAL_stdint.h: -------------------------------------------------------------------------------- 1 | /**************************************************************************** 2 | * 3 | * Module Name : MTAL_stdint.h 4 | * Version : 5 | * 6 | * Abstract : MT Abstraction Layer; common functionnalities between RTX, 7 | * Win32, Windows Driver, Linux Kernel 8 | * 9 | * Written by : van Kempen Bertrand 10 | * Date : 19/10/2011 11 | * Modified by : Beguec Frederic, Baume Florian 12 | * Date : 13 | * Modification : 14 | * Known problems : None 15 | * 16 | * Copyright(C) 2017 Merging Technologies 17 | * 18 | * RAVENNA/AES67 ALSA LKM is free software; you can redistribute it and / or 19 | * modify it under the terms of the GNU General Public License 20 | * as published by the Free Software Foundation; either version 2 21 | * of the License, or (at your option) any later version. 22 | * 23 | * RAVENNA/AES67 ALSA LKM is distributed in the hope that it will be useful, 24 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 25 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.See the 26 | * GNU General Public License for more details. 27 | * 28 | * You should have received a copy of the GNU General Public License 29 | * along with RAVAENNA ALSA LKM ; if not, see . 30 | * 31 | ****************************************************************************/ 32 | 33 | 34 | #ifndef __MTAL_STDINT_H__ 35 | #define __MTAL_STDINT_H__ 36 | #include "MTAL_TargetPlatform.h" 37 | #ifdef MTAL_WIN 38 | #if (_MSC_VER >= 1600) && !defined(MTAL_KERNEL) // >= Visual 2010 39 | #ifdef __cplusplus 40 | #include 41 | #else // __cplusplus 42 | #include 43 | #endif // __cplusplus 44 | #else 45 | typedef unsigned char uint8_t; 46 | typedef signed char int8_t; 47 | 48 | typedef unsigned short uint16_t; 49 | typedef short int16_t; 50 | 51 | typedef unsigned int uint32_t; 52 | typedef int int32_t; 53 | 54 | typedef unsigned __int64 uint64_t; 55 | typedef __int64 int64_t; 56 | #endif // 57 | #elif defined(MTAL_LINUX) 58 | #if defined(MTAL_KERNEL) 59 | #if defined(__cplusplus) 60 | extern "C" 61 | { 62 | typedef bool _Bool; 63 | #define _LINUX_STDDEF_H 64 | } 65 | #endif // __cplusplus 66 | #include 67 | #define new NEW 68 | #include 69 | #undef new 70 | #else 71 | #include 72 | #endif 73 | #elif defined(MTAL_MAC) 74 | #include 75 | #else 76 | #error unsupported platform 77 | #endif 78 | 79 | #endif // __MTAL_STDINT_H__ 80 | -------------------------------------------------------------------------------- /driver/Makefile: -------------------------------------------------------------------------------- 1 | ##################################################################################################### 2 | # Makefile for the Linux Kernel Module for Merging Ravenna ALSA driver 3 | # This will build MergingRavennaALSA.ko 4 | ##################################################################################################### 5 | 6 | obj-m := MergingRavennaALSA.o 7 | MergingRavennaALSA-objs := c_wrapper_lib.o audio_driver.o manager.o module_main.o PTP.o module_interface.o module_netlink.o module_timer.o EtherTubeNetfilter.o RTP_streams_manager.o RTP_audio_stream.o RTP_stream.o RTP_stream_info.o MTAL_EthUtils.o MTAL_LKernelAPI.o MTConvert.o 8 | 9 | MAKE = make 10 | KSRC = /lib/modules/$(shell uname -r)/build/ 11 | SRC = $(shell pwd) 12 | 13 | modules: 14 | $(MAKE) -C $(KSRC) M=$(SRC) modules 15 | 16 | modules_install: 17 | $(MAKE) -C $(KSRC) M=$(SRC) modules_install 18 | 19 | clean: 20 | $(MAKE) -C $(KSRC) M=$(SRC) clean 21 | 22 | -------------------------------------------------------------------------------- /driver/PTP.h: -------------------------------------------------------------------------------- 1 | /**************************************************************************** 2 | * 3 | * Module Name : PTP.h 4 | * Version : 5 | * 6 | * Abstract : RAVENNA/AES67 ALSA LKM 7 | * 8 | * Written by : van Kempen Bertrand 9 | * Date : 27/07/2010 10 | * Modified by : Baume Florian 11 | * Date : 14/04/2016 12 | * Modification : Linux driver port, removed floating point, 13 | * changed time ref unit, stabiliy increased 14 | * Known problems : None 15 | * 16 | * Copyright(C) 2017 Merging Technologies 17 | * 18 | * RAVENNA/AES67 ALSA LKM is free software; you can redistribute it and / or 19 | * modify it under the terms of the GNU General Public License 20 | * as published by the Free Software Foundation; either version 2 21 | * of the License, or (at your option) any later version. 22 | * 23 | * RAVENNA/AES67 ALSA LKM is distributed in the hope that it will be useful, 24 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 25 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.See the 26 | * GNU General Public License for more details. 27 | * 28 | * You should have received a copy of the GNU General Public License 29 | * along with RAVAENNA ALSA LKM ; if not, see . 30 | * 31 | ****************************************************************************/ 32 | #pragma once 33 | 34 | #include "MTAL_stdint.h" 35 | #include "MTAL_EthUtils.h" 36 | 37 | #include "audio_streamer_clock_PTP_defs.h" 38 | #include "EtherTubeNetfilter.h" 39 | #include "PTP_defs.h" 40 | 41 | 42 | typedef struct 43 | { 44 | TEtherTubeNetfilter *m_pEtherTubeNIC; 45 | 46 | uint64_t m_ui64GlobalSAC; // this variable will not change during AudioFrameTIC() 47 | uint64_t m_ui64GlobalTime; // [100ns] this variable will not change during AudioFrameTIC() 48 | uint64_t m_ui64GlobalPerformanceCounter; // see MTAL_QueryPerformanceCounter() 49 | uint32_t m_ui32FrameSize; 50 | uint32_t m_ui32SamplingRate; 51 | volatile bool m_bAudioFrameTICTimerStarted; 52 | 53 | bool m_bInitialized; 54 | clock_ptp_ops* m_audio_streamer_clock_PTP_callback_ptr; 55 | uint64_t m_ui64TICSAC; 56 | 57 | void* m_csPTPTime; 58 | //CMTAL_CriticalSection m_csPTPTime; 59 | 60 | uint16_t m_usPTPLockCounter; // m_usPTPLockCounter == 0 means that PTP(sync + follow) are good and stable 61 | 62 | // TIC frame 63 | uint16_t m_usTICLockCounter; // m_usTICLockCounter == 0 means that TIC frame PLL reach the lock state 64 | 65 | volatile uint64_t m_ui64TIC_LastRTXClockTime; // [100us] 66 | uint64_t m_ui64TIC_LastRTXClockTimeAtT2; // [100us] 67 | 68 | volatile uint64_t m_ui64TIC_NextAbsoluteTime; // [100us] 69 | uint64_t m_dTIC_NextAbsoluteTime_frac; // [ps] 70 | 71 | uint64_t m_dTIC_BasePeriod; // [ps] 72 | volatile uint64_t m_dTIC_CurrentPeriod; // [ps] 73 | 74 | int64_t m_dTIC_IGR; // [ps] 75 | 76 | volatile int64_t m_i64TIC_PTPToRTXClockOffset; // [100us] 77 | 78 | unsigned int m_uiTIC_DropCounter; 79 | unsigned int m_uiTIC_LastDropCounter; 80 | 81 | // only for debug check 82 | uint64_t m_ui64LastTIC_Count; 83 | uint64_t m_ui64LastAbsoluteTime; 84 | uint64_t m_ui64LastCurrentRTXClockTime; 85 | 86 | // PTP Master 87 | volatile uint16_t m_usPTPMasterPortNumber; 88 | 89 | 90 | uint16_t m_wLastSyncSequenceId; 91 | uint16_t m_wLastFollowUp; 92 | 93 | 94 | uint64_t m_ui64T1; //[100us] 95 | uint64_t m_ui64T2; //[100us] 96 | uint64_t m_ui64DeltaT2; //[100us] 97 | 98 | uint16_t m_wLastDelayReqSequenceId; 99 | TPTPV2MsgDelayReqPacket m_PTPV2MsgDelayReqPacket; 100 | 101 | // PTP WatchDog 102 | uint64_t m_ui64LastWatchDogTime; 103 | uint16_t m_wLastWatchDogSyncSequenceId; 104 | 105 | uint64_t m_ui64PTP_GMID; 106 | uint8_t m_ui8PTPClockDomain; 107 | 108 | /* 109 | CMTAL_PerfMonMinMax m_pmmmPTPStatRatio; 110 | CMTAL_PerfMonMinMax m_pmmmPTPStatSyncInterval; 111 | CMTAL_PerfMonMinMax m_pmmmPTPStatFollowInterval; 112 | CMTAL_PerfMonMinMax m_pmmmPTPStatDeltaTICFrame; 113 | CMTAL_PerfMonInterval m_pmiTICInterval; 114 | */ 115 | 116 | void* m_csSAC_Time_Lock; 117 | //CMTAL_CriticalSection m_csSAC_Time_Lock; 118 | 119 | //###################################################### 120 | TPTPConfig m_PTPConfig; 121 | uint32_t m_ui32PTPConfigChangedCounter; 122 | uint32_t m_ui32LastPTPConfigChangedCounter; 123 | 124 | TV2MsgAnnounce m_PTPMaster_Announce; 125 | uint64_t m_ui64PTPMaster_AnnounceTime; 126 | 127 | uint64_t m_ui64PTPMaster_ClockIdentity; 128 | uint64_t m_ui64PTPMaster_GMID; 129 | //###################################################### 130 | 131 | } TClock_PTP; 132 | 133 | 134 | 135 | #if defined(__cplusplus) 136 | extern "C" 137 | { 138 | #endif // defined(__cplusplus) f10b pourra etre retire +extern quand le port C sera termine 139 | 140 | void get_ptp_global_times(TClock_PTP* self, uint64_t* pui64GlobalSAC, uint64_t* pui64GlobalTime, uint64_t* pui64GlobalPerformanceCounter); // get the time and the SAC atomically 141 | 142 | //static uint32_t get_FS(uint32_t ui32SamplingRate); 143 | //static uint32_t get_samplerate_base(uint32_t ui32SamplingRate); 144 | 145 | bool init_ptp(TClock_PTP* self, TEtherTubeNetfilter* pEtherTubeNIC, clock_ptp_ops* audio_streamer_clock_PTP_callback_ptr); 146 | void destroy_ptp(TClock_PTP* self); 147 | 148 | void SetPTPMasterPortNumber(TClock_PTP* self, uint16_t usPTPMasterPortNumber); 149 | 150 | EDispatchResult process_PTP_packet(TClock_PTP* self, TUDPPacketBase* pUDPPacketBase, uint32_t ui32PacketSize); 151 | 152 | bool StartAudioFrameTICTimer(TClock_PTP* self, uint32_t ui32FrameSize, uint32_t ui32SamplingRate); 153 | bool StopAudioFrameTICTimer(TClock_PTP* self); 154 | bool IsAudioFrameTICDropped(TClock_PTP* self, bool bReset); 155 | 156 | EPTPLockStatus GetLockStatus(TClock_PTP* self); 157 | 158 | void SetPTPConfig(TClock_PTP* self, TPTPConfig* pPTPConfig); 159 | void GetPTPConfig(TClock_PTP* self, TPTPConfig* pPTPConfig); 160 | 161 | void GetPTPStatus(TClock_PTP* self, TPTPStatus* pPTPStatus); 162 | //extern void GetPTPStats(TClock_PTP* self, TPTPStats* pPTPStats); 163 | //extern void GetTICStats(TClock_PTP* self, TTICStats* pTICStats); 164 | 165 | uint64_t get_ptp_global_SAC(TClock_PTP* self); 166 | uint64_t get_ptp_global_time(TClock_PTP* self); 167 | 168 | void ResetPTPLock(TClock_PTP* self, bool bUseMutex); 169 | 170 | //###################################################### 171 | void ResetPTPMaster(TClock_PTP* self); 172 | //###################################################### 173 | 174 | void ProcessT1(TClock_PTP* self, uint64_t ui64T1); // from Sync or Follow_up 175 | 176 | bool SendDelayReq(TClock_PTP* self, TPTPV2MsgFollowUpPacket* pPTPV2MsgFollowUpPacket); 177 | 178 | //CMTAL_CriticalSectionBase* get_SAC_time_lock(TClock_PTP* self); 179 | 180 | void computeNextAbsoluteTime(TClock_PTP* self, uint32_t ui32FrameCount); 181 | // Timer 182 | // Audio TIC 183 | void timerProcess(TClock_PTP* self, uint64_t* pui64NextRTXClockTime); 184 | 185 | // Helper 186 | //static uint64_t GetSeconds(uint8_t byseconds[6]); 187 | //static void SetSeconds(uint64_t ui64time, uint8_t byseconds[6]); 188 | //static void dumpptpv2msgheader(tv2msgheader* pv2msgheader); 189 | //static void dumpv2timerepresentation(tv2timerepresentation* porigintimestamp); 190 | 191 | 192 | #if defined(__cplusplus) 193 | } 194 | #endif // defined(__cplusplus) 195 | -------------------------------------------------------------------------------- /driver/RTP_audio_stream.h: -------------------------------------------------------------------------------- 1 | /**************************************************************************** 2 | * 3 | * Module Name : RTP_audio_stream.h 4 | * Version : 5 | * 6 | * Abstract : RAVENNA/AES67 ALSA LKM 7 | * 8 | * Written by : van Kempen Bertrand 9 | * Date : 25/07/2010 10 | * Modified by : Baume Florian 11 | * Date : 13/01/2017 12 | * Modification : C port (source: RTP_audio_stream.hpp) 13 | * Known problems : None 14 | * 15 | * Copyright(C) 2017 Merging Technologies 16 | * 17 | * RAVENNA/AES67 ALSA LKM is free software; you can redistribute it and / or 18 | * modify it under the terms of the GNU General Public License 19 | * as published by the Free Software Foundation; either version 2 20 | * of the License, or (at your option) any later version. 21 | * 22 | * RAVENNA/AES67 ALSA LKM is distributed in the hope that it will be useful, 23 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 24 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.See the 25 | * GNU General Public License for more details. 26 | * 27 | * You should have received a copy of the GNU General Public License 28 | * along with RAVAENNA ALSA LKM ; if not, see . 29 | * 30 | ****************************************************************************/ 31 | 32 | #pragma once 33 | 34 | #include "MTAL_EthUtils.h" 35 | //#include "MTAL_Perfmon.h" 36 | #include "MTConvert.h" 37 | #include "RTP_stream.h" 38 | 39 | #if (defined(MTAL_LINUX) && defined(MTAL_KERNEL)) 40 | #include 41 | #else 42 | #include 43 | #endif 44 | 45 | #ifdef UNDER_RTSS 46 | #include "IODevicesDefsPrivate.h" 47 | #endif //UNDER_RTSS 48 | 49 | #define DEBUG_CHECK 1 50 | 51 | // Init with memset to 0 52 | typedef struct 53 | { 54 | TRTP_stream m_tRTPStream; 55 | 56 | uint32_t m_ulLivesInDMCounter; 57 | void* m_pvLivesInCircularBuffer[MAX_CHANNELS_BY_RTP_STREAM]; 58 | void* m_pvLivesOutCircularBuffer[MAX_CHANNELS_BY_RTP_STREAM]; 59 | unsigned short m_usAudioEngineSampleWordLength; 60 | 61 | int m_bLivesInitialized; 62 | 63 | // RTP Arrival Jitter 64 | //f10bCMTAL_PerfMonInterval m_pmiRTPArrivalTime; 65 | 66 | uint32_t m_ui32SinkAheadTimeResetCounter; 67 | uint32_t m_ui32LastSinkAheadTimeResetCounter; 68 | uint32_t m_ui32MinSinkAheadTime; 69 | 70 | // Messages Counter 71 | unsigned short m_usWrongSSRCMessageCounter; 72 | 73 | // Stream status 74 | TRTP_stream_status m_StreamStatus; // protected by m_csSinkRTPStreams or m_csSourceRTPStreams spinlock 75 | uint32_t m_ui32StreamStatusResetCounter; 76 | uint32_t m_ui32StreamStatusLastResetCounter; 77 | // used for sink stream status 78 | uint32_t m_ui32WrongRTPSeqIdCounter; 79 | uint32_t m_ui32WrongRTPSeqIdLastCounter; 80 | uint32_t m_ui32WrongRTPSSRCCounter; 81 | uint32_t m_ui32WrongRTPSSRCLastCounter; 82 | uint32_t m_ui32WrongRTPPayloadTypeCounter; 83 | uint32_t m_ui32WrongRTPPayloadTypeLastCounter; 84 | uint32_t m_ui32WrongRTPSACCounter; 85 | uint32_t m_ui32WrongRTPSACLastCounter; 86 | uint32_t m_ui32RTPPacketCounter; 87 | uint32_t m_ui32RTPPacketLastCounter; 88 | 89 | MTCONVERT_MAPPED_TO_INTERLEAVE_PROTOTYPE m_pfnMTConvertMappedToInterleave; 90 | MTCONVERT_INTERLEAVE__TO_MAPPED_PROTOTYPE m_pfnMTConvertInterleaveToMapped; 91 | 92 | rtp_audio_stream_ops* m_pManager; 93 | 94 | } TRTP_audio_stream; 95 | 96 | 97 | int Create(TRTP_audio_stream* self, TRTP_stream_info* pRTP_stream_info, rtp_audio_stream_ops* pManager, TEtherTubeNetfilter* pEth_netfilter); 98 | int Destroy(TRTP_audio_stream* self); 99 | 100 | int get_RTPStream_status(TRTP_audio_stream* self, TRTP_stream_status* pstream_status); 101 | 102 | void GetStatsFromTIC(TRTPStreamStatsFromTIC* pRTPStreamStatsFromTIC); 103 | void GetStats_SinkAheadTime(TRTP_audio_stream* self, TSinkAheadTime* pSinkAheadTime); 104 | uint32_t GetStats_SinkJitter(TRTP_audio_stream* self); 105 | 106 | 107 | int ProcessRTPAudioPacket(TRTP_audio_stream* self, TRTPPacketBase* pRTPPacketBase); 108 | int SendRTPAudioPackets(TRTP_audio_stream* self); 109 | 110 | int IsLivesInMustBeMuted(TRTP_audio_stream* self); 111 | void PrepareBufferLives(TRTP_audio_stream* self); 112 | 113 | uint32_t GetNbOfLivesIn(TRTP_audio_stream* self); 114 | uint32_t GetNbOfLivesOut(TRTP_audio_stream* self); 115 | 116 | 117 | typedef struct 118 | { 119 | TRTP_audio_stream m_RTPAudioStream; 120 | volatile int m_bActive; 121 | volatile int m_nReaderCount; 122 | } TRTP_audio_stream_handler; 123 | 124 | 125 | int Init(TRTP_audio_stream_handler* self, rtp_audio_stream_ops* m_pManager, TEtherTubeNetfilter* pEth_netfilter); 126 | 127 | int IsFree(TRTP_audio_stream_handler* self); 128 | void Acquire(TRTP_audio_stream_handler* self); 129 | void Release(TRTP_audio_stream_handler* self); 130 | 131 | void ReaderEnter(TRTP_audio_stream_handler* self); 132 | void ReaderLeave(TRTP_audio_stream_handler* self); 133 | 134 | int IsActive(TRTP_audio_stream_handler* self); 135 | 136 | void Cleanup(TRTP_audio_stream_handler* self, int bCalledFromRelease); 137 | 138 | 139 | 140 | -------------------------------------------------------------------------------- /driver/RTP_stream.h: -------------------------------------------------------------------------------- 1 | /**************************************************************************** 2 | * 3 | * Module Name : RTP_stream.h 4 | * Version : 5 | * 6 | * Abstract : RAVENNA/AES67 ALSA LKM 7 | * 8 | * Written by : van Kempen Bertrand 9 | * Date : 25/07/2010 10 | * Modified by : Baume Florian 11 | * Date : 13/01/2017 12 | * Modification : C port (source: RTP_stream.hpp) 13 | * Known problems : None 14 | * 15 | * Copyright(C) 2017 Merging Technologies 16 | * 17 | * RAVENNA/AES67 ALSA LKM is free software; you can redistribute it and / or 18 | * modify it under the terms of the GNU General Public License 19 | * as published by the Free Software Foundation; either version 2 20 | * of the License, or (at your option) any later version. 21 | * 22 | * RAVENNA/AES67 ALSA LKM is distributed in the hope that it will be useful, 23 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 24 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.See the 25 | * GNU General Public License for more details. 26 | * 27 | * You should have received a copy of the GNU General Public License 28 | * along with RAVAENNA ALSA LKM ; if not, see . 29 | * 30 | ****************************************************************************/ 31 | 32 | #pragma once 33 | 34 | #include "MTAL_EthUtils.h" 35 | #include "EtherTubeNetfilter.h" 36 | #include "RTP_stream_info.h" 37 | #include "RTP_stream_defs.h" 38 | 39 | #define DEBUG_CHECK 1 40 | 41 | // Init it with memset 0 42 | typedef struct 43 | { 44 | TEtherTubeNetfilter* m_pEth_netfilter; 45 | 46 | TRTP_stream_info m_RTP_stream_info; 47 | 48 | TRTPPacketBase m_RTPPacketBaseOutgoing; 49 | TRTCPPacketBase m_RTCPPacketBase; 50 | 51 | unsigned short m_usOutgoingSeqNum; 52 | 53 | // RTCP SR (Sender report) 54 | void* m_pvRTCP_SourceDescription; 55 | uint32_t m_ulRTCP_SourceDescriptionSize; 56 | 57 | uint32_t m_ulSenderRTPTimestamp; 58 | uint32_t m_ulSenderOctetCount; 59 | uint32_t m_ulSenderPacketCount; 60 | 61 | // RTCP RR (Receiver report) 62 | 63 | uint64_t m_ui64LastAudioSampleReceivedSAC; 64 | 65 | // Debug 66 | unsigned short m_usIncomingSeqNum; 67 | uint32_t m_ui32LastRTPSAC; 68 | uint32_t m_ui32LastRTPLengthInSamples; 69 | } TRTP_stream; 70 | 71 | 72 | int rtp_stream_init(TRTP_stream* pRTP_stream, TEtherTubeNetfilter* pEth_netfilter, TRTP_stream_info* pRTP_stream_info); 73 | int rtp_stream_destroy(TRTP_stream* pRTP_stream); 74 | 75 | uint64_t rtp_stream_get_key(TRTP_stream* pRTP_stream); 76 | void rtp_stream_set_name(TRTP_stream* pRTP_stream, const char * cName); 77 | 78 | // RTCP 79 | int rtp_stream_send_RTCP_SR_Packet(TRTP_stream* pRTP_stream); 80 | int rtp_stream_send_RTCP_RR_Packet(TRTP_stream* pRTP_stream); 81 | int rtp_stream_send_RTCP_BYE_Packet(TRTP_stream* pRTP_stream); 82 | -------------------------------------------------------------------------------- /driver/RTP_stream_defs.h: -------------------------------------------------------------------------------- 1 | /**************************************************************************** 2 | * 3 | * Module Name : RTP_stream_defs.h(pp) 4 | * Version : 5 | * 6 | * Abstract : RAVENNA/AES67 7 | * 8 | * Written by : van Kempen Bertrand 9 | * Date : 25/07/2010 10 | * Modified by : 11 | * Date : 12 | * Modification : 13 | * Known problems : None 14 | * 15 | * Copyright(C) 2017 Merging Technologies 16 | * 17 | * RAVENNA/AES67 ALSA LKM is free software; you can redistribute it and / or 18 | * modify it under the terms of the GNU General Public License 19 | * as published by the Free Software Foundation; either version 2 20 | * of the License, or (at your option) any later version. 21 | * 22 | * RAVENNA/AES67 ALSA LKM is distributed in the hope that it will be useful, 23 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 24 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.See the 25 | * GNU General Public License for more details. 26 | * 27 | * You should have received a copy of the GNU General Public License 28 | * along with RAVAENNA ALSA LKM ; if not, see . 29 | * 30 | ****************************************************************************/ 31 | 32 | #pragma once 33 | 34 | /*#if defined(NT_DRIVER) || defined(OSX_KEXT) || defined(__KERNEL__) 35 | #define MAX_SOURCE_STREAMS 32 36 | #define MAX_SINK_STREAMS 32 37 | #else 38 | //#define MAX_SOURCE_STREAMS 64 39 | #define MAX_SINK_STREAMS 32 // only used by TRTPStreamStats_SinkAheadTime 40 | #endif //NT_DRIVER*/ 41 | 42 | #define MAX_SOURCE_STREAMS 64 43 | #define MAX_SINK_STREAMS 64 44 | 45 | typedef struct 46 | { 47 | bool m_bSource; 48 | union 49 | { 50 | struct 51 | { 52 | uint32_t ui32MinRTPArrivalDelta; //[us] 53 | uint32_t ui32MaxRTPArrivalDelta; //[us] 54 | } SinkStats; 55 | struct 56 | { 57 | unsigned char ucTodo; 58 | } SourceStats; 59 | } u; 60 | } TRTPStreamStats; 61 | 62 | typedef struct 63 | { 64 | uint32_t ui32MinLastProcessedRTPDeltaFromTIC; //[us] 65 | uint32_t ui32MaxLastProcessedRTPDeltaFromTIC; //[us] 66 | } TLastProcessedRTPDeltaFromTIC; 67 | 68 | typedef struct 69 | { 70 | uint32_t ui32MinLastSentRTPDeltaFromTIC; //[us] 71 | uint32_t ui32MaxLastSentRTPDeltaFromTIC; //[us] 72 | } TLastSentRTPDeltaFromTIC; 73 | 74 | typedef struct 75 | { 76 | uint32_t ui32MaxRTPArrivalDeltaFromTIC; //[us] 77 | } TRTPStreamStatsFromTIC; 78 | 79 | typedef struct 80 | { 81 | uint32_t ui32MinSinkAheadTime; // [us] 82 | } TSinkAheadTime; 83 | 84 | typedef struct 85 | { 86 | uint32_t ui32MinSinkJitter; // [us] 87 | uint32_t ui32MaxSinkJitter; // [us] 88 | } TSinksJitter; 89 | 90 | /* 91 | typedef struct 92 | { 93 | uint8_t ui8NumberOfSinks; 94 | uint32_t ui32MinSinksAheadTime; // min of all mins [us] 95 | TSinkAheadTime aMinSinkAheadTime[MAX_SINK_STREAMS]; //[us] 96 | } TSinksAheadTime; 97 | */ 98 | 99 | -------------------------------------------------------------------------------- /driver/RTP_streams_manager.h: -------------------------------------------------------------------------------- 1 | /**************************************************************************** 2 | * 3 | * Module Name : RTP_streams_manager.h 4 | * Version : 5 | * 6 | * Abstract : RAVENNA/AES67 ALSA LKM 7 | * 8 | * Written by : van Kempen Bertrand 9 | * Date : 25/07/2010 10 | * Modified by : Baume Florian 11 | * Date : 13/01/2017 12 | * Modification : C port (source: RTP_streams_manager.hpp) 13 | * Known problems : None 14 | * 15 | * Copyright(C) 2017 Merging Technologies 16 | * 17 | * RAVENNA/AES67 ALSA LKM is free software; you can redistribute it and / or 18 | * modify it under the terms of the GNU General Public License 19 | * as published by the Free Software Foundation; either version 2 20 | * of the License, or (at your option) any later version. 21 | * 22 | * RAVENNA/AES67 ALSA LKM is distributed in the hope that it will be useful, 23 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 24 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.See the 25 | * GNU General Public License for more details. 26 | * 27 | * You should have received a copy of the GNU General Public License 28 | * along with RAVAENNA ALSA LKM ; if not, see . 29 | * 30 | ****************************************************************************/ 31 | 32 | 33 | #pragma once 34 | 35 | #if defined(NT_DRIVER) || defined(OSX_KEXT) || defined(__KERNEL__) 36 | #else 37 | #if WIN32 38 | #include 39 | #elif LINUX==1 || OSX==1 40 | #include 41 | #endif 42 | #include 43 | #endif //NT_DRIVER 44 | 45 | #include "EtherTubeInterfaces.h" 46 | #include "MTAL_DP.h" 47 | #include "RTP_audio_stream.h" 48 | #include "RTP_stream_info.h" 49 | 50 | #ifdef UNDER_RTSS 51 | /////////////////////////////////////////////////////////////////////////// 52 | // CRTPStreamsOutgoingThread 53 | /////////////////////////////////////////////////////////////////////////// 54 | class CRTP_streams_manager; 55 | class CRTPStreamsOutgoingThread : public CMTAL_WorkingThread 56 | { 57 | public: 58 | CRTPStreamsOutgoingThread(CRTP_streams_manager& RTP_streams_manager); 59 | ~CRTPStreamsOutgoingThread(); 60 | 61 | int Init(); 62 | void Destroy(); 63 | 64 | HRESULT WaitOnDone(); 65 | 66 | // virtuals 67 | void ThreadEnter(); 68 | void ThreadProcess(); 69 | 70 | protected: 71 | HANDLE m_hDoneEvent; 72 | 73 | 74 | CRTP_streams_manager& m_RTP_streams_manager; 75 | }; 76 | #endif //UNDER_RTSS 77 | 78 | ////////////////////////////////////////////////////////////// 79 | typedef struct { 80 | // CRTP_audio_streams 81 | // Sources 82 | #ifdef UNDER_RTSS 83 | CRTPStreamsOutgoingThread m_RTPStreamsOutgoingThread; 84 | #endif 85 | // Sources are only used by RTXCore Process so we not have to use a multi-processor mutex (CMTAL_RTSSDLLMutex) 86 | #if defined(MTAL_LINUX) && defined(MTAL_KERNEL) 87 | void* m_csSourceRTPStreams; 88 | #else 89 | mutable CMTAL_CriticalSection m_csSourceRTPStreams; 90 | #endif 91 | 92 | volatile unsigned short m_usNumberOfRTPSourceStreams; 93 | TRTP_audio_stream_handler m_apRTPSourceStreams[MAX_SOURCE_STREAMS*2]; // double the size because remove/add all stream, we potentially need object that are being use. We then ensure that object are able to be used 94 | TRTP_audio_stream_handler* m_apRTPSourceOrderedStreams[MAX_SOURCE_STREAMS]; 95 | 96 | uint32_t m_ui32RTCPPacketCountdown; // in [audio frame] 97 | 98 | // Sinks 99 | #if defined(MTAL_LINUX) && defined(MTAL_KERNEL) 100 | void* m_csSinkRTPStreams; 101 | #else 102 | mutable CMTAL_CriticalSection m_csSinkRTPStreams; 103 | #endif 104 | 105 | unsigned short m_usNumberOfRTPSinkStreams; 106 | TRTP_audio_stream_handler m_apRTPSinkStreams[MAX_SINK_STREAMS*2]; // double the size because remove/add all stream, we potentially need object that are being use. We then ensure that object are able to be used 107 | TRTP_audio_stream_handler* m_apRTPSinkOrderedStreams[MAX_SINK_STREAMS]; 108 | 109 | 110 | //f10bCMTAL_PerfMonMinMax m_pmmmLastProcessedRTPDeltaFromTIC; 111 | //f10bCMTAL_PerfMonMinMax m_pmmmLastSentRTPDeltaFromTIC; 112 | 113 | 114 | rtp_audio_stream_ops* m_pManager; 115 | TEtherTubeNetfilter* m_pEth_netfilter; 116 | 117 | } TRTP_streams_manager; 118 | 119 | 120 | ////////////////////////////////////////////////////////////// 121 | int init_(TRTP_streams_manager* self, rtp_audio_stream_ops* pManager, TEtherTubeNetfilter* pEth_netfilter); 122 | void destroy_(TRTP_streams_manager* self); 123 | 124 | #ifdef NT_DRIVER 125 | EDispatchResult process_UDP_packet(TRTP_streams_manager* self, TUDPPacketBase* pUDPPacketBase, uint32_t packetsize, int bDispatchLevel); 126 | #else 127 | EDispatchResult process_UDP_packet(TRTP_streams_manager* self, TUDPPacketBase* pUDPPacketBase, uint32_t packetsize); 128 | #endif //NT_DRIVER 129 | 130 | int add_RTP_stream_(TRTP_streams_manager* self, TRTP_stream_info* pRTPStreamInfo, uint64_t* phRTPStream); 131 | int remove_RTP_stream_(TRTP_streams_manager* self, uint64_t hRTPStream); 132 | void remove_all_RTP_streams(TRTP_streams_manager* self); 133 | int update_RTP_stream_name(TRTP_streams_manager* self, const TRTP_stream_update_name* pRTP_stream_update_name); 134 | int get_RTPStream_status_(TRTP_streams_manager* self, uint64_t hRTPStream, TRTP_stream_status* pstream_status); 135 | 136 | uint8_t GetNumberOfSources(TRTP_streams_manager* self); 137 | uint8_t GetNumberOfSinks(TRTP_streams_manager* self); 138 | 139 | //int GetSinkStats(uint8_t ui8StreamIdx, TRTPStreamStats* pRTPStreamStats); 140 | int GetSinkStatsFromTIC(TRTP_streams_manager* self, uint8_t ui8StreamIdx, TRTPStreamStatsFromTIC* pRTPStreamStatsFromTIC); 141 | int GetMinSinkAheadTime(TRTP_streams_manager* self, TSinkAheadTime* pSinkAheadTime); 142 | int GetMinMaxSinksJitter(TRTP_streams_manager* self, TSinksJitter* pSinksJitter); 143 | 144 | //f10bint GetLastProcessedSinkFromTIC(TRTP_streams_manager* self, TLastProcessedRTPDeltaFromTIC* pLastProcessedRTPDeltaFromTIC); 145 | //f10bint GetLastSentSourceFromTIC(TRTP_streams_manager* self, TLastSentRTPDeltaFromTIC* pLastSentRTPDeltaFromTIC); 146 | 147 | // Process 148 | // following methods must be call by the AudioEngine thread 149 | void prepare_buffer_lives(TRTP_streams_manager* self); 150 | void frame_process_begin(TRTP_streams_manager* self); 151 | void frame_process_end(TRTP_streams_manager* self); 152 | #ifdef UNDER_RTSS 153 | friend class CRTPStreamsOutgoingThread; 154 | #endif 155 | void send_outgoing_packets(TRTP_streams_manager* self); 156 | 157 | 158 | 159 | 160 | #ifdef UNDER_RTSS 161 | public: 162 | HRESULT GetLiveInInfo(TRTP_streams_manager* self, DWORD dwIndexAt1FS, TRTXLiveInfo* pRTXLiveInfo) const; 163 | HRESULT GetLiveOutInfo(TRTP_streams_manager* self, DWORD dwIndexAt1FS, TRTXLiveInfo* pRTXLiveInfo) const; 164 | #endif //UNDER_RTSS 165 | 166 | 167 | -------------------------------------------------------------------------------- /driver/audio_driver.h: -------------------------------------------------------------------------------- 1 | /**************************************************************************** 2 | * 3 | * Module Name : audio_driver.h 4 | * Version : 5 | * 6 | * Abstract : RAVENNA/AES67 ALSA LKM 7 | * 8 | * Written by : Beguec Frederic 9 | * Date : 27/04/2016 10 | * Modified by : 11 | * Date : 12 | * Modification : 13 | * Known problems : None 14 | * 15 | * Copyright(C) 2017 Merging Technologies 16 | * 17 | * RAVENNA/AES67 ALSA LKM is free software; you can redistribute it and / or 18 | * modify it under the terms of the GNU General Public License 19 | * as published by the Free Software Foundation; either version 2 20 | * of the License, or (at your option) any later version. 21 | * 22 | * RAVENNA/AES67 ALSA LKM is distributed in the hope that it will be useful, 23 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 24 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.See the 25 | * GNU General Public License for more details. 26 | * 27 | * You should have received a copy of the GNU General Public License 28 | * along with RAVAENNA ALSA LKM ; if not, see . 29 | * 30 | ****************************************************************************/ 31 | 32 | #if !defined(__audio_driver_h__) 33 | #define __audio_driver_h__ 34 | 35 | #include 36 | 37 | #if defined(__cplusplus) 38 | extern "C" 39 | { 40 | #endif // defined(__cplusplus) 41 | 42 | /// Put functions to be called by Manager to ALSA driver 43 | struct ravenna_mgr_ops 44 | { 45 | void* (*get_playback_buffer)(void *mr_alsa_audio_chip);/// returns pointer to the playback (output) Ravenna Ring Buffer 46 | uint32_t (*get_playback_buffer_size_in_frames)(void *mr_alsa_audio_chip); /// returns the size of the playback (output) Ravenna Ring Buffer in samples (channel independent) 47 | void* (*get_capture_buffer)(void *mr_alsa_audio_chip); /// returns pointer to the capture (input) Ravenna Ring Buffer 48 | uint32_t (*get_capture_buffer_size_in_frames)(void *mr_alsa_audio_chip);/// returns the size of the capture (input) Ravenna Ring Buffer in samples (channel independent) 49 | void (*lock_playback_buffer)(void *mr_alsa_audio_chip, unsigned long *flags); 50 | void (*unlock_playback_buffer)(void *mr_alsa_audio_chip, unsigned long *flags); 51 | void (*lock_capture_buffer)(void *mr_alsa_audio_chip, unsigned long *flags); 52 | void (*unlock_capture_buffer)(void *mr_alsa_audio_chip, unsigned long *flags); 53 | int (*pcm_interrupt)(void *mr_alsa_audio_chip, int direction);/// direction: 0 for playback, 1 for capture. One interrupt per Ravenna TIC 54 | //uint32_t (*get_capture_buffer_offset)(void *mr_alsa_audio_chip);/// returns current offset in samples (channel independent) for Ravenna Ring Buffer 55 | uint32_t (*get_playback_buffer_offset)(void *mr_alsa_audio_chip);/// returns current offset (channel independent) in samples for Ravenna Ring Buffer 56 | int (*notify_master_volume_change)(void* mr_alsa_audio_chip, int direction, int32_t value); /// direction: 0 for playback, 1 for capture. value: from -99 to 0 57 | int (*notify_master_switch_change)(void* mr_alsa_audio_chip, int direction, int32_t value); /// direction: 0 for playback, 1 for capture. value: 0 for mute, 1 for enable 58 | }; 59 | 60 | /// Put functions to be called by ALSA driver (C ALSA to CPP Ravenna wrapper/owner object) 61 | struct alsa_ops 62 | { 63 | int (*register_alsa_driver)(void* ravenna_peer, const struct ravenna_mgr_ops *ops, void *alsa_chip_pointer);/// to be called at driver init to allow communication between driver and Ravenna context 64 | int (*get_input_jitter_buffer_offset)(void* ravenna_peer, uint32_t *offset); 65 | int (*get_output_jitter_buffer_offset)(void* ravenna_peer, uint32_t *offset); 66 | int (*get_min_interrupts_frame_size)(void* ravenna_peer, uint32_t *framesize); /// returns min Ravenna Frame Size in samples (channel independent) 67 | int (*get_max_interrupts_frame_size)(void* ravenna_peer, uint32_t *framesize); /// returns max Ravenna Frame Size (hardware dependent) in samples (channel independent) 68 | int (*get_interrupts_frame_size)(void* ravenna_peer, uint32_t *framesize); /// returns current Ravenna Frame Size in samples (channel independent) 69 | int (*set_sample_rate)(void* ravenna_peer, uint32_t rate); /// rate: use PCM rates values or raw DSD sample rates values. stop_interrupts() should be called prior sample rate changes. 70 | /// this function is not atomic and caller must be schedulable 71 | int (*get_sample_rate)(void* ravenna_peer, uint32_t *rate); /// returns current Ravenna sample rate (actual PCM rate or actual DSD rate) 72 | int (*get_jitter_buffer_sample_bytelength)(void* ravenna_peer, char *byte_len); /// returns current Ravenna sample rate (actual PCM rate or actual DSD rate) 73 | int (*get_nb_inputs)(void* ravenna_peer, uint32_t *nb_channels); 74 | int (*get_nb_outputs)(void* ravenna_peer, uint32_t *nb_channels); 75 | int (*get_playout_delay)(void* ravenna_peer, snd_pcm_sframes_t *delay_in_sample); 76 | int (*get_capture_delay)(void* ravenna_peer, snd_pcm_sframes_t *delay_in_sample); 77 | int (*start_interrupts)(void* ravenna_peer); /// starts IO 78 | int (*stop_interrupts)(void* ravenna_peer); /// stops IO 79 | 80 | int (*notify_master_volume_change)(void* ravenna_peer, int direction, int32_t value); /// direction: 0 for playback, 1 for capture. value: from -99 to 0 81 | int (*notify_master_switch_change)(void* ravenna_peer, int direction, int32_t value); /// direction: 0 for playback, 1 for capture. value: 0 for mute, 1 for enable 82 | int (*get_master_volume_value)(void* ravenna_peer, int direction, int32_t* value); /// direction: 0 for playback, 1 for capture. value: from -99 to 0 83 | int (*get_master_switch_value)(void* ravenna_peer, int direction, int32_t* value); /// direction: 0 for playback, 1 for capture. value: 0 for mute, 1 84 | }; 85 | 86 | /// Put ALSA driver functions which needs to be used by CPP code here: 87 | extern int mr_alsa_audio_card_init(void* ravennaPeer, struct alsa_ops *callbacks); 88 | extern void mr_alsa_audio_card_exit(void); 89 | 90 | #if defined(__cplusplus) 91 | } 92 | #endif // defined(__cplusplus) 93 | 94 | #endif // __audio_driver_h__ 95 | -------------------------------------------------------------------------------- /driver/audio_streamer_clock_PTP_defs.h: -------------------------------------------------------------------------------- 1 | /**************************************************************************** 2 | * 3 | * Module Name : audio_streamer_clock_PTP_defs.h 4 | * Version : 5 | * 6 | * Abstract : RAVENNA/AES67 7 | * 8 | * Written by : van Kempen Bertrand 9 | * Date : 27/07/2010 10 | * Modified by : 11 | * Date : 12 | * Modification : 13 | * Known problems : None 14 | * 15 | * Copyright(C) 2017 Merging Technologies 16 | * 17 | * RAVENNA/AES67 ALSA LKM is free software; you can redistribute it and / or 18 | * modify it under the terms of the GNU General Public License 19 | * as published by the Free Software Foundation; either version 2 20 | * of the License, or (at your option) any later version. 21 | * 22 | * RAVENNA/AES67 ALSA LKM is distributed in the hope that it will be useful, 23 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 24 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.See the 25 | * GNU General Public License for more details. 26 | * 27 | * You should have received a copy of the GNU General Public License 28 | * along with RAVAENNA ALSA LKM ; if not, see . 29 | * 30 | ****************************************************************************/ 31 | 32 | #pragma once 33 | 34 | #pragma pack(push, 1) 35 | /////////////////////////// 36 | typedef enum 37 | { 38 | PTPLS_UNLOCKED = 0, 39 | PTPLS_LOCKING = 1, 40 | PTPLS_LOCKED = 2 41 | } EPTPLockStatus; 42 | 43 | typedef struct 44 | { 45 | uint8_t ui8Domain; 46 | uint8_t ui8DSCP; 47 | } TPTPConfig; 48 | 49 | typedef struct 50 | { 51 | EPTPLockStatus nPTPLockStatus; 52 | uint64_t ui64GMID; 53 | int32_t i32Jitter; 54 | } TPTPStatus; 55 | 56 | typedef struct 57 | { 58 | float fPTPSyncRatio; 59 | 60 | uint32_t ui32PTPSyncMinArrivalDelta; 61 | uint32_t ui32PTPSyncAvgArrivalDelta; 62 | uint32_t ui32PTPSyncMaxArrivalDelta; 63 | 64 | uint32_t ui32PTPFollowMinArrivalDelta; 65 | uint32_t ui32PTPFollowAvgArrivalDelta; 66 | uint32_t ui32PTPFollowMaxArrivalDelta; 67 | 68 | int32_t i32PTPMinDeltaTICFrame; 69 | int32_t i32PTPAvgDeltaTICFrame; 70 | int32_t i32PTPMaxDeltaTICFrame; 71 | } TPTPStats; 72 | 73 | typedef struct 74 | { 75 | uint32_t ui32TICMinDelta; 76 | uint32_t ui32TICMaxDelta; 77 | } TTICStats; 78 | 79 | #define NB_TIMER_LATENCY_RANGES 10 80 | typedef struct 81 | { 82 | uint8_t ui8NumberOfTimerLatencies; 83 | uint32_t aui32TimerLatencyRanges[NB_TIMER_LATENCY_RANGES]; // ]n-1.n] in [us] 84 | uint64_t aui64TimerLatencyOccurences[NB_TIMER_LATENCY_RANGES]; 85 | } TTICOSStats; 86 | 87 | 88 | 89 | /////////////////////////// 90 | typedef enum 91 | { 92 | PTPTCFT_FILM_2398 = 1, 93 | PTPTCFT_FILM = 2, 94 | PTPTCFT_PAL = 3, 95 | PTPTCFT_NTSC_NODROP = 4, 96 | PTPTCFT_NTSC_DROP = 5, 97 | PTPTCFT_SMPTE_NODROP = 6, 98 | PTPTCFT_SMPTE_DROP = 7 99 | } EPTPTimeCodeFrameType; 100 | 101 | #pragma pack(pop) -------------------------------------------------------------------------------- /driver/c_wrapper_lib.c: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dewiweb/ALSA-RAVENNA-AES67-Driver/3c4fe34ca113870091038db4a43c6390336b6376/driver/c_wrapper_lib.c -------------------------------------------------------------------------------- /driver/c_wrapper_lib.h: -------------------------------------------------------------------------------- 1 | /**************************************************************************** 2 | * 3 | * Module Name : c_wrapper_lib.h 4 | * Version : 5 | * 6 | * Abstract : RAVENNA/AES67 ALSA LKM 7 | * 8 | * Written by : Baume Florian 9 | * Date : 31/03/2016 10 | * Modified by : 11 | * Date : 12 | * Modification : 13 | * Known problems : None 14 | * 15 | * Copyright(C) 2017 Merging Technologies 16 | * 17 | * RAVENNA/AES67 ALSA LKM is free software; you can redistribute it and / or 18 | * modify it under the terms of the GNU General Public License 19 | * as published by the Free Software Foundation; either version 2 20 | * of the License, or (at your option) any later version. 21 | * 22 | * RAVENNA/AES67 ALSA LKM is distributed in the hope that it will be useful, 23 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 24 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.See the 25 | * GNU General Public License for more details. 26 | * 27 | * You should have received a copy of the GNU General Public License 28 | * along with RAVAENNA ALSA LKM ; if not, see . 29 | * 30 | ****************************************************************************/ 31 | 32 | #ifndef __C_WRAPPER_LIB_H__ 33 | #define __C_WRAPPER_LIB_H__ 34 | 35 | #include "MTAL_stdint.h" 36 | 37 | #if defined(__cplusplus) 38 | extern "C" 39 | { 40 | #endif // defined(__cplusplus) 41 | 42 | extern int CW_netfilter_register_hook(void* hook_func, void* hook_struct); 43 | extern int CW_netfilter_unregister_hook(void* hook_struct); 44 | 45 | extern int CW_get_mac_addr_of(unsigned char *addr, const char* iface); 46 | 47 | extern int CW_get_new_skb(void** skb, unsigned int data_len); 48 | extern int CW_free_skb(void* skb); 49 | extern int CW_get_skb_data(void** data, void* skb, unsigned int data_len); 50 | extern int CW_socket_tx_packet(void* skb, unsigned int data_len, const char* iface); 51 | 52 | extern int CW_socket_tx_buffer(void* user_data, unsigned int data_len, const char* iface); 53 | 54 | extern int CW_netlink_send_reply_to_user_land(void* msg); 55 | extern int CW_netlink_send_msg_to_user_land(void* tx_msg, void* rx_msg); 56 | 57 | extern void CW_msleep(unsigned int msecs); 58 | extern unsigned long CW_msleep_interruptible(unsigned int msecs); 59 | 60 | extern uint64_t CW_ll_modulo(uint64_t dividend, uint64_t divisor); 61 | 62 | #if defined(__cplusplus) 63 | } 64 | #endif // defined(__cplusplus) 65 | 66 | #endif //__C_WRAPPER_LIB_H__ 67 | -------------------------------------------------------------------------------- /driver/manager_defs.h: -------------------------------------------------------------------------------- 1 | /**************************************************************************** 2 | * 3 | * Module Name : manager_defs.h 4 | * Version : 5 | * 6 | * Abstract : RAVENNA/AES67 ALSA LKM 7 | * 8 | * Written by : van Kempen Bertrand 9 | * Date : 25/11/2013 10 | * Modified by : 11 | * Date : 12 | * Modification : 13 | * Known problems : None 14 | * 15 | * Copyright(C) 2017 Merging Technologies 16 | * 17 | * RAVENNA/AES67 ALSA LKM is free software; you can redistribute it and / or 18 | * modify it under the terms of the GNU General Public License 19 | * as published by the Free Software Foundation; either version 2 20 | * of the License, or (at your option) any later version. 21 | * 22 | * RAVENNA/AES67 ALSA LKM is distributed in the hope that it will be useful, 23 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 24 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.See the 25 | * GNU General Public License for more details. 26 | * 27 | * You should have received a copy of the GNU General Public License 28 | * along with RAVAENNA ALSA LKM ; if not, see . 29 | * 30 | ****************************************************************************/ 31 | 32 | #pragma once 33 | 34 | typedef struct 35 | { 36 | int32_t i32MinHALToTICDelta; 37 | int32_t i32MaxHALToTICDelta; 38 | } THALToTICDelta; -------------------------------------------------------------------------------- /driver/module_main.c: -------------------------------------------------------------------------------- 1 | /**************************************************************************** 2 | * 3 | * Module Name : module_main.c 4 | * Version : 5 | * 6 | * Abstract : RAVENNA/AES67 ALSA LKM 7 | * 8 | * Written by : Baume Florian 9 | * Date : 21/03/2016 10 | * Modified by : 11 | * Date : 12 | * Modification : 13 | * Known problems : None 14 | * 15 | * Copyright(C) 2017 Merging Technologies 16 | * 17 | * RAVENNA/AES67 ALSA LKM is free software; you can redistribute it and / or 18 | * modify it under the terms of the GNU General Public License 19 | * as published by the Free Software Foundation; either version 2 20 | * of the License, or (at your option) any later version. 21 | * 22 | * RAVENNA/AES67 ALSA LKM is distributed in the hope that it will be useful, 23 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 24 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.See the 25 | * GNU General Public License for more details. 26 | * 27 | * You should have received a copy of the GNU General Public License 28 | * along with RAVAENNA ALSA LKM ; if not, see . 29 | * 30 | ****************************************************************************/ 31 | 32 | #ifndef __KERNEL__ 33 | #define __KERNEL__ 34 | #endif // __KERNEL__ 35 | #ifndef __linux__ 36 | #define __linux__ 37 | #endif // __linux__ 38 | #ifndef MODULE 39 | #define MODULE 40 | #endif // MODULE 41 | 42 | #include 43 | #include 44 | 45 | #include "MTAL_stdint.h" 46 | #include "MTAL_LKernelAPI.h" 47 | 48 | #include "module_main.h" 49 | 50 | 51 | #include "MTAL_TargetPlatform.h" 52 | #ifndef MTAL_KERNEL 53 | #error MTAL_KERNEL not defined 54 | #endif // MTAL_KERNEL 55 | #if !defined(__KERNEL__) 56 | #error __KERNEL__ not defined 57 | #endif // defined 58 | #if (!defined(LINUX) && !defined (__linux__)) 59 | #error linux or __linux__ should be defined 60 | #endif 61 | 62 | #include "audio_driver.h" 63 | #include "manager.h" 64 | 65 | #include "PTP.h" 66 | 67 | #include "../common/MT_ALSA_message_defs.h" 68 | 69 | struct TManager man; 70 | 71 | int init_driver(void) 72 | { 73 | 74 | int errorCode = 0; 75 | if (init(&man, &errorCode)) 76 | { 77 | MTAL_DP_INFO("init_driver: succeeded\n"); 78 | return 0; 79 | } 80 | else 81 | { 82 | MTAL_DP_CRIT("init_driver: manager::init() failed\n"); 83 | //destroy_driver(); 84 | return errorCode; 85 | } 86 | 87 | return -1; 88 | } 89 | 90 | void destroy_driver(void) 91 | { 92 | destroy(&man); 93 | } 94 | 95 | void nl_rx_msg(void* rx_msg) 96 | { 97 | OnNewMessage(&man, (struct MT_ALSA_msg*)rx_msg); 98 | } 99 | 100 | int nf_rx_packet(void* packet, int packet_size, const char* ifname) 101 | { 102 | return EtherTubeRxPacket(&man, packet, packet_size, ifname); 103 | } 104 | 105 | void nf_hook_fct(void* hook_fct, void* hook_struct) 106 | { 107 | EtherTubeHookFct(&man, hook_fct, hook_struct); 108 | } 109 | 110 | void t_clock_timer(void* time) 111 | { 112 | uint64_t ui64CurrentRTXClockTime = 0; 113 | timerProcess(GetPTP(&man), &ui64CurrentRTXClockTime); 114 | *(uint64_t*)time = ui64CurrentRTXClockTime; 115 | } -------------------------------------------------------------------------------- /driver/module_main.h: -------------------------------------------------------------------------------- 1 | /**************************************************************************** 2 | * 3 | * Module Name : module_main.h 4 | * Version : 5 | * 6 | * Abstract : RAVENNA/AES67 ALSA LKM 7 | * 8 | * Written by : Baume Florian 9 | * Date : 21/03/2016 10 | * Modified by : 11 | * Date : 12 | * Modification : 13 | * Known problems : None 14 | * 15 | * Copyright(C) 2017 Merging Technologies 16 | * 17 | * RAVENNA/AES67 ALSA LKM is free software; you can redistribute it and / or 18 | * modify it under the terms of the GNU General Public License 19 | * as published by the Free Software Foundation; either version 2 20 | * of the License, or (at your option) any later version. 21 | * 22 | * RAVENNA/AES67 ALSA LKM is distributed in the hope that it will be useful, 23 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 24 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.See the 25 | * GNU General Public License for more details. 26 | * 27 | * You should have received a copy of the GNU General Public License 28 | * along with RAVAENNA ALSA LKM ; if not, see . 29 | * 30 | ****************************************************************************/ 31 | 32 | // cppmod.h, exported C interface from C++ code 33 | 34 | #ifndef CPP_MOD_H 35 | #define CPP_MOD_H 36 | 37 | #include "manager.h" 38 | 39 | #ifdef __cplusplus 40 | extern "C" { 41 | #endif 42 | //extern int start_driver(void* data); 43 | //extern void stop_driver(void); 44 | 45 | extern int init_driver(void); 46 | extern void destroy_driver(void); 47 | 48 | extern void nl_rx_msg(void* rx_msg); 49 | 50 | extern void nf_start(void); 51 | extern void nf_stop(void); 52 | 53 | extern int nf_rx_packet(void* packet, int packet_size, const char* ifname); 54 | extern void nf_hook_fct(void* hook_fct, void* hook_struct); 55 | 56 | extern void t_clock_timer(void* time); 57 | #ifdef __cplusplus 58 | } 59 | #endif 60 | #endif 61 | -------------------------------------------------------------------------------- /driver/module_netlink.h: -------------------------------------------------------------------------------- 1 | /**************************************************************************** 2 | * 3 | * Module Name : module_netlink.h 4 | * Version : 5 | * 6 | * Abstract : RAVENNA/AES67 ALSA LKM 7 | * 8 | * Written by : Baume Florian 9 | * Date : 11/04/2016 10 | * Modified by : 11 | * Date : 12 | * Modification : 13 | * Known problems : None 14 | * 15 | * Copyright(C) 2017 Merging Technologies 16 | * 17 | * RAVENNA/AES67 ALSA LKM is free software; you can redistribute it and / or 18 | * modify it under the terms of the GNU General Public License 19 | * as published by the Free Software Foundation; either version 2 20 | * of the License, or (at your option) any later version. 21 | * 22 | * RAVENNA/AES67 ALSA LKM is distributed in the hope that it will be useful, 23 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 24 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.See the 25 | * GNU General Public License for more details. 26 | * 27 | * You should have received a copy of the GNU General Public License 28 | * along with RAVAENNA ALSA LKM ; if not, see . 29 | * 30 | ****************************************************************************/ 31 | 32 | #ifndef MODULE_NETLINK_H_INCLUDED 33 | #define MODULE_NETLINK_H_INCLUDED 34 | 35 | #include 36 | 37 | #include "../common/MT_ALSA_message_defs.h" 38 | 39 | void recv_msg_from_user_land(struct sk_buff *skb); 40 | int send_reply_to_user_land(struct MT_ALSA_msg* msg); 41 | 42 | void recv_reply_from_user_land(struct sk_buff *skb); 43 | int send_msg_to_user_land(struct MT_ALSA_msg* tx_msg, struct MT_ALSA_msg* rx_msg); 44 | 45 | void my_timer_callback(unsigned long data); 46 | 47 | int setup_netlink(void); 48 | void cleanup_netlink(void); 49 | 50 | #endif // MODULE_NETLINK_H_INCLUDED 51 | -------------------------------------------------------------------------------- /driver/module_timer.c: -------------------------------------------------------------------------------- 1 | /**************************************************************************** 2 | * 3 | * Module Name : module_timer.c 4 | * Version : 5 | * 6 | * Abstract : RAVENNA/AES67 ALSA LKM 7 | * 8 | * Written by : Baume Florian 9 | * Date : 15/04/2016 10 | * Modified by : 11 | * Date : 12 | * Modification : 13 | * Known problems : None 14 | * 15 | * Copyright(C) 2017 Merging Technologies 16 | * 17 | * RAVENNA/AES67 ALSA LKM is free software; you can redistribute it and / or 18 | * modify it under the terms of the GNU General Public License 19 | * as published by the Free Software Foundation; either version 2 20 | * of the License, or (at your option) any later version. 21 | * 22 | * RAVENNA/AES67 ALSA LKM is distributed in the hope that it will be useful, 23 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 24 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.See the 25 | * GNU General Public License for more details. 26 | * 27 | * You should have received a copy of the GNU General Public License 28 | * along with RAVAENNA ALSA LKM ; if not, see . 29 | * 30 | ****************************************************************************/ 31 | 32 | #include // for tasklet 33 | #include 34 | 35 | #include "module_main.h" 36 | #include "module_timer.h" 37 | 38 | static struct tasklet_hrtimer my_hrtimer_; 39 | static uint64_t base_period_; 40 | static uint64_t max_period_allowed; 41 | static uint64_t min_period_allowed; 42 | static int stop_; 43 | 44 | 45 | enum hrtimer_restart timer_callback(struct hrtimer *timer) 46 | { 47 | int ret_overrun; 48 | ktime_t period; 49 | uint64_t next_wakeup; 50 | uint64_t now; 51 | 52 | do 53 | { 54 | t_clock_timer(&next_wakeup); 55 | get_clock_time(&now); 56 | period = ktime_set(0, next_wakeup - now); 57 | 58 | if (now > next_wakeup) 59 | { 60 | printk(KERN_INFO "Timer won't sleep, clock_timer is recall instantly\n"); 61 | period = ktime_set(0, 0); 62 | } 63 | else if (ktime_to_ns(period) > max_period_allowed || ktime_to_ns(period) < min_period_allowed) 64 | { 65 | printk(KERN_INFO "Timer period out of range: %lld [ms]. Target period = %lld\n", ktime_to_ns(period) / 1000000, base_period_ / 1000000); 66 | if (ktime_to_ns(period) > (unsigned long)5E9L) 67 | { 68 | printk(KERN_ERR "Timer period greater than 5s, set it to 1s!\n"); 69 | period = ktime_set(0,((unsigned long)1E9L)); //1s 70 | } 71 | } 72 | 73 | if(stop_) 74 | { 75 | return HRTIMER_NORESTART; 76 | } 77 | } 78 | while (ktime_to_ns(period) == 0); // this able to be rarely true 79 | 80 | ///ret_overrun = hrtimer_forward(timer, kt_now, period); 81 | ret_overrun = hrtimer_forward_now(timer, period); 82 | // comment it when running in VM 83 | if(ret_overrun > 1) 84 | printk(KERN_INFO "Timer overrun ! (%d times)\n", ret_overrun); 85 | return HRTIMER_RESTART; 86 | 87 | } 88 | 89 | int init_clock_timer(void) 90 | { 91 | stop_ = 0; 92 | ///hrtimer_init(&my_hrtimer_, CLOCK_MONOTONIC, HRTIMER_MODE_ABS); 93 | tasklet_hrtimer_init(&my_hrtimer_, timer_callback, CLOCK_MONOTONIC/*_RAW*/, HRTIMER_MODE_PINNED/*HRTIMER_MODE_ABS*/); 94 | ///my_hrtimer_.function = &timer_callback; 95 | 96 | //base_period_ = 100 * ((unsigned long)1E6L); // 100 ms 97 | base_period_ = 1333333; // 1.3 ms 98 | set_base_period(base_period_); 99 | 100 | //start_clock_timer(); //used when no daemon 101 | return 0; 102 | } 103 | 104 | void kill_clock_timer(void) 105 | { 106 | //stop_clock_timer(); //used when no daemon 107 | } 108 | 109 | int start_clock_timer(void) 110 | { 111 | ktime_t period = ktime_set(0, base_period_); //100 ms 112 | tasklet_hrtimer_start(&my_hrtimer_, period, HRTIMER_MODE_ABS); 113 | 114 | return 0; 115 | } 116 | 117 | void stop_clock_timer(void) 118 | { 119 | 120 | tasklet_hrtimer_cancel(&my_hrtimer_); 121 | /*int ret_cancel = 0; 122 | while(hrtimer_callback_running(&my_hrtimer_)) 123 | ++ret_cancel; 124 | 125 | if(hrtimer_active(&my_hrtimer_) != 0) 126 | ret_cancel = hrtimer_cancel(&my_hrtimer_); 127 | if (hrtimer_is_queued(&my_hrtimer_) != 0) 128 | ret_cancel = hrtimer_cancel(&my_hrtimer_);*/ 129 | } 130 | 131 | void get_clock_time(uint64_t* clock_time) 132 | { 133 | ktime_t kt_now; 134 | kt_now = ktime_get(); 135 | *clock_time = (uint64_t)ktime_to_ns(kt_now); 136 | 137 | // struct timespec monotime; 138 | // getrawmonotonic(&monotime); 139 | // *clock_time = monotime.tv_sec * 1000000000L + monotime.tv_nsec; 140 | } 141 | 142 | void set_base_period(uint64_t base_period) 143 | { 144 | base_period_ = base_period; 145 | min_period_allowed = base_period_ / 7; 146 | max_period_allowed = (base_period_ * 10) / 6; 147 | printk(KERN_INFO "Base period set to %lld ns\n", base_period_); 148 | } -------------------------------------------------------------------------------- /driver/module_timer.h: -------------------------------------------------------------------------------- 1 | /**************************************************************************** 2 | * 3 | * Module Name : module_timer.h 4 | * Version : 5 | * 6 | * Abstract : RAVENNA/AES67 ALSA LKM 7 | * 8 | * Written by : Baume Florian 9 | * Date : 15/04/2016 10 | * Modified by : 11 | * Date : 12 | * Modification : 13 | * Known problems : None 14 | * 15 | * Copyright(C) 2017 Merging Technologies 16 | * 17 | * RAVENNA/AES67 ALSA LKM is free software; you can redistribute it and / or 18 | * modify it under the terms of the GNU General Public License 19 | * as published by the Free Software Foundation; either version 2 20 | * of the License, or (at your option) any later version. 21 | * 22 | * RAVENNA/AES67 ALSA LKM is distributed in the hope that it will be useful, 23 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 24 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.See the 25 | * GNU General Public License for more details. 26 | * 27 | * You should have received a copy of the GNU General Public License 28 | * along with RAVAENNA ALSA LKM ; if not, see . 29 | * 30 | ****************************************************************************/ 31 | 32 | #ifndef MODULE_TIMER_H_INCLUDED 33 | #define MODULE_TIMER_H_INCLUDED 34 | 35 | #include "MTAL_stdint.h" 36 | 37 | int init_clock_timer(void); 38 | void kill_clock_timer(void); 39 | 40 | #if defined(__cplusplus) 41 | extern "C" 42 | { 43 | #endif // defined(__cplusplus) 44 | extern int start_clock_timer(void); 45 | extern void stop_clock_timer(void); 46 | 47 | extern void get_clock_time(uint64_t* clock_time); 48 | 49 | extern void set_base_period(uint64_t base_period); 50 | #if defined(__cplusplus) 51 | } 52 | #endif // defined(__cplusplus) 53 | 54 | #endif // MODULE_TIMER_H_INCLUDED 55 | -------------------------------------------------------------------------------- /players/.gitignore: -------------------------------------------------------------------------------- 1 | roon -------------------------------------------------------------------------------- /players/sample/.gitignore: -------------------------------------------------------------------------------- 1 | *.o 2 | mt_alsa_d_msg_test -------------------------------------------------------------------------------- /players/sample/Makefile: -------------------------------------------------------------------------------- 1 | # define some Makefile variables for the compiler and compiler flags 2 | # to use Makefile variables later in the Makefile: $() 3 | # 4 | # -g adds debugging information to the executable file 5 | # -Wall turns on most, but not all, compiler warnings 6 | # 7 | # for C++ define CC = g++ 8 | CC = g++ 9 | CFLAGS = -g -Wall -pthread -DLINUX 10 | 11 | default: main 12 | 13 | main: main.cpp ipc.o 14 | $(CC) $(CFLAGS) -o mt_alsa_d_msg_test main.cpp MTAL_IPC.o 15 | 16 | 17 | ipc.o: ../../common/MTAL_IPC.c ../../common/MTAL_IPC.h 18 | $(CC) $(CFLAGS) -c ../../common/MTAL_IPC.c 19 | 20 | clean: 21 | $(RM) myprog --------------------------------------------------------------------------------