/* -*- mode: c; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4; coding: utf-8 -*- */ /************************************************************************************ ** ** ** UHSDR ** ** a powerful firmware for STM32 based SDR transceivers ** ** ** **--------------------------------------------------------------------------------** ** ** ** Description: Please provide one ** ** Licence: GNU GPLv3 ** ************************************************************************************/ #ifndef __UHSDR_BOARD_CONFIG_H #define __UHSDR_BOARD_CONFIG_H #if defined(UI_BRD_MCHF) && defined(UI_BRD_OVI40) #error Only one ui board can be selected: UI_BRD_MCHF, UI_BRD_OVI40 #elif defined(UI_BRD_OVI40) #include "UHSDR_UI_ovi40_config.h" #elif defined(UI_BRD_MCHF) #include "UHSDR_UI_mchf_config.h" #else #error One ui board has to be selected: UI_BRD_MCHF, UI_BRD_OVI40 #endif #if !defined(BOOTLOADER_BUILD) // The rf boards we want to support, but the bootloader should compile for all if possible. // so we don't tell the bootloader which one we have #if !defined(RF_BRD_OVI40) && !defined(RF_BRD_MCHF) && !defined(RF_BRD_LAPWING) #error At least one rf board must be selected: RF_BRD_MCHF, RF_BRD_OVI40, RF_BRD_LAPWING #else #if defined(RF_BRD_OVI40) #include "UHSDR_RF_ovi40_config.h" #endif #if defined(RF_BRD_MCHF) #include "UHSDR_RF_mchf_config.h" #endif #endif #endif #include "uhsdr_types.h" //************DEFAULT_VALUES_IF_NOT_SET_IN_BOARD_CONFIG_FILES**********// #if !defined(TRX_NAME) #define TRX_NAME "mcHF QRP" #endif //TRX_NAME #if !defined(TRX_ID) #define TRX_ID "mchf" #endif // TRX_ID #if !defined(TRX_HW_LIC) #define TRX_HW_LIC "CC BY-NC-SA 3.0" #define TRX_HW_CREATOR "K. Atanassov, M0NKA, www.m0nka.co.uk" #endif // TRX_HW_LIC #if !defined(__MCHF_SPECIALMEM) #define __MCHF_SPECIALMEM #endif #if !defined(__UHSDR_DMAMEM) #define __UHSDR_DMAMEM #endif #if !defined(DEVICE_STRING) #define DEVICE_STRING TRX_NAME " Transceiver" #endif /*** * Please document all switches/parameters with what they are supposed to do and what values they can have. * Please use proper naming: * For capabilities of the software which can be enabled and disabled * use USE_ * * These should be defined using #define USE_CAPABILITY * or left undefined if not enabled so that these can be checked using #ifdef * * For related parameters DON'T USE USE_... * * In an ideal world please use PAR__ (we haven't done that yet) * Please don't define constant or local parameters here, only those a user (!) is supposed to change as part of * configuring a specific build variant. * */ // Fast convolution filtering // experimental at the moment DD4WH, 2018_08_18 //#define USE_CONVOLUTION // old LMS noise reduction // will probably never used any more //#define OBSOLETE_NR // this switches on the autonotch filter based on LMS algorithm // leave this switched on, until we have a new autonotch filter approach #define USE_LMS_AUTONOTCH // save processor time for the STM32F4 // changes lowpass decimation filters to 89 taps instead of 199 taps // because they run at 48ksps, this is a considerable decrease in processing power #ifdef STM32F4 //#define USE_SMALL_HILBERT_DECIMATION_FILTERS #endif // save processor time for the STM32F4 // changes lowpass decimation filters to 89 taps instead of 199 taps // because they run at 48ksps, this is a considerable decrease in processing power // this is ONLY relevant for STM32F4 which has SPI ! // in those machines when enabling NR and other features, ui slows down . . . // thus we should enable the small decimation filter in those machines /** * This parameter disables certain features / capabilites in order to achieve a minimum build size for * the 192k ram / 512k flash STM32F4 machines. Unless you have such a machine, leave this disabled. */ //#define IS_SMALL_BUILD // ********************************** Small build (512k) Var. 1 (not good) //#define R928_PLUS // ********************************** For R928 ets with Si5351a alone synthesizer //#define OPEN_TX_OUTBAND // Open TX out of band (by Menu option) - not in use now //#define GREY_STYLE // ********************************** Monochrome display style //#define SEPIA_STYLE // ********************************** Monochrome display style //#define SDR_AMBER // ********************************** Russian replica from UB8JDC (SDR) //#define SDR_AMBER_480_320 // ********************************** Display 480x320 (3.5") //#define SDR_AMBER_4INCH // ********************************** Display 480x320 (4.0") //#define SDR_AMBER_PTT_ALT // ********************************** Work CW with pedal is ON - Amber only for F7 and H7!!! //#define DDC_AXIS // ********************************** Russian replica from UB8JDC (DDC/DUC) //#define OVI40_DISP_320_240 // ********************************** UHSDR don't love displays 320*240 now. Why? //#define OVI40_MOD_480_320 // ********************************** Interface like Amber 480x320 #define FAST_FREQ_ENC // ********************************** The freq encoder is polled more often than 10ms. //#define HELP_MENU // ********************************** Show help for system menu - need a lot of RAM #if !defined(IS_SMALL_BUILD) #define USE_8bit_FONT #define USE_PREDEFINED_WINDOW_DATA // OPTION with IS_SMALL_BUILD we are not automatically including USE_FREEDV as it uses lot of memory, both RAM and flash #define USE_FREEDV // ********************************** Small build (512k) Var. 2 #endif // IS_SMALL_BUILD #ifdef SDR_AMBER #define DAC_5MW 0 #define DAC_05W 208 #define DAC_1W 298 #define DAC_2W 438 #define DAC_4W 758 #define DAC_5W 2048 #endif // some special switches //#define DEBUG_BUILD //#define DEBUG_FREEDV // if enabled the alternate (read new and better) noise reduction is active // this is the standard NR now (Febr 2018) #define USE_ALTERNATE_NR #define USE_LEAKY_LMS // Named in interface as ANR // you may optionally define the list of supported GFX drivers externally // if you just define EXTERNAL_USE_GFX_CONFIG and no USE_GFX_... // you will get a headless system using a dummy display driver #ifndef EXTERNAL_USE_GFX_CONFIG #define USE_GFX_ILI932x #define USE_GFX_ILI9486 #define USE_GFX_ST7796 // #define USE_GFX_ILI9341 // SSD1289 support is not yet working, also requires USE_GFX_ILI932x to be enabled for now. // #define USE_GFX_SSD1289 #define USE_DISP_480_320 #if defined(STM32F7) || defined(STM32H7) #define USE_GFX_RA8875 #endif #endif #define USE_FFT_1024 // OPTION #define USE_RTTY_PROCESSOR // OPTION #define USE_USBHOST #ifdef USE_USBHOST // define additional USBHOST related "switches" only here! // #define USE_USBDRIVE #define USE_USBKEYBOARD #endif // use the STM32 internal RTC with an external quartz and // M1 and F3 connected to PD14 and PD15 (D0 and D1 of LCD) instead of PC14 and PC15 (to which the 32768 Hz quartz has to be connected) #define USE_RTC_LSE // multiple oscillators may be enabled, but only the first detected oscillator is issued // i.e. there is currently only support for a single oscillator in a TRX. // Support for LO based on SI570 #define USE_OSC_SI570 // Support for LO based on SI5351 #define USE_OSC_SI5351A // Support for DUC/DDC board #define USE_OSC_DUCDDC // OPTION TO USE FLASH BASED CONFIGURATION STORAGE #define USE_CONFIGSTORAGE_FLASH // Option: If defined, high priority tasks are executed in the context of an PendSV interrupt // which gives finishing these tasks a priority over "normal", less real-time critical longer running user control tasks // such as display redraw. // In general this should be defined but in case of issues one may want to execute High Prio tasks not concurrently // to normal tasks, comment this in this case and see if the issue goes away. But this may cause other problems // of course. #define USE_PENDSV_FOR_HIGHPRIO_TASKS // OPTION: Enable handling of TX/RX switching in an interrupt. Provides very low latency switching // EXPERIMENTAL !!! #define USE_HIGH_PRIO_PTT // OPTION: IQ signal path now use 24bit samples from/to the codecs instead of the default 16bit. Slightly increases RAM usage (+0.5 - 1k). // will finally work both on single and dual codec configurations. #define USE_32_IQ_BITS #define USE_32_AUDIO_BITS // OPTION: Instead of band names for memories and enabling only band memories which are supported // by the current RF board, use all available memories // this changes the displayed memory name to Mem instead of Bnd #ifdef RF_BRD_LAPWING #define USE_MEMORY_MODE #define DEFAULT_MEMORY_FREQ (1240000000) #endif // for now: These are fixed. #define IQ_SAMPLE_RATE (48000) #define AUDIO_SAMPLE_RATE (48000) // a lot of code pieces assume that this frequency // is 1500 Hz, so don't change #define IQ_INTERRUPT_FREQ (1500) // we process one dma block of samples at once // block sizes should be a power of two // a lot of code process information in these blocks #define IQ_BLOCK_SIZE (IQ_SAMPLE_RATE/IQ_INTERRUPT_FREQ) #define AUDIO_BLOCK_SIZE (AUDIO_SAMPLE_RATE/IQ_INTERRUPT_FREQ) // use for clocking based on DMA IRQ #define SAMPLES_PER_DMA_CYCLE (IQ_BLOCK_SIZE) #define SAMPLES_PER_CENTISECOND (IQ_SAMPLE_RATE/100) #ifdef STM32F4 #define USE_SIMPLE_FREEDV_FILTERS #define USE_FREEDV_1600 #else #define USE_FREEDV_700D #endif #if (IQ_SAMPLE_RATE) != 48000 #error Only 48k sample frequency supported (yet). #endif #if (IQ_BLOCK_SIZE * 1500) != IQ_SAMPLE_RATE #error Audio Interrupt Frequency must be 1500. #endif #if (IQ_SAMPLE_RATE/IQ_BLOCK_SIZE) != (AUDIO_SAMPLE_RATE/AUDIO_BLOCK_SIZE) #error IQ Interrupt frequency must be idential to Audio Interrupt Frequency #endif //******************************CONFIGURATION_LOGIC_CHECKS************************************// //#if !defined(USE_OSC_SI570) && !defined(USE_OSC_SI5351A) #if !defined(USE_OSC_SI570) && !defined(USE_OSC_SI5351A) && !defined(USE_OSC_DUCDDC) #error At least one of supported oscillators should be enabled. #endif #if !defined(USE_PENDSV_FOR_HIGHPRIO_TASKS) && defined(USE_HIGH_PRIO_PTT) #error USE_HIGH_PRIO_PTT requires USE_PENDSV_FOR_HIGHPRIO_TASKS #endif #if defined(USE_32_IQ_BITS) && CODEC_NUM == 1 #define USE_32_AUDIO_BITS #endif #if !defined(USE_GFX_ILI932x) && !defined(USE_GFX_ILI9486) #warning Both USE_GFX_ILI932x and USE_GFX_ILI9486 are disabled, no display driver will be available! #endif #if defined(UI_BRD_MCHF) && defined(USE_TWO_CHANNEL_AUDIO) #error UI_BRD_MCHF does not permit USE_TWO_CHANNEL_AUDIO #endif #if CODEC_NUM == 1 && (defined(USE_32_IQ_BITS) && !defined(USE_32_AUDIO_BITS)) || (!defined(USE_32_IQ_BITS) && defined(USE_32_AUDIO_BITS)) #error With only one codec bit width of iq and audio must match, either define both USE_32_IQ_BITS and USE_32_AUDIO_BITS or none #endif #endif