add Makefiles; fix compilation errors;

pull/2/head
Bryan Biedenkapp 4 years ago
parent 735e2af3d4
commit d209c39dcc

@ -35,6 +35,8 @@
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/ */
#include <math.h> #include <math.h>
#include "Globals.h"
#include "ADF7021.h" #include "ADF7021.h"
#if defined(ENABLE_ADF7021) #if defined(ENABLE_ADF7021)
@ -94,9 +96,9 @@ static void AD7021_IOCTL_Shift()
/// </summary> /// </summary>
static void AD7021_IOCTL_SLEPulse() static void AD7021_IOCTL_SLEPulse()
{ {
io.SLE(HIGH); io.SLE1(HIGH);
io.delayBit(); io.delayBit();
io.SLE(LOW); io.SLE1(LOW);
} }
/// <summary> /// <summary>

@ -38,7 +38,6 @@
#define __ADF7021_H__ #define __ADF7021_H__
#include "Defines.h" #include "Defines.h"
#include "IO.h"
// --------------------------------------------------------------------------- // ---------------------------------------------------------------------------
// Constants // Constants

@ -98,8 +98,8 @@ bool BitBuffer::put(uint8_t bit, uint8_t control)
return false; return false;
} }
WRITE_BIT(m_bits, m_head, bit); _WRITE_BIT(m_bits, m_head, bit);
WRITE_BIT(m_control, m_head, control); _WRITE_BIT(m_control, m_head, control);
m_head++; m_head++;
if (m_head >= m_length) if (m_head >= m_length)
@ -120,8 +120,8 @@ bool BitBuffer::get(uint8_t& bit, uint8_t& control)
if (m_head == m_tail && !m_full) if (m_head == m_tail && !m_full)
return false; return false;
bit = READ_BIT(m_bits, m_tail); bit = _READ_BIT(m_bits, m_tail);
control = READ_BIT(m_control, m_tail); control = _READ_BIT(m_control, m_tail);
m_full = false; m_full = false;

@ -39,6 +39,7 @@
// --------------------------------------------------------------------------- // ---------------------------------------------------------------------------
class DSP_FW_API CalRSSI { class DSP_FW_API CalRSSI {
public:
/// <summary>Initializes a new instance of the CalRSSI class.</summary> /// <summary>Initializes a new instance of the CalRSSI class.</summary>
CalRSSI(); CalRSSI();

@ -33,7 +33,6 @@
#define __DEFINES_H__ #define __DEFINES_H__
#include <stdint.h> #include <stdint.h>
#include <arm_math.h>
// --------------------------------------------------------------------------- // ---------------------------------------------------------------------------
// Types // Types
@ -109,7 +108,7 @@ typedef unsigned long long ulong64_t;
#define BIDIR_DATA_PIN #define BIDIR_DATA_PIN
// Enable full duplex support with dual ADF7021 (valid for homebrew hotspots only) // Enable full duplex support with dual ADF7021 (valid for homebrew hotspots only)
#define DUPLEX // #define DUPLEX
// TCXO of the ADF7021 // TCXO of the ADF7021
// For 14.7456 MHz: // For 14.7456 MHz:
@ -138,6 +137,8 @@ typedef unsigned long long ulong64_t;
const uint8_t BIT_MASK_TABLE[] = { 0x80U, 0x40U, 0x20U, 0x10U, 0x08U, 0x04U, 0x02U, 0x01U }; const uint8_t BIT_MASK_TABLE[] = { 0x80U, 0x40U, 0x20U, 0x10U, 0x08U, 0x04U, 0x02U, 0x01U };
#define CPU_TYPE_STM32 0x02U
// --------------------------------------------------------------------------- // ---------------------------------------------------------------------------
// Macros // Macros
// --------------------------------------------------------------------------- // ---------------------------------------------------------------------------

@ -30,9 +30,8 @@
* along with this program; if not, write to the Free Software * along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/ */
#include "Config.h"
#include "Globals.h" #include "Globals.h"
#include "ADF7021.h"
#include "IO.h" #include "IO.h"
// --------------------------------------------------------------------------- // ---------------------------------------------------------------------------

55
IO.h

@ -36,7 +36,6 @@
#include "Defines.h" #include "Defines.h"
#include "Globals.h" #include "Globals.h"
#include "BitBuffer.h" #include "BitBuffer.h"
#include "ADF7021.h"
// --------------------------------------------------------------------------- // ---------------------------------------------------------------------------
// Constants // Constants
@ -144,6 +143,32 @@ public:
/// <summary></summary> /// <summary></summary>
void getIntCounter(uint16_t& int1, uint16_t& int2); void getIntCounter(uint16_t& int1, uint16_t& int2);
#if defined(ZUMSPOT_ADF7021) || defined(LONESTAR_USB) || defined(SKYBRIDGE_HS)
/// <summary></summary>
bool isDualBand();
#endif
/// <summary></summary>
void SCLK(bool on);
/// <summary></summary>
void SDATA(bool on);
/// <summary></summary>
bool SREAD();
/// <summary></summary>
void SLE1(bool on);
#if defined(DUPLEX)
/// <summary></summary>
void SLE2(bool on);
/// <summary></summary>
bool RXD2();
#endif
/// <summary></summary>
void CE(bool on);
/// <summary></summary>
bool RXD1();
/// <summary></summary>
bool CLK();
private: private:
bool m_started; bool m_started;
@ -168,14 +193,12 @@ private:
/// <summary>Helper to check the frequencies are within band ranges of the ADF7021.</summary> /// <summary>Helper to check the frequencies are within band ranges of the ADF7021.</summary>
void checkBand(uint32_t rxFreq, uint32_t txFreq); void checkBand(uint32_t rxFreq, uint32_t txFreq);
#if defined(ZUMSPOT_ADF7021) || defined(LONESTAR_USB) || defined(SKYBRIDGE_HS)
/// <summary></summary> /// <summary></summary>
void setBandVHF(bool enable); void setBandVHF(bool enable);
/// <summary></summary> /// <summary></summary>
bool hasSingleADF7021(); bool hasSingleADF7021();
/// <summary></summary> #endif
bool isDualBand();
/// <summary></summary> /// <summary></summary>
void configureBand(); void configureBand();
@ -197,28 +220,6 @@ private:
/// <summary>Starts hardware interrupts.</summary> /// <summary>Starts hardware interrupts.</summary>
void startInt(); void startInt();
/// <summary></summary>
void SCLK(bool on);
/// <summary></summary>
void SDATA(bool on);
/// <summary></summary>
bool SREAD();
/// <summary></summary>
void SLE1(bool on);
#if defined(DUPLEX)
/// <summary></summary>
void SLE2(bool on);
/// <summary></summary>
bool RXD2();
#endif
/// <summary></summary>
void CE(bool on);
/// <summary></summary>
bool RXD1();
/// <summary></summary>
bool CLK();
/// <summary></summary> /// <summary></summary>
void setTXDInt(bool on); void setTXDInt(bool on);
#if defined(BIDIR_DATA_PIN) #if defined(BIDIR_DATA_PIN)

@ -335,6 +335,24 @@ static inline void delay_ns()
// --------------------------------------------------------------------------- // ---------------------------------------------------------------------------
// Public Class Members // Public Class Members
// --------------------------------------------------------------------------- // ---------------------------------------------------------------------------
/// <summary>
/// Gets the CPU type the firmware is running on.
/// </summary>
/// <returns></returns>
uint8_t IO::getCPU() const
{
return CPU_TYPE_STM32;
}
/// <summary>
/// Gets the unique identifier for the air interface.
/// </summary>
/// <returns></returns>
void IO::getUDID(uint8_t* buffer)
{
::memcpy(buffer, (void*)STM32_UUID, 12U);
}
/// <summary> /// <summary>
/// ///
/// </summary> /// </summary>
@ -343,35 +361,124 @@ void IO::delayBit()
delay_ns(); delay_ns();
} }
// ---------------------------------------------------------------------------
// Private Class Members
// ---------------------------------------------------------------------------
#if defined(ZUMSPOT_ADF7021) || defined(LONESTAR_USB) || defined(SKYBRIDGE_HS) #if defined(ZUMSPOT_ADF7021) || defined(LONESTAR_USB) || defined(SKYBRIDGE_HS)
/// <summary> /// <summary>
/// ///
/// </summary> /// </summary>
/// <param name="enable"></param> /// <returns></returns>
void IO::setBandVHF(bool enable) bool IO::isDualBand()
{
return GPIO_ReadInputDataBit(PORT_DL_DPX, PIN_DL_DPX) == Bit_SET;
}
#endif
/// <summary>
///
/// </summary>
/// <param name="on"></param>
void IO::SCLK(bool on)
{ {
GPIO_WriteBit(PORT_SET_BAND, PIN_SET_BAND, vhf_on ? Bit_SET : Bit_RESET); GPIO_WriteBit(PORT_SCLK, PIN_SCLK, on ? Bit_SET : Bit_RESET);
}
/// <summary>
///
/// </summary>
/// <param name="on"></param>
void IO::SDATA(bool on)
{
GPIO_WriteBit(PORT_SDATA, PIN_SDATA, on ? Bit_SET : Bit_RESET);
} }
/// <summary> /// <summary>
/// ///
/// </summary> /// </summary>
/// <returns></returns> /// <returns></returns>
bool IO::hasSingleADF7021() bool IO::SREAD()
{ {
return GPIO_ReadInputDataBit(PORT_SGL_DBL, PIN_SGL_DBL) == Bit_SET; return GPIO_ReadInputDataBit(PORT_SREAD, PIN_SREAD) == Bit_SET;
}
/// <summary>
///
/// </summary>
/// <param name="on"></param>
void IO::SLE1(bool on)
{
GPIO_WriteBit(PORT_SLE, PIN_SLE, on ? Bit_SET : Bit_RESET);
}
#if defined(DUPLEX)
/// <summary>
///
/// </summary>
/// <param name="on"></param>
void IO::SLE2(bool on)
{
GPIO_WriteBit(PORT_SLE2, PIN_SLE2, on ? Bit_SET : Bit_RESET);
} }
/// <summary> /// <summary>
/// ///
/// </summary> /// </summary>
/// <returns></returns> /// <returns></returns>
bool IO::isDualBand() bool IO::RXD2()
{ {
return GPIO_ReadInputDataBit(PORT_DL_DPX, PIN_DL_DPX) == Bit_SET; return GPIO_ReadInputDataBit(PORT_RXD2, PIN_RXD2) == Bit_SET;
}
#endif
/// <summary>
///
/// </summary>
/// <param name="on"></param>
void IO::CE(bool on)
{
GPIO_WriteBit(PORT_CE, PIN_CE, on ? Bit_SET : Bit_RESET);
}
/// <summary>
///
/// </summary>
/// <returns></returns>
bool IO::RXD1()
{
return GPIO_ReadInputDataBit(PORT_RXD, PIN_RXD) == Bit_SET;
}
/// <summary>
///
/// </summary>
/// <returns></returns>
bool IO::CLK()
{
#if defined(BIDIR_DATA_PIN)
return GPIO_ReadInputDataBit(PORT_TXD, PIN_TXD) == Bit_SET;
#else
return GPIO_ReadInputDataBit(PORT_CLKOUT, PIN_CLKOUT) == Bit_SET;
#endif
}
// ---------------------------------------------------------------------------
// Private Class Members
// ---------------------------------------------------------------------------
#if defined(ZUMSPOT_ADF7021) || defined(LONESTAR_USB) || defined(SKYBRIDGE_HS)
/// <summary>
///
/// </summary>
/// <param name="enable"></param>
void IO::setBandVHF(bool enable)
{
GPIO_WriteBit(PORT_SET_BAND, PIN_SET_BAND, enable ? Bit_SET : Bit_RESET);
}
/// <summary>
///
/// </summary>
/// <returns></returns>
bool IO::hasSingleADF7021()
{
return GPIO_ReadInputDataBit(PORT_SGL_DBL, PIN_SGL_DBL) == Bit_SET;
} }
#endif #endif
@ -701,93 +808,6 @@ void IO::setDataDirOut(bool dir)
} }
#endif #endif
/// <summary>
///
/// </summary>
/// <param name="on"></param>
void IO::SCLK(bool on)
{
GPIO_WriteBit(PORT_SCLK, PIN_SCLK, on ? Bit_SET : Bit_RESET);
}
/// <summary>
///
/// </summary>
/// <param name="on"></param>
void IO::SDATA(bool on)
{
GPIO_WriteBit(PORT_SDATA, PIN_SDATA, on ? Bit_SET : Bit_RESET);
}
/// <summary>
///
/// </summary>
/// <returns></returns>
bool IO::SREAD()
{
return GPIO_ReadInputDataBit(PORT_SREAD, PIN_SREAD) == Bit_SET;
}
/// <summary>
///
/// </summary>
/// <param name="on"></param>
void IO::SLE1(bool on)
{
GPIO_WriteBit(PORT_SLE, PIN_SLE, on ? Bit_SET : Bit_RESET);
}
#if defined(DUPLEX)
/// <summary>
///
/// </summary>
/// <param name="on"></param>
void IO::SLE2(bool on)
{
GPIO_WriteBit(PORT_SLE2, PIN_SLE2, on ? Bit_SET : Bit_RESET);
}
/// <summary>
///
/// </summary>
/// <returns></returns>
bool IO::RXD2()
{
return GPIO_ReadInputDataBit(PORT_RXD2, PIN_RXD2) == Bit_SET;
}
#endif
/// <summary>
///
/// </summary>
/// <param name="on"></param>
void IO::CE(bool on)
{
GPIO_WriteBit(PORT_CE, PIN_CE, on ? Bit_SET : Bit_RESET);
}
/// <summary>
///
/// </summary>
/// <returns></returns>
bool IO::RXD1()
{
return GPIO_ReadInputDataBit(PORT_RXD, PIN_RXD) == Bit_SET;
}
/// <summary>
///
/// </summary>
/// <returns></returns>
bool IO::CLK()
{
#if defined(BIDIR_DATA_PIN)
return GPIO_ReadInputDataBit(PORT_TXD, PIN_TXD) == Bit_SET;
#else
return GPIO_ReadInputDataBit(PORT_CLKOUT, PIN_CLKOUT) == Bit_SET;
#endif
}
#if defined(BIDIR_DATA_PIN) #if defined(BIDIR_DATA_PIN)
/// <summary> /// <summary>
/// ///

@ -0,0 +1,10 @@
#!/usr/bin/make
default:
@echo Use the appropriate platform specific Makefile: Makefile.STM32FX.
clean:
$(MAKE) -f Makefile.STM32FX clean
.FORCE:

@ -0,0 +1,342 @@
# STM32 library paths
F1_LIB_PATH=/opt/tools/STM32F10X_Lib
F4_LIB_PATH=/opt/tools/STM32F4XX_Lib
# MCU external clock frequency (Hz)
CLK_PI_F4=12000000
CLK_DEF=8000000
# Directory Structure
BINDIR=bin
OBJDIR_F1=obj_f1
OBJDIR_F4=obj_f4
# Output files
BINELF_F1=mmdvm_f1.elf
BINHEX_F1=mmdvm_f1.hex
BINBIN_F1=mmdvm_f1.bin
BINELF_F1BL=mmdvm_f1bl.elf
BINHEX_F1BL=mmdvm_f1bl.hex
BINBIN_F1BL=mmdvm_f1bl.bin
BINELF_F1NOBL=mmdvm_f1nobl.elf
BINHEX_F1NOBL=mmdvm_f1nobl.hex
BINBIN_F1NOBL=mmdvm_f1nobl.bin
BINELF_F4=mmdvm_f4.elf
BINHEX_F4=mmdvm_f4.hex
BINBIN_F4=mmdvm_f4.bin
# Header directories
INC_F1= . $(F1_LIB_PATH)/CMSIS/ $(F1_LIB_PATH)/Device/ $(F1_LIB_PATH)/STM32F10x_StdPeriph_Driver/inc/ $(F1_LIB_PATH)/usb/inc/
INCLUDES_F1=$(INC_F1:%=-I%)
INC_F4= . $(F4_LIB_PATH)/CMSIS/Include/ $(F4_LIB_PATH)/Device/ $(F4_LIB_PATH)/STM32F4xx_StdPeriph_Driver/include/
INCLUDES_F4=$(INC_F4:%=-I%)
# CMSIS libraries
INCLUDES_LIBS_F1=
INCLUDES_LIBS_F4=$(F4_LIB_PATH)/CMSIS/Lib/GCC/libarm_cortexM4lf_math.a
# STM32F1 Standard Peripheral Libraries source path
STD_LIB_F1=$(F1_LIB_PATH)/STM32F10x_StdPeriph_Driver/src
# STM32F1 USB support source path
USB_F1=$(F1_LIB_PATH)/usb
# STM32F4 Standard Peripheral Libraries source path
STD_LIB_F4=$(F4_LIB_PATH)/STM32F4xx_StdPeriph_Driver/source
# STM32F1 system source path
SYS_DIR_F1=$(F1_LIB_PATH)/Device
STARTUP_DIR_F1=$(F1_LIB_PATH)/Device/startup
# STM32F4 system source path
SYS_DIR_F4=$(F4_LIB_PATH)/Device
STARTUP_DIR_F4=$(F4_LIB_PATH)/Device/startup
# GNU ARM Embedded Toolchain
CC=arm-none-eabi-gcc
CXX=arm-none-eabi-g++
LD=arm-none-eabi-ld
AR=arm-none-eabi-ar
AS=arm-none-eabi-as
CP=arm-none-eabi-objcopy
OD=arm-none-eabi-objdump
NM=arm-none-eabi-nm
SIZE=arm-none-eabi-size
A2L=arm-none-eabi-addr2line
# Configure vars depending on OS
ifeq ($(OS),Windows_NT)
CLEANCMD=del /S *.o *.hex *.bin *.elf
MDDIRS=md $@
DFU_UTIL=./$(F1_LIB_PATH)/utils/win/dfu-util.exe
STM32FLASH=./$(F1_LIB_PATH)/utils/win/stm32flash.exe
else
CLEANCMD=rm -f $(OBJ_F1BL) $(OBJ_F4) $(OBJ_F7) $(BINDIR)/*.hex $(BINDIR)/mmdvm_f1.bin $(BINDIR)/mmdvm_f1bl.bin $(BINDIR)/mmdvm_f1nobl.bin $(BINDIR)/*.elf
MDDIRS=mkdir $@
ifeq ($(shell uname -s),Linux)
ST_FLASH_ON_PATH=$(shell which st-flash)
ST_FLASH_IS_ON_PATH=$(.SHELLSTATUS)
ifeq ($(shell uname -m),x86_64)
DFU_RST=./$(F1_LIB_PATH)/utils/linux64/upload-reset
DFU_UTIL=./$(F1_LIB_PATH)/utils/linux64/dfu-util
DFU_RST=./$(F1_LIB_PATH)/utils/linux64/upload-reset
DFU_UTIL=./$(F1_LIB_PATH)/utils/linux64/dfu-util
ifeq ($(ST_FLASH_IS_ON_PATH),0)
ST_FLASH=$(ST_FLASH_ON_PATH)
ST_FLASH_OPTS=--flash=128k
else
ST_FLASH=./$(F1_LIB_PATH)/utils/linux64/st-flash
ST_FLASH_OPTS=
endif
STM32FLASH=./$(F1_LIB_PATH)/utils/linux64/stm32flash
else ifeq ($(shell uname -m),armv7l)
DFU_RST=./$(F1_LIB_PATH)/utils/rpi32/upload-reset
DFU_UTIL=./$(F1_LIB_PATH)/utils/rpi32/dfu-util
ST_FLASH=./$(F1_LIB_PATH)/utils/rpi32/st-flash
STM32FLASH=./$(F1_LIB_PATH)/utils/rpi32/stm32flash
else ifeq ($(shell uname -m),armv6l)
DFU_RST=./$(F1_LIB_PATH)/utils/rpi32/upload-reset
DFU_UTIL=./$(F1_LIB_PATH)/utils/rpi32/dfu-util
ST_FLASH=./$(F1_LIB_PATH)/utils/rpi32/st-flash
STM32FLASH=./$(F1_LIB_PATH)/utils/rpi32/stm32flash
else
DFU_RST=./$(F1_LIB_PATH)/utils/linux/upload-reset
DFU_UTIL=./$(F1_LIB_PATH)/utils/linux/dfu-util
ifeq ($(ST_FLASH_IS_ON_PATH),0)
ST_FLASH=$(ST_FLASH_ON_PATH)
ST_FLASH_OPTS=--flash=128k
else
ST_FLASH=./$(F1_LIB_PATH)/utils/linux/st-flash
ST_FLASH_OPTS=
endif
STM32FLASH=./$(F1_LIB_PATH)/utils/linux/stm32flash
endif
endif
ifeq ($(shell uname -s),Darwin)
DFU_RST=./$(F1_LIB_PATH)/utils/macosx/upload-reset
DFU_UTIL=./$(F1_LIB_PATH)/utils/macosx/dfu-util
ST_FLASH=./$(F1_LIB_PATH)/utils/macosx/st-flash
STM32FLASH=./$(F1_LIB_PATH)/utils/macosx/stm32flash
endif
endif
# Default reference oscillator frequencies
ifndef $(OSC)
ifeq ($(MAKECMDGOALS),pi-f4)
OSC=$(CLK_PI_F4)
else
OSC=$(CLK_DEF)
endif
endif
# Build object lists
CXXSRC=$(wildcard ./*.cpp) $(wildcard ./dmr/*.cpp) $(wildcard ./p25/*.cpp)
CSRC_STD_F1=$(wildcard $(STD_LIB_F1)/*.c)
SYS_F1=$(wildcard $(SYS_DIR_F1)/*.c)
STARTUP_F1=$(wildcard $(STARTUP_DIR_F1)/*.c)
CXX_USB_F1=$(wildcard $(USB_F1)/*.cpp)
C_USB_F1=$(wildcard $(USB_F1)/*.c)
CSRC_STD_F4=$(wildcard $(STD_LIB_F4)/*.c)
SYS_F4=$(wildcard $(SYS_DIR_F4)/*.c)
STARTUP_F4=$(wildcard $(STARTUP_DIR_F4)/*.c)
OBJ_F1=$(CXXSRC:./%.cpp=$(OBJDIR_F1)/%.o) $(CSRC_STD_F1:$(STD_LIB_F1)/%.c=$(OBJDIR_F1)/%.o) $(SYS_F1:$(SYS_DIR_F1)/%.c=$(OBJDIR_F1)/%.o) $(STARTUP_F1:$(STARTUP_DIR_F1)/%.c=$(OBJDIR_F1)/%.o)
OBJ_F1BL=$(CXXSRC:./%.cpp=$(OBJDIR_F1)/%.o) $(CSRC_STD_F1:$(STD_LIB_F1)/%.c=$(OBJDIR_F1)/%.o) $(SYS_F1:$(SYS_DIR_F1)/%.c=$(OBJDIR_F1)/%.o) $(STARTUP_F1:$(STARTUP_DIR_F1)/%.c=$(OBJDIR_F1)/%.o) $(CXX_USB_F1:$(USB_F1)/%.cpp=$(OBJDIR_F1)/%.o) $(C_USB_F1:$(USB_F1)/%.c=$(OBJDIR_F1)/%.o)
OBJ_F4=$(CXXSRC:./%.cpp=$(OBJDIR_F4)/%.o) $(CSRC_STD_F4:$(STD_LIB_F4)/%.c=$(OBJDIR_F4)/%.o) $(SYS_F4:$(SYS_DIR_F4)/%.c=$(OBJDIR_F4)/%.o) $(STARTUP_F4:$(STARTUP_DIR_F4)/%.c=$(OBJDIR_F4)/%.o)
# MCU flags
MCFLAGS_F1=-mcpu=cortex-m3 -march=armv7-m -mthumb
MCFLAGS_F4=-mcpu=cortex-m4 -mthumb -mlittle-endian -mfpu=fpv4-sp-d16 -mfloat-abi=hard -mthumb-interwork
# Compile flags
DEFS_F1_HS=-DUSE_STDPERIPH_DRIVER -DSTM32F10X_MD -DHSE_VALUE=$(OSC) -DVECT_TAB_OFFSET=0x0 -DMADEBYMAKEFILE
DEFS_F1_HS_BL=-DUSE_STDPERIPH_DRIVER -DSTM32F10X_MD -DHSE_VALUE=$(OSC) -DVECT_TAB_OFFSET=0x2000 -DMADEBYMAKEFILE
# STM32F446 Pi-Hat board:
DEFS_PI_F4=-DUSE_STDPERIPH_DRIVER -DSTM32F4XX -DSTM32F446xx -DSTM32F4_PI -DHSE_VALUE=$(OSC) -DMADEBYMAKEFILE
# STM32F4 Nucleo-64 F446RE board:
DEFS_F446=-DUSE_STDPERIPH_DRIVER -DSTM32F4XX -DSTM32F446xx -DSTM32F4_NUCLEO -DHSE_VALUE=$(OSC) -DMADEBYMAKEFILE
# Build compiler flags
CFLAGS_F1=-c $(MCFLAGS_F1) $(INCLUDES_F1)
CXXFLAGS_F1=-c $(MCFLAGS_F1) $(INCLUDES_F1)
CFLAGS_F4=-c $(MCFLAGS_F4) $(INCLUDES_F4)
CXXFLAGS_F4=-c $(MCFLAGS_F4) $(INCLUDES_F4)
# Linker flags
LDFLAGS_F1_N =-T normal.ld $(MCFLAGS_F1) $(INCLUDES_LIBS_F1)
LDFLAGS_F1_BL =-T bootloader.ld $(MCFLAGS_F1) $(INCLUDES_LIBS_F1)
LDFLAGS_F4 =-T stm32f4xx_link.ld $(MCFLAGS_F4) $(INCLUDES_LIBS_F4)
# Common flags
CFLAGS=-Os -ffunction-sections -fdata-sections -fno-builtin -Wno-implicit -DCUSTOM_NEW -DNO_EXCEPTIONS
CXXFLAGS=-Os -fno-exceptions -ffunction-sections -fdata-sections -fno-builtin -fno-rtti -DCUSTOM_NEW -DNO_EXCEPTIONS
LDFLAGS=-Os --specs=nano.specs --specs=nosys.specs
# Build Rules
.PHONY: all release_f1 release_f4 hs bl nobl pi-f4 f446 clean
all: hs
#error "Either PI_HAT_7021_REV_02, ZUMSPOT_ADF7021, LONESTAR_USB, MMDVM_HS_HAT_REV12, MMDVM_HS_DUAL_HAT_REV10, NANO_HOTSPOT, NANO_DV_REV11, or SKYBRIDGE_HS
zumspot-adf7021: CFLAGS+=-DZUMSPOT_ADF7021 -DSTM32_USART1_HOST
zumspot-adf7021: CXXFLAGS+=-DZUMSPOT_ADF7021 -DSTM32_USART1_HOST
zumspot-adf7021: hs
zumspot-adf7021-duplex: CFLAGS+=-DDUPLEX
zumspot-adf7021-duplex: CXXFLAGS+=-DDUPLEX
zumspot-adf7021-duplex: zumspot-adf7021
zumspot-adf7021-usb: CFLAGS+=-DZUMSPOT_ADF7021 -DSTM32_USB_HOST
zumspot-adf7021-usb: CXXFLAGS+=-DZUMSPOT_ADF7021 -DSTM32_USB_HOST
zumspot-adf7021-usb: hs
zumspot-adf7021-usb-duplex: CFLAGS+=-DDUPLEX
zumspot-adf7021-usb-duplex: CXXFLAGS+=-DDUPLEX
zumspot-adf7021-usb-duplex: zumspot-adf7021-usb
pihat-7021-r2: CFLAGS+=-DPI_HAT_7021_REV_02 -DSTM32_USART1_HOST
pihat-7021-r2: CXXFLAGS+=-DZUMSPOT_ADF7021 -DSTM32_USART1_HOST
pihat-7021-r2: hs
pihat-7021-r2-duplex: CFLAGS+=-DDUPLEX
pihat-7021-r2-duplex: CXXFLAGS+=-DDUPLEX
pihat-7021-r2-duplex: pihat-7021-r2-duplex
lonestar-usb: CFLAGS+=-DLONESTAR_USB -DSTM32_USB_HOST
lonestar-usb: CXXFLAGS+=-DLONESTAR_USB -DSTM32_USB_HOST
lonestar-usb: hs
mmdvm-hs-hat: zumspot-adf7021
mmdvm-hs-hat-dual: zumspot-adf7021-duplex
pi-f4: CFLAGS+=$(CFLAGS_F4) $(DEFS_PI_F4)
pi-f4: CXXFLAGS+=$(CXXFLAGS_F4) $(DEFS_PI_F4)
pi-f4: LDFLAGS+=$(LDFLAGS_F4)
pi-f4: release_f4
f446: CFLAGS+=$(CFLAGS_F4) $(DEFS_F446)
f446: CXXFLAGS+=$(CXXFLAGS_F4) $(DEFS_F446)
f446: LDFLAGS+=$(LDFLAGS_F4)
f446: release_f4
hs: CFLAGS+=$(CFLAGS_F1) $(DEFS_F1_HS)
hs: CXXFLAGS+=$(CXXFLAGS_F1) $(DEFS_F1_HS)
hs: LDFLAGS+=$(LDFLAGS_F1_N)
hs: release_f1
bl: CFLAGS+=$(CFLAGS_F1) $(DEFS_F1_HS_BL)
bl: CXXFLAGS+=$(CXXFLAGS_F1) $(DEFS_F1_HS_BL)
bl: LDFLAGS+=$(LDFLAGS_F1_BL)
bl: release_f1bl
nobl: CFLAGS+=$(CFLAGS_F1) $(DEFS_F1_HS)
nobl: CXXFLAGS+=$(CXXFLAGS_F1) $(DEFS_F1_HS)
nobl: LDFLAGS+=$(LDFLAGS_F1_N)
nobl: release_f1nobl
release_f1: $(BINDIR)
release_f1: $(OBJDIR_F1)
release_f1: $(BINDIR)/$(BINBIN_F1)
release_f1bl: $(BINDIR)
release_f1bl: $(OBJDIR_F1)
release_f1bl: $(BINDIR)/$(BINBIN_F1BL)
release_f1nobl: $(BINDIR)
release_f1nobl: $(OBJDIR_F1)
release_f1nobl: $(BINDIR)/$(BINBIN_F1NOBL)
release_f4: $(BINDIR)
release_f4: $(OBJDIR_F4)
release_f4: $(BINDIR)/$(BINBIN_F4)
$(BINDIR):
$(MDDIRS)
$(OBJDIR_F1):
$(MDDIRS)
$(MDDIRS)/dmr
$(MDDIRS)/p25
$(OBJDIR_F4):
$(MDDIRS)
$(MDDIRS)/dmr
$(MDDIRS)/p25
$(BINDIR)/$(BINBIN_F1BL): $(BINDIR)/$(BINELF_F1BL)
$(CP) -O binary $< $@
$(BINDIR)/$(BINELF_F1BL): $(OBJ_F1BL)
$(CXX) $(OBJ_F1BL) $(LDFLAGS) -o $@
$(SIZE) $(BINDIR)/$(BINELF_F1BL)
$(BINDIR)/$(BINBIN_F1NOBL): $(BINDIR)/$(BINELF_F1NOBL)
$(CP) -O binary $< $@
$(BINDIR)/$(BINELF_F1NOBL): $(OBJ_F1BL)
$(CXX) $(OBJ_F1BL) $(LDFLAGS) -o $@
$(SIZE) $(BINDIR)/$(BINELF_F1NOBL)
$(BINDIR)/$(BINBIN_F1): $(BINDIR)/$(BINELF_F1)
$(CP) -O binary $< $@
$(BINDIR)/$(BINELF_F1): $(OBJ_F1)
$(CXX) $(OBJ_F1) $(LDFLAGS) -o $@
$(SIZE) $(BINDIR)/$(BINELF_F1)
$(BINDIR)/$(BINBIN_F4): $(BINDIR)/$(BINELF_F4)
$(CP) -O binary $< $@
$(BINDIR)/$(BINELF_F4): $(OBJ_F4)
$(CXX) $(OBJ_F4) $(LDFLAGS) -o $@
$(SIZE) $(BINDIR)/$(BINELF_F4)
$(OBJDIR_F1)/%.o: ./%.cpp
$(CXX) $(CXXFLAGS) $< -o $@
$(OBJDIR_F4)/%.o: ./%.cpp
$(CXX) $(CXXFLAGS) $< -o $@
$(OBJDIR_F1)/%.o: $(STD_LIB_F1)/%.c
$(CC) $(CFLAGS) $< -o $@
$(OBJDIR_F4)/%.o: $(STD_LIB_F4)/%.c
$(CC) $(CFLAGS) $< -o $@
$(OBJDIR_F1)/%.o: $(SYS_DIR_F1)/%.c
$(CC) $(CFLAGS) $< -o $@
$(OBJDIR_F1)/%.o: $(STARTUP_DIR_F1)/%.c
$(CC) $(CFLAGS) $< -o $@
$(OBJDIR_F4)/%.o: $(SYS_DIR_F4)/%.c
$(CC) $(CFLAGS) $< -o $@
$(OBJDIR_F4)/%.o: $(STARTUP_DIR_F4)/%.c
$(CC) $(CFLAGS) $< -o $@
$(OBJDIR_F1)/%.o: $(USB_F1)/%.cpp
$(CXX) $(CXXFLAGS) $< -o $@
$(OBJDIR_F1)/%.o: $(USB_F1)/%.c
$(CC) $(CFLAGS) $< -o $@
clean-objs:
test ! -d $(OBJDIR_F1) || rm -rf $(OBJDIR_F1)
test ! -d $(OBJDIR_F4) || rm -rf $(OBJDIR_F4)
clean:
test ! -d $(OBJDIR_F1) || rm -rf $(OBJDIR_F1)
test ! -d $(OBJDIR_F4) || rm -rf $(OBJDIR_F4)
rm -f $(BINDIR)/*.bin $(BINDIR)/*.elf
stlink:
$(ST_FLASH) $(ST_FLASH_OPTS) write bin/$(BINBIN_F1) 0x8000000
stlink-nobl:
$(ST_FLASH) $(ST_FLASH_OPTS) write bin/$(BINBIN_F1NOBL) 0x8000000
stlink-bl:
$(ST_FLASH) $(ST_FLASH_OPTS) write $(F1_LIB_PATH)/utils/bootloader/generic_boot20_pc13_long_rst.bin 0x8000000
sleep 3
$(ST_FLASH) $(ST_FLASH_OPTS) write bin/$(BINBIN_F1BL) 0x8002000
stlink-bl-old:
$(ST_FLASH) $(ST_FLASH_OPTS) write $(F1_LIB_PATH)/utils/bootloader/generic_boot20_pc13.bin 0x8000000
sleep 3
$(ST_FLASH) $(ST_FLASH_OPTS) write bin/$(BINBIN_F1BL) 0x8002000
serial:
$(STM32FLASH) -v -w bin/$(BINBIN_F1) -g 0x0 $(devser)
serial-nobl:
$(STM32FLASH) -v -w bin/$(BINBIN_F1NOBL) -g 0x0 $(devser)
serial-bl:
$(STM32FLASH) -v -w $(F1_LIB_PATH)/utils/bootloader/generic_boot20_pc13_long_rst.bin -g 0x0 $(devser)
sleep 3
$(STM32FLASH) -v -w bin/$(BINBIN_F1BL) -g 0x0 -S 0x08002000 $(devser)
serial-bl-old:
$(STM32FLASH) -v -w $(F1_LIB_PATH)/utils/bootloader/generic_boot20_pc13.bin -g 0x0 $(devser)
sleep 3
$(STM32FLASH) -v -w bin/$(BINBIN_F1BL) -g 0x0 -S 0x08002000 $(devser)

@ -931,12 +931,12 @@ uint8_t SerialPort::setConfig(const uint8_t* data, uint8_t length)
#if !defined(DUPLEX) #if !defined(DUPLEX)
if (m_duplex && m_calState == STATE_IDLE) { if (m_duplex && m_calState == STATE_IDLE) {
DEBUG1("Full duplex not supported with this firmware"); DEBUG1("Full duplex not supported with this firmware");
return RSN_INVALID_STATE; return RSN_INVALID_REQUEST;
} }
#elif defined(DUPLEX) && (defined(ZUMSPOT_ADF7021) || defined(LONESTAR_USB) || defined(SKYBRIDGE_HS)) #elif defined(DUPLEX) && (defined(ZUMSPOT_ADF7021) || defined(LONESTAR_USB) || defined(SKYBRIDGE_HS))
if (io.isDualBand() && m_duplex && m_calState == STATE_IDLE) { if (io.isDualBand() && m_duplex && m_calState == STATE_IDLE) {
DEBUG1("Full duplex is not supported on this board"); DEBUG1("Full duplex is not supported on this board");
return RSN_INVALID_STATE; return RSN_INVALID_REQUEST;
} }
#endif #endif
@ -1078,7 +1078,6 @@ void SerialPort::setMode(DVM_STATE modemState)
dmrRX.reset(); dmrRX.reset();
#endif #endif
dmrDMORX.reset(); dmrDMORX.reset();
dmrRX.reset();
p25RX.reset(); p25RX.reset();
cwIdTX.reset(); cwIdTX.reset();
break; break;

@ -128,7 +128,7 @@ void DMRDMORX::databit(bool bit)
// Data sync // Data sync
uint8_t colorCode; uint8_t colorCode;
uint8_t dataType; uint8_t dataType;
CDMRSlotType slotType; DMRSlotType slotType;
slotType.decode(frame + 1U, colorCode, dataType); slotType.decode(frame + 1U, colorCode, dataType);
if (colorCode == m_colorCode) { if (colorCode == m_colorCode) {

@ -55,8 +55,6 @@ const uint8_t CONTROL_NONE = 0x00U;
const uint8_t CONTROL_VOICE = 0x20U; const uint8_t CONTROL_VOICE = 0x20U;
const uint8_t CONTROL_DATA = 0x40U; const uint8_t CONTROL_DATA = 0x40U;
const uint8_t BIT_MASK_TABLE[] = {0x80U, 0x40U, 0x20U, 0x10U, 0x08U, 0x04U, 0x02U, 0x01U};
// --------------------------------------------------------------------------- // ---------------------------------------------------------------------------
// Public Class Members // Public Class Members
// --------------------------------------------------------------------------- // ---------------------------------------------------------------------------

@ -191,6 +191,10 @@
<ClCompile Include="STM_UART.cpp" /> <ClCompile Include="STM_UART.cpp" />
<ClCompile Include="Utils.cpp" /> <ClCompile Include="Utils.cpp" />
</ItemGroup> </ItemGroup>
<ItemGroup>
<None Include="Makefile" />
<None Include="Makefile.STM32FX" />
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets"> <ImportGroup Label="ExtensionTargets">
</ImportGroup> </ImportGroup>

@ -171,4 +171,8 @@
<Filter>Source Files\p25</Filter> <Filter>Source Files\p25</Filter>
</ClCompile> </ClCompile>
</ItemGroup> </ItemGroup>
<ItemGroup>
<None Include="Makefile" />
<None Include="Makefile.STM32FX" />
</ItemGroup>
</Project> </Project>

@ -206,7 +206,7 @@ void P25RX::processBit(bool bit)
switch (m_duid) { switch (m_duid) {
case P25_DUID_HDU: case P25_DUID_HDU:
{ {
DEBUG1("P25RX: processBit(): sync found in HDU pos", m_syncPtr); DEBUG2("P25RX: processBit(): sync found in HDU pos", m_syncPtr);
uint8_t frame[P25_HDU_FRAME_LENGTH_BYTES + 1U]; uint8_t frame[P25_HDU_FRAME_LENGTH_BYTES + 1U];
bitsToBytes(m_startPtr + P25_NID_LENGTH_BITS, P25_HDU_FRAME_LENGTH_BITS, frame); bitsToBytes(m_startPtr + P25_NID_LENGTH_BITS, P25_HDU_FRAME_LENGTH_BITS, frame);
@ -218,7 +218,7 @@ void P25RX::processBit(bool bit)
break; break;
case P25_DUID_TDU: case P25_DUID_TDU:
{ {
DEBUG1("P25RX: processBit(): sync found in TDU pos", m_syncPtr); DEBUG2("P25RX: processBit(): sync found in TDU pos", m_syncPtr);
uint8_t frame[P25_TDU_FRAME_LENGTH_BYTES + 1U]; uint8_t frame[P25_TDU_FRAME_LENGTH_BYTES + 1U];
bitsToBytes(m_startPtr + P25_NID_LENGTH_BITS, P25_TDU_FRAME_LENGTH_BITS, frame); bitsToBytes(m_startPtr + P25_NID_LENGTH_BITS, P25_TDU_FRAME_LENGTH_BITS, frame);
@ -233,7 +233,7 @@ void P25RX::processBit(bool bit)
return; return;
case P25_DUID_TSDU: case P25_DUID_TSDU:
{ {
DEBUG1("P25RX: processBit(): sync found in TSDU pos", m_syncPtr); DEBUG2("P25RX: processBit(): sync found in TSDU pos", m_syncPtr);
uint8_t frame[P25_TSDU_FRAME_LENGTH_BYTES + 1U]; uint8_t frame[P25_TSDU_FRAME_LENGTH_BYTES + 1U];
bitsToBytes(m_startPtr + P25_NID_LENGTH_BITS, P25_TSDU_FRAME_LENGTH_BITS, frame); bitsToBytes(m_startPtr + P25_NID_LENGTH_BITS, P25_TSDU_FRAME_LENGTH_BITS, frame);
@ -251,7 +251,7 @@ void P25RX::processBit(bool bit)
return; return;
case P25_DUID_TDULC: case P25_DUID_TDULC:
{ {
DEBUG1("P25RX: processBit(): sync found in TDULC pos", m_syncPtr); DEBUG2("P25RX: processBit(): sync found in TDULC pos", m_syncPtr);
uint8_t frame[P25_TDULC_FRAME_LENGTH_BYTES + 1U]; uint8_t frame[P25_TDULC_FRAME_LENGTH_BYTES + 1U];
bitsToBytes(m_startPtr + P25_NID_LENGTH_BITS, P25_TDULC_FRAME_LENGTH_BITS, frame); bitsToBytes(m_startPtr + P25_NID_LENGTH_BITS, P25_TDULC_FRAME_LENGTH_BITS, frame);
@ -339,7 +339,7 @@ void P25RX::processVoice(bool bit)
} }
else { else {
if (m_duid == P25_DUID_TDU) { if (m_duid == P25_DUID_TDU) {
DEBUG1("P25RX: processBit(): sync found in TDU pos", m_syncPtr); DEBUG2("P25RX: processBit(): sync found in TDU pos", m_syncPtr);
uint8_t frame[P25_TDU_FRAME_LENGTH_BYTES + 1U]; uint8_t frame[P25_TDU_FRAME_LENGTH_BYTES + 1U];
bitsToBytes(m_startPtr + P25_NID_LENGTH_BITS, P25_TDU_FRAME_LENGTH_BITS, frame); bitsToBytes(m_startPtr + P25_NID_LENGTH_BITS, P25_TDU_FRAME_LENGTH_BITS, frame);
@ -353,7 +353,7 @@ void P25RX::processVoice(bool bit)
return; return;
} }
DEBUG1("P25RX: processVoice(): sync found in LDU pos", m_syncPtr); DEBUG2("P25RX: processVoice(): sync found in LDU pos", m_syncPtr);
uint8_t frame[P25_LDU_FRAME_LENGTH_BYTES + 3U]; uint8_t frame[P25_LDU_FRAME_LENGTH_BYTES + 3U];
bitsToBytes(m_startPtr + P25_NID_LENGTH_BITS, P25_LDU_FRAME_LENGTH_BITS, frame); bitsToBytes(m_startPtr + P25_NID_LENGTH_BITS, P25_LDU_FRAME_LENGTH_BITS, frame);
@ -426,7 +426,7 @@ void P25RX::processData(bool bit)
reset(); reset();
} }
else { else {
DEBUG1("P25RX: processVoice(): sync found in PDU pos", m_syncPtr); DEBUG2("P25RX: processData(): sync found in PDU pos", m_syncPtr);
uint8_t frame[P25_LDU_FRAME_LENGTH_BYTES + 3U]; uint8_t frame[P25_LDU_FRAME_LENGTH_BYTES + 3U];
bitsToBytes(m_startPtr + P25_NID_LENGTH_BITS, P25_LDU_FRAME_LENGTH_BITS, frame); bitsToBytes(m_startPtr + P25_NID_LENGTH_BITS, P25_LDU_FRAME_LENGTH_BITS, frame);

Loading…
Cancel
Save

Powered by TurnKey Linux.