// rd.h
//
// System-Wide Values for Rivendell
//
//   (C) Copyright 2002-2020 Fred Gleason <fredg@paravelsystems.com>
//
//   This program is free software; you can redistribute it and/or modify
//   it under the terms of the GNU General Public License version 2 as
//   published by the Free Software Foundation.
//
//   This program is distributed in the hope that it will be useful,
//   but WITHOUT ANY WARRANTY; without even the implied warranty of
//   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
//   GNU General Public License for more details.
//
//   You should have received a copy of the GNU General Public
//   License along with this program; if not, write to the Free Software
//   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
//

#ifndef RD_H
#define RD_H

/*
 * Copyright Notice
 */
#define RD_COPYRIGHT_NOTICE "© 2002-2020 Fred Gleason"

/*
 * Default Configuration File
 */
#define RD_CONF_FILE "/etc/rd.conf"
#define RD_WIN_CONF_FILE "rd.ini"

/*
 * Default ALSA asoundrc file
 */
#define RD_ASOUNDRC_FILE "/etc/asound.conf"

/*
 * PID File Locations
 */
#define RD_PID_DIR "/var/run"

/*
 * Where audio gets stored
 */
#define RD_AUDIO_ROOT "/var/snd"

/*
 * Audio File Extension
 */
#define RD_AUDIO_EXTENSION "wav"

/*
 * Allow Nonstandard Bitrates?
 */
#define RD_ALLOW_NONSTANDARD_RATES false

/*
 * Default mySQL Settings
 */
#define DEFAULT_MYSQL_HOSTNAME "localhost"
#define DEFAULT_MYSQL_DATABASE "Rivendell"
#define DEFAULT_MYSQL_USERNAME "rduser"
#define DEFAULT_MYSQL_PASSWORD "letmein"
#define DEFAULT_MYSQL_DRIVER "QMYSQL3"
#define DEFAULT_MYSQL_HEARTBEAT_INTERVAL 360
#define DEFAULT_MYSQL_ENGINE "MyISAM"
#define DEFAULT_MYSQL_CHARSET "utf8mb4"
#define DEFAULT_MYSQL_COLLATION "utf8mb4_general_ci"

/*
 * Maximum Length of Rivendell User Passwords
 */
#define RD_MAX_PASSWORD_LENGTH 32

/*
 * ALSA Settings
 */
#define RD_ALSA_DEFAULT_PERIOD_QUANTITY 4
#define RD_ALSA_DEFAULT_PERIOD_SIZE 1024
#define RD_ALSA_FADE_INTERVAL 100
#define RD_ALSA_SAMPLE_RATE_TOLERANCE 100

/*
 * Date Limits
 */
#define RD_MAX_YEAR 8000

/*
 * JACK Settings
 */
#define RD_JACK_FADE_INTERVAL 100

/*
 * RIPCD TCP Port
 */
#define RIPCD_TCP_PORT 5006

/*
 * CAED TCP Port
 */
#define CAED_TCP_PORT 5005

/*
 * RdCatchd TCP Port
 */
#define RDCATCHD_TCP_PORT 6006

/*
 * Minimum event ID for dynamic (RML-controlled) recordings
 */
#define RDCATCHD_DYNAMIC_BASE_ID 1000000000

/*
 * Default Local GPIO Device
 */
#define RD_DEFAULT_GPIO_DEVICE "/dev/gpio0"

/*
 * Max number of possible GPIO lines (GPI OR GPO)
 */
#define MAX_GPIO_PINS 32768

/*
 * Max number of possible audio adapters
 */
#define RD_MAX_CARDS 24

/*
 * Max number of possible audio streams/card/type
 */
#define RD_MAX_STREAMS 48

/*
 * Max number of possible audio ports/card/type
 */
#define RD_MAX_PORTS 24

/*
 * Max number of possible TTYs
 */
#define MAX_TTYS 8

/*
 * Max number of netcatcher decks per workstation
 */
#define MAX_DECKS 8

/*
 * Max number of inputs or outputs in a switcher
 */
#define MAX_ENDPOINTS 2048

/*
 * Max number of attached switcher matrices per workstation
 */
#define MAX_MATRICES 8

/*
 * Max number of macro timers
 */
#define RD_MAX_MACRO_TIMERS 16

/*
 * Reference Analog Level at 0 dBFS (1/100 dB)
 * (thus, -16 dBFS = +4 dBu)
 */
#define RD_BASE_ANALOG 1600 

/*
 * Maximum number of SoundPanels of a given type
 */
#define MAX_PANELS 50

/*
 * Maximum Cart Number
 */
#define RD_MAX_CART_NUMBER 999999

/*
 * Maximum Cut Number
 */
#define RD_MAX_CUT_NUMBER 999

/*
 * In negative 1/100ths of a dB
 */
#define REFERENCE_LEVEL 1600

/*
 * Typomatic Rate Interval, in mS
 */
#define TYPO_RATE_1 300
#define TYPO_RATE_2 100

/*
 * ALSA Values
 */
#define ALSA_PLAY_PCM_DEVICE "rdp"
#define ALSA_RECORD_PCM_DEVICE "rdr"

/*
 * Default Administrative User
 */
#define RDA_LOGIN_NAME "admin"
#define RDA_PASSWORD ""
#define RDA_FULLNAME "Rivendell Administrator"
#define RDA_DESCRIPTION "Default Administrator Account"

/*
 * Default System User
 */
#define RD_USER_LOGIN_NAME "user"
#define RD_USER_PASSWORD ""
#define RD_USER_FULL_NAME "Rivendell User"
#define RD_USER_DESCRIPTION "Default User Account"

/*
 * Default System Identities
 */
#define RD_DEFAULT_AUDIO_OWNER "rivendell"
#define RD_DEFAULT_AUDIO_GROUP "rivendell"
#define RD_DEFAULT_PYPAD_OWNER "pypad"
#define RD_DEFAULT_PYPAD_GROUP "pypad"
#define RD_DEFAULT_RN_RML_OWNER "rivendell"
#define RD_DEFAULT_RN_RML_GROUP "rivendell"
#define RD_DEFAULT_LABEL "Default Configuration"

/*
 * Default Audio Store Settings
 */
#define RD_DEFAULT_AUDIO_STORE_MOUNT_OPTIONS "defaults"

/*
 * Default RDSelect Configuration Directory
 */
#define RD_DEFAULT_RDSELECT_DIR "/etc/rivendell.d"

/*
 * Default Workstation
 */
#define RD_STATION_NAME "DEFAULT"
#define RD_STATION_DESCRIPTION "Default Workstation"

/*
 * Default Program Service
 */
#define RD_SERVICE_NAME "Production"
#define RD_SERVICE_DESCRIPTION "Default Audio Service"

/*
 * RDSelect Label
 * (Used for the RDSelect entry in RDAdmin->ManageHosts)
 */
#define RD_RDSELECT_LABEL "[RDSelect]"

/*
 * Default Maximum POST Length (bytes)
 */
#define RD_DEFAULT_MAX_POST_LENGTH 10000000

/*
 * Pause Time for Starting Daemons (secs)
 */
#define RD_DAEMON_PAUSE_TIME 1

/*
 * Location of the proc filesystem
 */
#define RD_PROC_DIR "/proc"

/*
 * Location for Lock Files
 */
#define RD_LOCKFILE_DIR "/var/lock"

/*
 * Rivendell Macro Language (RML)
 */
#define RD_RML_ECHO_PORT 5858
#define RD_RML_NOECHO_PORT 5859
#define RD_RML_REPLY_PORT 5860
#define RD_RML_MAX_ARGS 100
#define RD_RML_MAX_LENGTH 2048

/*
 * Maximum Permissible Time Offset (+/- mS)
 */
#define RD_MAX_TIME_OFFSET 10000

/*
 * The file to save geometry state in
 */
#define RD_GEOMETRY_FILE ".rivendell"

/*
 * Meter Update Interval (msecs)
 */
#define RD_METER_UPDATE_INTERVAL 20

/*
 * The metering block shared memory key
 */
#define RD_METER_SHM_KEY 0x00005005

/*
 * Maximum length of import log file line
 */
#define RD_MAX_IMPORT_LINE_LENGTH 1024

/*
 * The minimum fader gain at the end of a segue transition
 * (in hundreths of a dB)
 */
#define RD_FADE_DEPTH -3000

/*
 * The mixer 'off' level for full muting
 */
#define RD_MUTE_DEPTH -10000

/*
 * The fade profile (for HPI adapters only)
 */
#define RD_FADE_TYPE RDHPISoundCard::Log

/*
 * This defines the maximum frequency (in Hz) of the broadcast audio
 * channel being fed by Rivendell.  It is used for things like calculating
 * how expensive an algorithm is needed for sample rate conversion.
 *
 * For modern FM facilities running MPX stereo, 15000 Hz is a reasonable
 * value.
 */
#define RD_MAX_BANDPASS 15000

/*
 * The limits on timescaling
 */
#define RD_TIMESCALE_MIN 0.833
#define RD_TIMESCALE_MAX 1.250
#define RD_TIMESCALE_DIVISOR 100000.0

/*
 * Max number of default services
 */
#define RD_MAX_DEFAULT_SERVICES 32

/*
 * Ripper Settings
 */
#define RIPPER_BAR_INTERVAL 500
#define RIPPER_TEMP_WAV "rdlibrary_rip.wav"
#define RIPPER_TEMP_PEAK "rdlibrary_rip.dat"
#define RIPPER_CDDB_USER "rdlibrary"
#define RIPPER_MAX_SECTORS 20

/*
 * CAE Values
 */
#define CAE_MAX_ARGS 10
#define CAE_MAX_LENGTH 256
#define CAE_POLL_INTERVAL 50

/*
 * Default Sample Rate
 */
#define RD_DEFAULT_SAMPLE_RATE 48000

/*
 * Default Channels
 */
#define RD_DEFAULT_CHANNELS 2

/*
 * Marker Colors
 */
#define RD_SEGUE_MARKER_COLOR Qt::cyan
#define RD_TALK_MARKER_COLOR Qt::blue
#define RD_START_END_MARKER_COLOR Qt::red
#define RD_FADE_MARKER_COLOR Qt::yellow
#define RD_HOOK_MARKER_COLOR Qt::magenta

/*
 * Cart Status Colors
 */
#define RD_CART_ERROR_COLOR Qt::red
#define RD_CART_CONDITIONAL_COLOR Qt::yellow
#define RD_CART_FUTURE_COLOR "#00FFFF"
#define RD_CART_EVERGREEN_COLOR "#008000"
#define RD_CART_INVALID_SERVICE_COLOR Qt::magenta

/*
 * RDAirPlay Colors
 */
#define RDPANEL_SETUP_FLASH_COLOR Qt::blue
#define RDPANEL_RESET_FLASH_COLOR Qt::blue
#define RDPANEL_PLAY_BACKGROUND_COLOR Qt::red
#define RDPANEL_PAUSED_BACKGROUND_COLOR Qt::cyan
#define BUTTON_STOPPED_BACKGROUND_COLOR Qt::green
#define BUTTON_PLAY_BACKGROUND_COLOR Qt::red
#define BUTTON_PLAY_TEXT_COLOR Qt::black
#define BUTTON_PAUSE_BACKGROUND_COLOR Qt::cyan
#define BUTTON_PAUSE_TEXT_COLOR Qt::black
#define BUTTON_FROM_BACKGROUND_COLOR Qt::magenta
#define BUTTON_FROM_TEXT_COLOR Qt::black
#define BUTTON_TO_BACKGROUND_COLOR Qt::yellow
#define BUTTON_TO_TEXT_COLOR Qt::black
#define BUTTON_DISABLED_BACKGROUND_COLOR Qt::darkGray
#define BUTTON_DISABLED_TEXT_COLOR Qt::white
#define BUTTON_ERROR_BACKGROUND_COLOR Qt::red
#define BUTTON_ERROR_TEXT_COLOR Qt::black

/*
 * RDAirPlay Log Machines
 */
#define RDAIRPLAY_LOG_QUANTITY 3

/*
 * Cue Editor Colors
 */
#define RD_CUEEDITOR_KNOB_COLOR Qt::blue
#define RD_CUEEDITOR_PLAY_MARKER Qt::black
#define RD_CUEEDITOR_START_MARKER Qt::red
#define RD_CUEEDITOR_BUTTON_FLASH_PERIOD 200
#define RD_CUEEDITOR_AUDITION_PREROLL 5000

/*
 * Log Colors
 */
#define RD_CUSTOM_TRANSITION_COLOR Qt::blue

/*
 * Default Text Editors
 */
#define RD_LINUX_EDITOR "xterm -e vi"

/*
 * System-wide Maintenance Interval (mS)
 */
#define RD_MAINT_MIN_INTERVAL 900000
#define RD_MAINT_MAX_INTERVAL 3600000

/*
 * Audio File Filter for QFileDialog
 */
#define RD_AUDIO_FILE_FILTER "Sound Files (*.mp* *.MP* *.wav *.WAV *.ogg *.OGG *.flac *.FLAC *.atx *.ATX *.tmc *.TMC *.aif* *.AIF* *.m4a *.M4A *.aac *.AAC)\nAIFF Files (*.aif* *.AIF*)\nATX Files (*.atx *.ATX)\nMPEG Files (*.mp* *.MP*)\nOggVorbis Files (*.ogg *.OGG)\nFLAC Files (*.flac *.FLAC)\nTM Century GoldDrive Files (*.tmc *.TMC)\nWAV Files (*.wav *.WAV)\nAll Files (*.*)"

/*
 * Image File Filter for QFileDialog
 */
#define RD_IMAGE_FILE_FILTER "Image Files (*.png *.bmp *.xbm *.xpm *.pbm *.pgm *.ppm *.jpg *.mng *.gif *.PNG *.BMP *.XBM *.XPM *.PBM *.PGM *.PPM *.JPG *.MNG *.GIF)\nAll Files (*.*)"

/*
 * Podcast Image File Filter for QFileDialog
 */
#define RD_PODCAST_IMAGE_FILE_FILTER "Image Files (*.png *.jpg *.PNG *.JPG *.jpeg *.JPEG)\nAll Files (*.*)"

/*
 * Loadable Module Filter for QFileDialog
 */
#define RD_MODULE_FILE_FILTER "Rivendell Loadable Modules (*.rlm)\nAll Files (*.*)"

/*
 * Web Interface Settings
 */
#define RD_WEB_BACKGROUND_COLOR "#FFFFFF"
#define RD_WEB_LINE_COLOR1 "#E0E0E0"
#define RD_WEB_LINE_COLOR2 "#F0F0F0"

/*
 * LiveWire Values
 */
#define RD_LIVEWIRE_DEFAULT_TCP_PORT 93
#define RD_LIVEWIRE_DEFAULT_STREAM_PORT 5004
#define RD_LIVEWIRE_DEFAULT_CHANNELS 2
#define RD_LIVEWIRE_MAX_CMD_LENGTH 1024
#define RD_LIVEWIRE_GPIO_BUNDLE_SIZE 5
#define RD_LIVEWIRE_DEFAULT_LOAD RDLiveWireDestination::LoadHighZ
#define RD_LIVEWIRE_MAX_SOURCE 0x7FFF
#define RD_LIVEWIRE_GPIO_MCAST_ADDR "239.192.255.4"
#define RD_LIVEWIRE_GPIO_SEND_PORT 2055
#define RD_LIVEWIRE_GPIO_RECV_PORT 2060
#define RD_LIVEWIRE_GPIO_PULSE_WIDTH 100

/*
 * Number of Carts to Include in a 'Limited' Search
 */
#define RD_LIMITED_CART_SEARCH_QUANTITY 100

/*
 * Timeout for libcurl (secs)
 */
#define RD_CURL_TIMEOUT 1200

/*
 * Anonymous FTP Credentials
 */
#define RD_ANON_FTP_USERNAME "anonymous"
#define RD_ANON_FTP_PASSWORD "rivendell"

/*
 * Status Monitor Height
 */
#define RDMONITOR_HEIGHT 30

/*
 * RDAirPlay Colors
 */
#define RDPANEL_SETUP_FLASH_COLOR Qt::blue
#define RDPANEL_RESET_FLASH_COLOR Qt::blue
#define RDPANEL_PLAY_BACKGROUND_COLOR Qt::red
#define RDPANEL_PAUSED_BACKGROUND_COLOR Qt::cyan
#define BUTTON_STOPPED_BACKGROUND_COLOR Qt::green
#define BUTTON_PLAY_BACKGROUND_COLOR Qt::red
#define BUTTON_PLAY_TEXT_COLOR Qt::black
#define BUTTON_PAUSE_BACKGROUND_COLOR Qt::cyan
#define BUTTON_PAUSE_TEXT_COLOR Qt::black
#define BUTTON_FROM_BACKGROUND_COLOR Qt::magenta
#define BUTTON_FROM_TEXT_COLOR Qt::black
#define BUTTON_TO_BACKGROUND_COLOR Qt::yellow
#define BUTTON_TO_TEXT_COLOR Qt::black
#define BUTTON_DISABLED_BACKGROUND_COLOR Qt::darkGray
#define BUTTON_DISABLED_TEXT_COLOR Qt::white
#define BUTTON_ERROR_BACKGROUND_COLOR Qt::red
#define BUTTON_ERROR_TEXT_COLOR Qt::black

#define LOG_SCHEDULED_COLOR Qt::white
#define LOG_PLAYING_COLOR Qt::green
#define LOG_PAUSED_COLOR Qt::cyan
#define LOG_NEXT_COLOR "#CCFFCC"
#define LOG_FINISHED_COLOR Qt::gray
#define LOG_EVERGREEN_COLOR "#008000"
#define LOG_ERROR_COLOR Qt::red
#define LOG_RELATIVE_TEXT_COLOR Qt::black
#define LOG_HARDTIME_TEXT_COLOR Qt::blue

/*
 * Cart Label Box Colors
 */
#define BAR_UNCHANGED_TRANSITION_COLOR Qt::green
#define BAR_UNCHANGED_STOPPING_COLOR Qt::red
#define BAR_CHANGED_TRANSITION_COLOR Qt::yellow
#define BAR_CHANGED_STOPPING_COLOR Qt::blue
#define LABELBOX_BACKGROUND_COLOR Qt::white
#define LABELBOX_MISSING_COLOR Qt::red
#define LABELBOX_MARKER_COLOR Qt::cyan
#define LABELBOX_CHAIN_COLOR Qt::magenta
#define LABELBOX_EVERGREEN_COLOR "#008000"
#define LABELBOX_TIMESCALE_COLOR Qt::green

/*
 * RDCartSlots Settings
 */
#define RDCARTSLOTS_MAX_ROWS 16
#define RDCARTSLOTS_MAX_COLUMNS 4

/*
 * Custom MIME Types (for Drag and Drop)
 */
#define RDMIMETYPE_CART "application/rivendell-cart"

/*
 * Number of Cut Event IDs
 */
#define RD_CUT_EVENT_ID_QUAN 16

/*
 * Log Filter Listing Limit Quantity
 */
#define RD_LOGFILTER_LIMIT_QUAN 14

/*
 * Log Locking Timeout
 */
#define RD_LOG_LOCK_TIMEOUT 30000

/*
 * Default multicast address for sending state updates
 */
#define RD_NOTIFICATION_ADDRESS "239.192.255.72"

/*
 * UDP port for sending state updates
 */
#define RD_NOTIFICATION_PORT 20539

/*
 * RDVAirPlay Values
 */
#define RD_RDVAIRPLAY_LOG_BASE 100
#define RD_RDVAIRPLAY_LOG_QUAN 20

/*
 * GUI Style
 * (must be one of the values returned by QStyleFactory::keys())
 */
#define RD_GUI_STYLE "Plastique"

/*
 * Status / Note Bubble Background Color
 */
#define RD_STATUS_BACKGROUND_COLOR "#AAFFFF"

/*
 * PAD Update Connection Points
 */
#define RD_PAD_CLIENT_TCP_PORT 34289
#define RD_PAD_SOURCE_UNIX_ADDRESS "m4w8n8fsfddf-473fdueusurt-8954"

/*
 * Default 'ServiceTimeout=' value in rd.conf(5)
 */
#define RD_DEFAULT_SERVICE_TIMEOUT 30

/*
 * File Extension for RSS XML Feed Files
 */
#define RD_RSS_XML_FILE_EXTENSION "rss"

/*
 * Shelf life for GPIO event records
 */
#define RD_GPIO_EVENT_DAYS 30

/*
 * Starting UDP port for cae_meter_socket.
 * Default 'MeterPortBaseNumber=' value in rd.conf(5)
 */
#define RD_DEFAULT_METER_SOCKET_BASE_UDP_PORT 30000

/*
 * Maximum number of UDP ports to consider for cae_meter_socket.
 * Default 'MeterPortRange' value in rd.conf(5)
 */
#define RD_METER_SOCKET_PORT_RANGE 100

#endif  // RD_H