osmo-trx (1.6.0) unstable; urgency=medium

  [ Vadim Yanitskiy ]
  * configure.ac: check if LIBTRXCON_DIR (submodule) exists
  * tests: Makefile.am: move -I flags from AM_CFLAGS to AM_CPPFLAGS
  * tests: there shall be no libraries in LDFLAGS
  * tests: use -no-install libtool flag to avoid ./lt-* scripts
  * tests: LMSDeviceTest: fix CPPFLAGS vs CXXFLAGS
  * ipc-driver-test: clean up variables in Makefile.am
  * CommonLibs: remove unused *trx in cfg[_no]_ctr_error_threshold_cmd
  * CommonLibs: clean up and fix Makefile.am
  * ms: logging: print category, level, and extended timestamp

  [ Oliver Smith ]
  * Run struct_endianness.py
  * debian: set compat level to 10
  * systemd: depend on networking-online.target
  * USRPDevice:updateAlignment: remove byteswap code

  [ Eric ]
  * .clang-format: adjust template formatting
  * ms: update submodule to currently known working version
  * ms: adjust tx scaling for tx samples
  * ms : fix the template formatting
  * ms: fix the gain init for blade
  * ms: prettify scheduling + add odroid
  * ms: fix startup & shutdown of blade
  * ms: block burst q to upper layer
  * ms: use single thread pool
  * ms : rename var
  * ms : rename var
  * ms: cache frequency
  * ms: pretty tx buf class
  * ms: rearrange internal trxcon<->phy if
  * ms: remove syncthing tool
  * ms: prune common sch acq code
  * ms: rearrange code to allow clean exits
  * ms: flexible template for value_type buffer sum
  * ms: make init call less confusing
  * transceiver: pass cfg struct instead of args
  * devices: unify band handling
  * ms: fix blocking logging
  * ms: drop the tx burst padding
  * trx: fix dev-args issue
  * ms: update osmocom-bb
  * ms: restructure the va code to add rach support
  * transceiver: add experimental viterbi equalizer support
  * ms/va: make ancient gcc < 8 happy
  * ms: fix thread prio startup issue
  * ms: fix a few coverity complaints related to initialization
  * ms: bump osmocom-bb submodule to current head

  [ Eric Wild ]
  * ms: adjust float<->integral type conversion
  * ms: sch: drop intermediate softvector
  * devices: add freq/gain override for uhd

  [ arehbein ]
  * Transition to use of 'telnet_init_default'

  [ Pau Espin Pedrol ]
  * Call osmo_fd_unregister() before closing and changing bfd->fd
  * ms: update osmocom-bb submodule

 -- Pau Espin Pedrol <pespin@sysmocom.de>  Tue, 12 Sep 2023 15:56:57 +0200

osmo-trx (1.5.0) unstable; urgency=medium

  [ Oliver Smith ]
  * configure.ac: add -lboost_thread for uhd < 4.2.0
  * gitignore: add uhddev_ipc.cpp
  * contrib/jenkins: don't run "make distcheck" on arm

  [ Vadim Yanitskiy ]
  * threshold_timer_update_intv(): call osmo_timer_del() unconditionally
  * Transceiver::expectedCorrType(): RACH is always 8-bit on PTCCH/U
  * contrib/jenkins.sh: dump submodule status before building
  * configure.ac: fix: properly check whether to enable ms-trx
  * configure.ac: allow building without cloning submodules
  * configure.ac: cosmetic: rearrange MS TRX related logic
  * configure.ac: make use of AC_MSG_CHECKING and AC_MSG_RESULT

  [ Max ]
  * Set working directory in systemd service file
  * Add realtime scheduling and set priority in service file
  * ctrl: take both address and port from vty config

  [ Eric ]
  * ignore vscode dirs
  * rename noisevector class -> avgvector
  * osmocom-bb for ms-trx side trxcon integration
  * add checkpatch config
  * bladerf xa4 support
  * update osmocom-bb submodule to fix make distcheck
  * vita demod by piotr krysik, modified
  * properly update osmocom-bb submodule, for real this time..
  * ms-trx support
  * clean up mutex, scopedlock, and signal classes
  * ipc: add missing override
  * clang-format: proper c++ standard
  * ipc: remove old autotools workaround
  * ms: init trash used to escape the usb callbacks
  * radio interface: fix init

  [ Eric Wild ]
  * mstrx: do not wait forever if clock locking fails

 -- Pau Espin Pedrol <pespin@sysmocom.de>  Tue, 07 Feb 2023 17:08:17 +0100

osmo-trx (1.4.1) unstable; urgency=medium

  [ Oliver Smith ]
  * treewide: remove FSF address

  [ Vadim Yanitskiy ]
  * tests: use 'check_PROGRAMS' instead of 'noinst_PROGRAMS'

  [ Harald Welte ]
  * update git URLs (git -> https; gitea)

 -- Pau Espin Pedrol <pespin@sysmocom.de>  Wed, 29 Jun 2022 09:32:56 +0200

osmo-trx (1.4.0) unstable; urgency=medium

  [ Pau Espin Pedrol ]
  * Threads.cpp: Fix missing extern C around libosmocore include
  * Drop logging pthread ID
  * Threads: Avoid printing pthread_self()
  * ipc: Makefile.am: Clean LDADD variable
  * Use new stat item/ctr getter APIs
  * detectBurst(): Clear downsampling code path
  * detectBurst(): constify parameter
  * computeCI(): Constify param and pass it as reference
  * computeCI(): Rename verbose repeated getter to constant
  * computeCI(): Constify read-only variable
  * detectGeneralBurst(): Increase log level about clipping to INFO
  * cosmetic: Fix typo in comment
  * computeCI: Document hardcoded multiplier
  * lms: Drop duplicated check
  * lms,uhd: Validate band of RxFreq too
  * lms,uhd: Skip re-assigning same band
  * lms,uhd: Allow changing band between poweroff & poweron

  [ Vadim Yanitskiy ]
  * gitignore: remove non-existing 'doc/manuals/osmomsc-usermanual.xml'
  * ctrl_sock_handle_rx(): fix missing space in LOGCHAN() statement
  * trx_rate_ctr: use thread safe strerror() in device_sig_cb()
  * IPCDevice: use thread safe strerror_r() instead of strerror()
  * IPCDevice: check value returned from select()
  * LMSDevice: LMS_GetDeviceList() may return a negative number

  [ Eric ]
  * add hidden fn adjustment command
  * uhd: ensure configured clock source is actually used
  * vty: printing fn offset should be signed
  * lms: init band

  [ Oliver Smith ]
  * d/patches/build-for-debian8.patch: remove

 -- Pau Espin Pedrol <pespin@sysmocom.de>  Tue, 16 Nov 2021 16:27:26 +0100

osmo-trx (1.3.1) unstable; urgency=medium

  * mark uhddev_ipc.cpp as BUILT_SOURCES

 -- Harald Welte <laforge@osmocom.org>  Sun, 28 Feb 2021 11:32:11 +0100

osmo-trx (1.3.0) unstable; urgency=medium

  [ Pau Espin Pedrol ]
  * Make logging category DLMS generic and reusable for other backends
  * uhd: Use DEVDRV log category and support UHD >=3.11 logging framework
  * uhd: Improve some logging lines printing UHD pretty-print output
  * doc: clarify number of channels on B210 with multi-arfcn enabled
  * radioInterfaceMulti: Fail to tune on freq not following multi-arfcn restrictions
  * doc: Update vty reference xml file
  * lms: Move initialization of field started to constructor
  * lms: Drop unused define
  * smpl_buf: Fix str_code() param and print unknown error val
  * lms: Improve smpl_buf error logging
  * lms: Change radioDevice constructor arg name to avoid masking instance attr
  * lms: Make reference to std::vector unambiguous
  * lms: Move rx_buffers allocation to constructor
  * lms: Store device type specific parameters in one place
  * lms: Make ts_offset and smpl rate coefs device-specific
  * lms: Initial multi-arfcn support
  * contrib/jenkins.sh: Reorder sanity checks
  * debug.h: Avoid printing pthread_t type
  * debug.h: Fix print format of chan in CLOGCHAN
  * cosmetic: fix several typos found by codespell
  * radioDevice: Drop unused RSSI param from readSamples API
  * radioDevice: Drop unused isControl param from WriteSamples API
  * Use OSMO_FD_READ instead of deprecated BSC_FD_READ
  * Transceiver: Fix extra space in RSP NOISELEV error
  * Transceiver: Implement TRXC cmd NOMTXPOWER
  * UHDDevice: Implement getNominalTxPower() based on TxFrequency
  * radioInterface: Operate on real Tx power attenuation rather than on device specific gains
  * UHDDevice: Compute TxGain on UHD API based on expected Tx output power
  * proto_trxd: Fix UndefinedBehaviorSanitizer from ubsan
  * Transceiver: Allow sending negative nominal tx power in RSP NOMTXPOWER
  * LMSDevice: Compute TxGain on LimeSuite API based on expected Tx output power
  * Drop old TxGain APIs from parent radioDevice abstract class
  * {UHD,LMS}Dervice: Log expected resulting TxPower when setting device specific TxGain
  * cosmetic: trx_rate_ctr: Fix whitespace
  * trx_rate_ctr: Fix immediate rescheduling on per-sec thresholds
  * Rename device specific rate counter multi-thread helpers
  * Introduce rate counter tx_stale_bursts
  * TransceiverState: Initialize ctrs field in constructor
  * doc/manuals: Update thread documentation after dropping CTRL sock threads
  * trx_rate_ctr: Fix locking wrong mutex
  * Introduce rate counters to detect issues in received Dl bursts from TRXD
  * Transceiver: Fix race condition obtaining Dl burst from Upper layer
  * Add rate counter for missing Txbursts when scheduled towards the radioInterface
  * Transceiver: Provide initial value for TransceiverState::mFiller in constructor
  * Transceiver: Use already obtained value from Rx msg structure
  * Transceiver: Restrict conditions where FN gaps are detected
  * trx_rate_ctr: Lower some log levels
  * Introduce CTR log category
  * Transceiver: Lower some log levels which have an associated counter
  * Transceiver: Check log level before generating burst str representation
  * Transceiver: Add several rate_ctr for rx error conditions
  * Use new libosmovty cpu sched config features
  * debian: Update debian8 osmo-trx specific patch
  * jenkins.sh: Verify distro-specific patches apply
  * ipc: fix var declaration in for loop
  * Add support for TRXC MUTE command
  * arch: x86: Fix convolve optimizations breaking signal
  * contrib/jenkins: Enable parallel make in make distcheck
  * Transceiver: Pass config struct instead of large list of params
  * Calculate RSSI offset based on RxGain configuration
  * main: generate coredump and exit upon SIGABRT received
  * ipc: Fix wrong reference to BTS in log line
  * ipc-driver-test: Allow setting dir prefix for UD socket
  * radioInterfaceMulti: Fix memory leak upon close()
  * ChannelizerBase: Fix memory leak
  * Threads.cpp: Use already existing gettid wrapper function
  * Replace my_gettid with libosmocore osmo_gettid API
  * tests: Explicitly drop category from log
  * tests: Replace deprecated API log_set_print_filename

  [ Philipp Maier ]
  * debug: use LOGL_NOTICE for log category DDEV
  * doc: do not set the base-port of the trx
  * doc: apply an rssi-offset of 28 by default.
  * doc: switch log levels to notice
  * Transceiver: Log when sending of CLK indications begins
  * vty: add attributes to VTY commands indicating when they apply
  * osmo-trx: add commandline option --vty-ref-xml

  [ Eric ]
  * configure.ac: fix libtool issue  with clang and sanitizer
  * transceiver: check the right vector
  * transceiver: get rid of the ctrl threads
  * add kernel style .clang-format with 120 chars per line limit
  * devices: reset internal smart sample buffers upon stop
  * transceiver: optimize code if optimizations are enabled
  * transceiver: initialize reorder flag so we don't miscount

  [ Harald Welte ]
  * PRBS tool sending PRBS sequence to TRX
  * prbs-tool: Add error simulation capabilities
  * utils: Ensure content of this directory is included in 'make dist'
  * prbs-tool: Don't require C99
  * RPM spec file: Require uhd-firmware for osmo-trx-uhd
  * osmo-trx.spec.in: Use %config(noreplace) to retain current config file
  * Fix build on Debian8
  * [cosmetic] radioInterfaceMulti: More comments
  * [cosmetic] radioIntefaceMulti: Fix whitespace / indent
  * ipc: Use OSMO_FD_* instead of deprecated BSC_FD_*
  * Use osmo_fd_setup() wherever applicable
  * Use osmo_fd_*_{disable,enable}
  * README update
  * manual: Fix typo OsmTRX -> OsmoTRX

  [ Oliver Smith ]
  * contrib: import RPM spec
  * contrib: integrate RPM spec
  * Makefile.am: EXTRA_DIST: debian, contrib/*.spec.in
  * contrib/jenkins: don't build osmo-gsm-manuals
  * configure.ac: set -std=gnu11

  [ Vadim Yanitskiy ]
  * UHDDevice: catch LookupError/IndexError in set{Rx,Tx}Antenna()
  * debian/control: change maintainer to the Osmocom team / mailing list
  * proto_trxd: cosmetic: 'if' is not a function, add space
  * vty: add multi-ARFCN specific warning for chan N > 0
  * radioDevice: fix set_antennas(): consider MULTI_ARFCN mode
  * device/lms: fix: 'trx_vty.h' header requires C linkage
  * device/lms: fix missing semicolon in LMSDevice::assign_band_desc()
  * device/lms: get rid of 'using namespace std'
  * device/common/Makefile.am: remove $(LMS_CFLAGS) from AM_CXXFLAGS
  * main: add --vty-ref-mode, use vty_dump_xml_ref_mode()
  * device: drop unreasonable LIBOSMO{CTRL,VTY}_{CFLAGS,LIBS}
  * Transceiver: use size_t and ARRAY_SIZE() in constructor
  * Transceiver: explicitly init m{Rx,Tx}LowerLoopThread
  * vty: fix documentation for 'swap-channels (disable|enable)'
  * vty: fix documentation for 'egprs (disable|enable)'
  * vty: fix documentation for 'rx-sps (1|4)' and 'tx-sps (1|4)'
  * vty: cosmetic: use VTY_IPV4_CMD in 'bind-ip' / 'remote-ip'
  * vty: fix documentation for 'multi-arfcn (disable|enable)'
  * vty: remove groundless statement about filler type 'dummy'
  * vty: auto-generate cmd and doc strings for cfg_filler_type_cmd
  * vty: fix documentation for 'ext-rach (disable|enable)'
  * main: use logging API to print SIMD info instead of printf()
  * doc/manuals: generate XML VTY reference at build-time
  * vty: fix swapped documentation for 'filler type' command
  * Transceiver: fix integer division in addRadioVector()
  * Transceiver: use proper factor for amplitude scaling
  * Add a (hidden) VTY parameter for Rx/Tx freq. shifting

  [ Eric Wild ]
  * osmo-trx-ipc

  [ Alexander Couzens ]
  * osmo-trx.spec: move ipc-driver-test into package ipc-test

  [ Sylvain Munaut ]
  * sigProcLib: fix C/I computation for 8-PSK modulated bursts

 -- Pau Espin Pedrol <pespin@espeweb.net>  Tue, 23 Feb 2021 14:27:15 +0100

osmo-trx (1.2.0) unstable; urgency=medium

  [ Pau Espin Pedrol ]
  * osmo-trx: log to stderr on signal received
  * Drop old setPriority related code
  * Transceiver: fix segfault during init if IP addr binding fails
  * Transceiver: Check return value when binding IP addr for clock socket
  * Transceiver: Clean up receival of downlink bursts
  * Transceiver: Fix idle ul burst indications being dropped
  * Transceiver: exit process when BTS drops connection
  * Transceiver: Enable EDGE detection only on PDCH timeslots
  * lms: Log available antennas if requested antenna fails
  * device: Use LOGCHAN in set_antennas()
  * Transceiver: Fix logging TN and version
  * Transceiver: Use LOGCHAN in logRxBurst to unify log format
  * Transceiver: Log error condition no burst in pullRadioVector()
  * Transceiver: pullRadioVector(): Fix use of uninitialized value bi->tn
  * Transceiver: Don't stop TRX if pulling from OFF timeslot
  * radioInterface: Rename mRadio to mDevice
  * radioInterfaceMulti: Check equals zero explicitly
  * USRPDevice: Fix setRxGain return on error and getRxGain() returning always 0
  * USRPDevice: Return previous txGain if setting value failed
  * LMSDevice: Return previous txGain/rxGain if setting value failed
  * radioInterface: Remove unusued getRxGain()
  * radioDevice: Introduce getTxGain() API
  * radioInterfaceMulti: Override setTxGain() to avoid chan!=0 calls
  * UHDDevice: Drop unneeded MULTI_ARFCN checks
  * radioInterface{Multi,Resamp}: Fix successful writeSamples() masking underrun from readSamples()
  * radioInterface: Mark setRxGain as virtual
  * Move multi-ARFCN chan amount modification from UHDDevice to parent class
  * radioInterface: Atomically fetch and change underrun variable
  * radioInterfaceMulti: write frequency offset direction (rx/tx) in log line
  * Use new libosmocore logging lock API
  * Transceiver: Fix wrong response upon CMD HANDOVER failure
  * uhd: use value already cached in tmp variable
  * Transceiver.cpp: Introduce and use new logging categories

  [ Timo Jacobus ]
  * Transceiver: Fixed copying of history into and from channelizer buffer.

  [ Alexander Chemeris ]
  * vty: Don't enable random filler bursts automatically with EDGE.
  * vty: Simplify filler burst settings and improve help and readability.

  [ Martin Hauke ]
  * Fix common misspellings and typos

  [ Harald Welte ]
  * trx: exit() on unsupported positional arguments on command line

 -- Pau Espin Pedrol <pespin@sysmocom.de>  Fri, 03 Jan 2020 19:54:00 +0100

osmo-trx (1.1.1) unstable; urgency=medium

  * UNRELEASED

 -- Pau Espin Pedrol <pespin@sysmocom.de>  Thu, 08 Aug 2019 13:00:05 +0200

osmo-trx (1.1.0) unstable; urgency=medium

  [ Sylvain Munaut ]
  * arm/convolve: Fix the vfp4 real convolution for h_len=12
  * convolve: Remove support for step, offset parameters
  * tests: Rework the convolve_test
  * tests: Re-enable the convolve_test by default
  * sigProcLib: Add C/I (Carrier-to-Interference ratio) computation

  [ Vadim Yanitskiy ]
  * VTY: add extended (11-bit) RACH detection toggle
  * doc/configuration.adoc: fix incorrect number of physical RF channels for B210
  * driveTxPriorityQueue(): cosmetic: use proper type for TDMA TN
  * driveTxPriorityQueue(): use trxd_hdr_common for message parsing
  * driveTxPriorityQueue(): check if message header format is supported
  * driveTxPriorityQueue(): enrich logging message
  * trxd_fill_common(): fix TRXD header version coding
  * manuals/configuration.adoc: fix copy-paste error in config example

  [ Pau Espin Pedrol ]
  * osmo-trx: Avoid handling signals after shutdown triggered
  * osmo-trx: Use signalfd to serialize signals in main thread ctx
  * osmo-trx: Check return code of osmo_fd_register
  * lms: flush_recv: alloc buf on stack instead of heap
  * lms: Improve log during flush recv error
  * cosmetic: Threads.h: Remove trailing whitespace
  * Move duplicated thread_enable_cancel to CommonLibs
  * lms: Log underrun/overrun events
  * lms: Remove references to ALERT loglevel
  * lms: Remove unused var m_last_tx_overruns
  * lms: Catch and log dropped packets by HW during recv
  * cosmetic: uhd: Move smpl_buf out of UHDDevice, move UHDDevice class definition to .h
  * uhd: smpl_buf: Drop UHD specifics out back to UHDDevice
  * uhd: smpl_buf: Use TIMESTAMP type in str_status
  * cosmetic: uhd: Use loglevel ERROR instead of ERR
  * uhd: Avoid reallocation of buffers every read
  * Move smpl_buf out of uhd dir to re-use it in other devices
  * device: Drop unused numberRead/numberWritten APIs
  * smpl_buf: Remove unused clk_rt variable
  * smpl_buf: Remove unused clk_rt variable (fixup)
  * smpl_buf: Remove dbg log line with duplicated info
  * Introduce LOGCHAN macro to standarize logging channel info
  * smpl_buf: Move it to device/common and create libdevice_common.la
  * lms: Use smpl_buf to recover from timestamp jumps
  * lms: Fix stream_stats checks with droppedPackets
  * Add rate_ctr support to store/retrieve SDR errors through VTY
  * Rename and move STOP signal from Transceiver to main
  * doc: vty: Update trx_vty_reference.xml
  * lms: Drop unusued variable masterClockRate
  * lms: Fix stream_stats checks with overrun/underrun
  * Add VTY commands to set error ctr thresholds
  * Remove AUTHORS file
  * trx_{vty,rate_ctr}: Set proper license AGPLv3+
  * Introduce structs to encode TRXD packets
  * Transceiver: refactor: gather uplink burst parameters in struct
  * Transceiver: Drop unused rssi_valid struct field
  * Transceiver: Move nbits burst size calculation to pullRadioVector()
  * Transceiver: Move calculation of normalized values (rssiOffset) to pullRadioVector()
  * Transceiver: Move soft bits normalization to pullRadioVector()
  * Transceiver: Drop use of GSM::Time from trx_ul_burst_ind
  * Transceiver: Get rid of SoftVector in struct trx_ul_burst_ind
  * Transceiver: replace UDPSocket with libosmocore socket API
  * Transceiver: Avoid noise calculation formula in 2 branches in pullRadioVector
  * Transceiver: Simplify code on early error return when calling detectAnyBurst
  * Transceiver: pullRadioVector(): Move initialization of var to start of function
  * Transceiver: Support pulling idle frames in pullRadioVector()
  * sigProcLib: detectAnyBurst() family: Use struct to gather all out params
  * sigProcLib: detectAnyBurst(): make TSC used to detect burst available to caller
  * Logger: global Log mutex is now available from C code
  * Transceiver: Move out TRXD socket send code to prepare for TRXDv1
  * Transceiver: Support SETFORMAT command
  * Transceiver: Support TRXD v1
  * Transceiver: Initialize mExtRACH in constructor
  * debian/copyright: Remove non existent radioInterfaceDiversity.cpp from list
  * debian/copyright: Update wrong paths in license list
  * debian/copyright: Add missing file Utils.* to LGPL-2.1+ list
  * cosmetic: Fix trailing whitespace in several files
  * Add SPDX annotation
  * Bind CTRL port to IP addr specified in VTY config
  * Transceiver: Store TRXD version per channel
  * Transceiver: Clean up code passing parameters to threads
  * Remove empty ChangeLog fnd NEWS files
  * Remove unused autogen.sh
  * radioInterface: Clarify how underruns are handled driving a radioDevice
  * usrp1: don't check for non-null underrun pointer
  * jenkins.sh: Workaround libusrp build race conditon
  * lms: Drop rx_underruns rate ctr, add tx_drop_* rate ctr
  * Move inband-signaling-usb documentation to UserManual
  * Move matlab files under utils/matlab
  * Move Transceiver52/README to UserManual
  * Move README.DFEsymbolspaced to utils/matlab
  * Move std_inband.rbf under device/usrp1/ dir
  * Drop old README information, provide new updated README
  * Transceiver: Add missing include netinet/in.h
  * Require newer version of libosmocore to avoid build failure

  [ Tom Tsou ]
  * multi-ARFCN: fix maximum number of carriers limitation

  [ Harald Welte ]
  * use BSC_FD_READ and not OSMO_FD_READ
  * proto_trxd.c: Use bit-wise AND, not boolean AND
  * Timeval: Restore output stream flags after changing them
  * ChannelizerBase: fix initialization of class members
  * CorrelationSequence: fix initialization of class members
  * radioInterface.cpp: Fix missing member initialization of RadioInterface()

  [ Joachim Steiger ]
  * lms: Remove wrong unused code copied from -uhd
  * lms: move LMS_EnableChannel from Start/Stop to Open/Close device
  * lms: move LMS_GetLPFBWRange and LMS_Calibrate calls from open to start
  * lms: add device type detection and device specific gains
  * lms: properly call close if set_antennas() fails, add some comments

  [ Oliver Smith ]
  * debian: create -doc subpackage with pdf manuals
  * contrib/jenkins.sh: run "make maintainer-clean"

  [ Eric Wild ]
  * Add option to set stack size in config file, default == 0 == OS default

  [ Ruben Undheim ]
  * Fix spelling discovered by lintian

 -- Pau Espin Pedrol <pespin@sysmocom.de>  Wed, 07 Aug 2019 21:12:56 +0200

osmo-trx (1.0.0) unstable; urgency=medium

  [ Pau Espin Pedrol ]
  * doc: examples: Add umtrx sample config
  * UHDDevice: Fix setup failure with LimeSuite > 18.04.1
  * examples: Set rt-prio 18 and print file basename
  * lms: Several improvements and compilation/runtime fixes
  * build: Add support for LimeSuite device backend
  * LMSDevice: Set correct values for Max{Tx,Rx}Gain
  * LMSDevice: Fix setup failure with LimeSuite > 18.04.1
  * lms: Makefile.am: Reorder params to fix link issue
  * lms: Check LPBFW to set is within supported range
  * debian: Add package osmo-trx-lms
  * contrib: Add systemd services for all backends
  * debian: Add cfg file examples for osmo-trx-{lms,uhd}
  * Add -V param to print version
  * lms: Allow values diff than 34dB to be set by setRxGain()
  * Use correct paths when installing example files
  * debian: Enable build of osmo-trx-lms
  * debian: Explicitly enable osmo-trx-uhd build
  * configure.ac: Fix typo in with-lms help string
  * vty: Fix typo in gpsdo clock reference type
  * configure.ac: Add --enable-werror option
  * Logger: Disable pthread cancel point inside Logger destructor
  * cosmetic: Fix trailing whitespace
  * radioInterface: forward errors from RadioDevice to Transceiver in recv path
  * lms: Return error on device read timeout
  * osmo-trx: Add osmo_signal to stop whole transceiver chain correctly on error
  * radioInterface: Fix variable storing integer return value
  * configure.ac: Specify default language as C++
  * UHHDDevice: Replace deprecated header uhd/utils/thread_priority.hpp
  * SigProcLib: Use available copyTo Vector API instead of memcopy
  * cosmetic: Fix trailing whitespace in several files
  * radioInterfaceMulti:pullBuffer: Sanely convert float array to complex array
  * Vector: Copy arrays in a sane way for non-trivially copyable types
  * jenkins.sh: Add --enable-werror flag to osmo-trx configure step
  * Install systemd services with autotools
  * Install sample cfg file to /etc/osmocom
  * cosmetic: Use proper whitespace in several for loops
  * Use pthread_setname_np to name threads
  * CommonLibs/Makefile.am: Specify libcommon_la_LIBADD
  * Transciever: Log values causing Tx underrun
  * examples: Use logging level 'set-all' instead of 'all'
  * jenkins.sh: Enable build of osmo-trx-lms
  * ChannelizerBase: Fix ASan alloc-dealloc-mismatch
  * UHDDevice: setRxGain on chan 0 when using multi-arfcn
  * lms: Use LimeSuite.h log level defines instead of hardcoded values
  * lms: Apply LMS->OSMO log level conversion
  * Introduce OsmoTRX manual
  * Introduce chapter trx_if.adoc and add it to OsmoTRX and OsmoBTS
  * trx: Add reference to project wiki page in overfiew section
  * trx: Add Hardware architecture support section
  * trx: Add Hardware device support section
  * osmotrx: Split Device specific section from backend one
  * osmotrx: Write initial documentation for several supported devices
  * osmotrx: configuration: Add section to document multi-arfcn feature
  * osmotrx: Create a common chapter for section documenting backends
  * osmotrx: Introduce code architecture chapter
  * lms: Fix start after stop of device
  * lms: Destroy streams on device stop
  * radioInterface: Fix memleak during close()
  * PointerFIFO: Fix memleak of ListNode
  * lms: Make sure LMS_Close is called when Device is torn down
  * osmo-trx: Change some lines to use libosmocore logging instead of cout
  * lms: Close device on LMS_Init failure
  * SigProcLib: Improve Vector buffer allocation mess
  * lms: Allow setting Tx/RxGain for chan!=0
  * lms: Allow setting Tx/RxFreq for lchan!=0
  * lms: Improve Set{Rx,Tx}{Gain,Freq} logging
  * transceiver: log chan on CTRL command received
  * Add TRXCTRL log category
  * transceiver: Log TRXCTRL iface responses towards osmo-bts-trx
  * lms: Move {under,over}run checks into separate method
  * lms: Do {under,over}run checks even if LMS_RecvStream fails
  * Timeval: passed() returns true if time is equal
  * Timeval: Move implementation to use clock_gettime and timespec
  * Timeval: Move to osmo_clock_gettime
  * TimevalTest: Make test deterministic with fake time
  * lms: Fix build against LimeSuite > 18.10
  * configure.ac: check boost only if USRP1 support is enabled

  [ Vadim Yanitskiy ]
  * trx_vty.c: fix: use CONFIG_NODE as parent by default
  * device/lms/LMSDevice.cpp: fix compilation warning
  * sigProcLib: introduce both TS1 and TS2 RACH synch. sequences
  * sigProcLib: add a CorrType for extended (11-bit) RACH

  [ Harald Welte ]
  * Initial work towards direct LimeSuite support in OsmoTRX
  * update .gitignore to include osmo-trx-lms
  * LMSDevice: Call LMS_Init() before setting sample rate
  * LMSDevice: Print sample rate range + actual sample rate after setting it
  * LMSDevice: Typo fix: s/Internal/External
  * LMSDevice: Set low-pass filters to smallest possible option
  * LMSDevice: Fix initial timestamp offset of 2500
  * LMS_Device: Set ts_offset to 0.
  * LMSDevice: Reduce Rx logging verbosity: Only log unexpected timestamps
  * move set_antennas() from UHD to generic radioDevice base class
  * lms: Fix support for rx_paths / tx_paths
  * lms: Call set_antennas() during open() method
  * radioDevice: Move tx_sps from derived into base class
  * radioDevice: better encapsulation in base class
  * lms: Fix coding style
  * lms: Fail in case of unsupported configuration
  * usrp1: Fail in case of unsupported configuration
  * Fix config file saving of {tx,rx}-path VTY config strings
  * logging: Introduce new "DDEV" category for device-specific code
  * update git-version-gen to generate proper version numbers
  * ensure well-formed example config files
  * SocketsTest.testReaderIP(): Zero terminate received buffer
  * trx_validate_config(): Fix validation of rx_sps
  * vty-ref: Update URI of docbook 5.0 schema
  * lms: User correct scale factor for transmit samples
  * lms: Set Rx gain to midpoint, as comment suggests.
  * usrp1: Remove uninitialized skipRx logic
  * usrp1: Fix formatting of log message (missing space)
  * cosmetic: Don't call the SDR "USRP" in error message

  [ Zydrunas Tamosevicius ]
  * lms: Use same timestamp offset like when using LimeSDR via UHD
  * lms: Reduce log level of "send buffer of len ..."
  * lms: fix LMS_StartStream() handling for multiple channels
  * lms: Reduce Rx gain from 47 to 34 dB

  [ Alexander Couzens ]
  * debian: add patches for debian8

  [ Oliver Smith ]
  * Add long parameters (--help, --version, ...)
  * build manuals moved here from osmo-gsm-manuals.git
  * Fix DISTCHECK_CONFIGURE_FLAGS override
  * contrib/jenkins.sh: build and publish manuals
  * jenkins.sh: run "make distcheck"
  * contrib: fix makedistcheck with disabled systemd
  * osmo-trx.cpp: move comma_delimited_to_vector() to Utils.cpp
  * LMSDevice: make use of dev-args in osmo-trx.cfg
  * LMSDeviceTest: fix link errors on OBS

  [ Neels Hofmeyr ]
  * Importing history from osmo-gsm-manuals.git

  [ d0gtail ]
  * UHDDevice: log exception information on device open failure

 -- Harald Welte <laforge@gnumonks.org>  Sun, 20 Jan 2019 19:35:04 +0100

osmo-trx (0.4.0) unstable; urgency=medium

  [ Neels Hofmeyr ]
  * jenkins: use osmo-clean-workspace.sh before and after build

  [ Harald Welte ]
  * SocketsTest: Fix printing of non-nul-terminated string
  * Revert "debian: Remove osmo-trx-usrp1 until we can build libusrp1.deb"
  * debian/control: Remove "Maintainer" from binary package section
  * debian/rules: Make sure we always require libusrp
  * debian: Ensure USRP1 firmware is part of osmo-trx-usrp1
  * debian/control: Add build dependency to libusrp-dev
  * update .gitignore for new executable names
  * osmo-trx: s/GSM Core Address/GSM BTS Address/

  [ Piotr Krysik ]
  * UHDDevice.cpp: add USRP B205mini support

  [ Max ]
  * Mark release target as virtual
  * Remove outdated references to OpenBTS
  * Remove unused headers
  * Update installation instructions
  * Update legal disclaimer
  * Update license notes
  * tests: null-terminate buffer

  [ Pau Espin Pedrol ]
  * cosmetic: Remove trailing whitespace
  * Logger: Stop using Log.Alarms.Max from config
  * Logger: Stop using Log.File and Log.Level from config
  * Drop use of ConfigurationTable gConfig
  * Remove Configuration module and libsqlite dependency
  * cosmetic: AUTHORS: fix trailing whitespace
  * Set up GNU Autotest infrastructure
  * tests: InterThread: adapt to have reproducible output and enable autotest
  * tests: Timeval: adapt to have reproducible output and enable autotest
  * tests: Log: adapt to have reproducible output and enable autotest
  * Sockets.cpp: Fix initialization of UDD socket
  * tests: Sockets: adapt to have reproducible output and enable autotest
  * utils/convolvtest: Remove uneeded libosmocore dependency
  * Move ARCH_LA to Makefile.common
  * tests: Migrate convtest util to autotest infrastructure
  * arm/convert.c: Fix compilation error
  * arm/convert.c: Add missing convert_init implementation
  * .gitignore: Add missing test related files
  * Remove UDDSocket class
  * tests: SocketTests: Pick OS-assigned instead of setting one manually
  * tests: SocketsTest: Avoid hang forever if test fails
  * tests: SocketsTest: Fail test on write fail
  * tests: TimevalTest: refactor and avoid double comparison
  * contrib/jenkins.sh: Use qemu+proot+debootstrap to run tests with ARM instruction set
  * tests: convolve: Disable due to difference in output in different archs
  * Remove unneeded libdl dependency
  * Fix whitespace
  * Add support to set Rx/TxAntenna
  * UHDDevice: Initialize async_event_thrd in constructor
  * Logger: Drop unused gLogEarly
  * Logger: Remove unused logging macros
  * Logger: get rid of alarm APIs
  * Logger: Drop syslog support
  * Logger: Drop support to log into file
  * Logger: Remove unused includes
  * Logger: Remove gLogToConsole flag
  * configure.ac: Check for pkg-config
  * Depend on libosmocore
  * osmo-trx: set up signals using libosmocore helpers
  * osmo-trx: Set up talloc ctx
  * debian: Depend on libtalloc and libosmocore
  * Add initial support for logging, vty, ctrl
  * Logger: Use libosmocore logging system
  * osmo-trx.cpp: Move trx start and stop to helper functions
  * Move enums required by VTY to a separate header
  * vty: Implement VTY cfg parsing for current parameters
  * doc: Add sample cfg file for LimeSDR
  * osmo-trx: Use VTY cfg structures while still allowing cmd line options
  * osmo-trx: Re-introduce -l cmd line parameter
  * Makefile.am: Avoid using subdir if arch is not required
  * Build Transceiver52M/common as an .la lib
  * use osmo_init_logging2()
  * tests: Makefile.am: Fix typo in include path
  * configure.ac: Add --enable-sanitize option
  * Move arch specific fiels to arch subdir
  * Move device specific files to device subdir
  * Change configure define USRP1 to DEVICE_USRP1
  * Move device specific code out of radioInterface
  * Transceiver: Move device specific code to radioDevice class
  * Build one osmo-trx binary for each device support enabled
  * Logger: Print correct source file and line number
  * Transceiver: log timing info of stale bursts
  * build: Fix make distcheck
  * build: More OBS build failure fixes
  * jenkins.sh: Enable build of osmo-trx-usrp1
  * debian: Remove osmo-trx-usrp1 until we can build libusrp1.deb
  * debian: Fix OBS build
  * build: Fix OBS build for ARM
  * git-version-gen: Take into account tags not in master

  [ Alexander Huemer ]
  * Unbreak `./configure --with-usrp1` build
  * Fix USRP1 build with support for setting Rx/TxAntenna

  [ Alexander Couzens ]
  * jenkins.sh: fix the download url if the qemu image wasn't setup
  * jenkins.sh: cleanup always the workspace
  * jenkins.sh: change qemu-img default location to $HOME/qemu-img instead of /opt/qemu-img

  [ Vadim Yanitskiy ]
  * Transceiver.cpp: use a define for the MAX_PACKET_LENGTH
  * Transceiver.cpp: properly zero-terminate received commands
  * Transceiver.cpp: use pointer arithmetics for CMD parsing
  * Transceiver.cpp: fix incorrect format string for SETTSC
  * Transceiver.cpp: prevent out-of-range array access

  [ Martin Hauke ]
  * configure.ac: Fix typo

  [ Philipp Maier ]
  * doc: add example config for usrp B200 series

 -- Pau Espin Pedrol <pespin@sysmocom.de>  Thu, 03 May 2018 16:23:29 +0200

osmo-trx (0.2.0) unstable; urgency=medium

  [ Alexander Chemeris ]
  * EDGE: Add support for UmTRX.
  * Common: Get rid of a compilation warning.
  * Common: Make sure gLogEarly() log to the same facilities as the normal log.
  * transceiver: Properly handle MAXDLY.
  * transceiver: Add an option to generate random Access Bursts.
  * osmo-trx: Output Rx SPS as a part of configuration output.
  * transceiver: Do not pass transceiver state struct to function where it's not used.
  * makefile: Fix build from an external path.
  * radioDevice: GSMRATE macro must have parentheses around its definition.
  * uhd: Fix comment.
  * radioInterface: Initialize power scale with a meaningful default.
  * transceiver: Log channel number in DEBUG output of demoded bursts.
  * transceiver: Add an option to emulate a RACH delay in random filler mode.
  * UHD: Initial LimeSDR support.
  * CommonLibs: Remove unused files.
  * sigProcLib: Typo sybols -> symbols
  * radioBuffer: Remove extra ; at the end of inline function definitions.
  * sigProcLib: Fix documentation, sync argument names in .cpp and .h files.
  * sigProcLib: make energyDetect() simpler by returning actual energy.
  * sigProcLib: Rename demodulateBurst() to demodGmskBurst() for clarity.
  * sigProcLib: Slice SoftVector instead of signalVector for GMSK demod.
  * Call vectorSlicer() right before packing bits for transmission to osmo-bts.
  * CommonLibs: Print soft bits with less confidence to console when printing a soft vector.
  * BitVector: Remove convolutional codec - we don't use it in osmo-trx.
  * BitVector: Convert SoftVector from 0..1 to -1..+1 soft bits.
  * signalVector: Implement segment().
  * vector: Introduce segmentMove() method to move data inside of a vector.
  * vector: Introduce shrink() function to shrink vector size without loosing data.
  * Move CorrType type from Transceiver to sigProcLib.
  * sigProcLib: rename signalError type to SignalError.
  * Move Transceiver::detectBurst() to sigProcLib to make it reusable.
  * Move BURST_THRESH from Transceiver.cpp to sigProcLib.h to make it reusable.
  * sigProcLib: Add operator<< to print CorrType to a string.
  * sigProcLib.h: Fix whitespaces. No non-whitespace changes.
  * Move Transceiver::demodulate() to sigProcLib to make it reusable.
  * sigProcLib: constify signalVector arguments for detectBurst() functions.
  * sigProcLib: Constify demodulation functions burst argument.
  * sigProcLib: Fix number of tail bits in random Normal Bursts and zero Stealing Bits.
  * Configuration: Variables allocated with 'new' must be freed with 'delete'.
  * BitVector: Remove Generator class.
  * PRBS: a Pseudo-random binary sequence (PRBS) generator class.

  [ Tom Tsou ]
  * EDGE: Fix USRP B210 device support
  * uhd: Correct timing alignment in 8-PSK and GMSK downlink bursts
  * EDGE: Fix demodulation slicer input
  * common: Restrict UDP binding to localhost only
  * common: Add mandatory length field to UDP receive calls
  * uhd: Update default E3XX settings
  * uhd: Set default Tx sampling to 4 sps
  * uhd: Make device offset check a private method
  * uhd: Set minimum UHD version requirement for E3XX
  * sigproc: Expand RACH, TSC, and EDGE correlation windows
  * transceiver: Do not report error on SETTSC when radio is on
  * transceiver: Add Rx samples-per-symbol option
  * radioInterface: Convert diversity argument to general type
  * iface: Add inner ring-buffer implementation
  * mcbts: Add multi-ARFCN channelizing filters
  * mcbts: Add multi-ARFCN radio support
  * sigproc: Adjust burst detection threshold criteria
  * egprs: Enable 8-PSK length vectors on the Tx interface
  * egprs: Enable 8-PSK burst detection when EDGE is enabled
  * transceiver: Remove HANDOVER warnings
  * mcbts: Allow out of order channel setup
  * radioInterface: Fix multi-channel buffer index bug
  * uhd: Add command line option for GPS reference
  * transceiver: Fix mixed GSMK / 8-PSK transmission
  * transceiver: Fix 4 SPS receive TOA value
  * sigproc: Fix missing 8-PSK tail symbols
  * uhd: Update USRP2/N200/N210 for 4 SPS Rx
  * sigproc: Match differential GMSK start/end bits to tail bits
  * uhd: Add missing B200 sample timing for 4 SPS receive
  * transceiver: Fix command build warning
  * uhd: Set minimum supported version to 3.9.0
  * uhd: Add X300 sample timing for 4 SPS
  * Revert "uhd: Set minimum supported version to 3.9.0"
  * uhd: Add support for UHD-3.11 logging control
  * uhd: Increase MC-BTS FPGA clock rate to 51.2 MHz
  * Resampler: Fix initialization return checking
  * sigProcLib: Remove unreachable code and no-effect checks
  * sigProcLib: Check return status on downsampling
  * sigProcLib: Fix negative value check on unsigned value
  * Resampler: Fix non-array delete for filter taps
  * Transceiver: Remove unsigned negative compares
  * Configuration: Fix const and signedness compile warnings
  * config: Remove OpenBTS style sqlite configuration
  * radioInterface: Remove UmTRX 'diversity' option
  * build: Require and check for gcc C++11 support
  * uhd: Use map container for for device parameter access
  * sigProcLib: Remove unused functions from public interface
  * uhd: Add non-UmTRX channel swap support
  * uhd: Fix Tx-RX timing offset setting
  * uhd: Fix USRP2/N200/N210 device detection
  * transceiver: Fix POWEROFF crash on USRP2/N200/X300 devices
  * sigProcLib: Fix complex/real vector flag in Laurent modulator
  * sigProcLib: Remove heap based signal vector allocations
  * common: Declare explicit Vector move constructor
  * sigProcLib: Remove trigonometric tables
  * sigProcLib: Use explicit NaN check in sinc table generation
  * sigProcLib: Replace dynamically allocated resampling buffers
  * sigProcLib: Specify standard namespace for isnan()
  * uhd: Always specify samples-per-symbol for device lookup
  * LimeSDR: set approximate tx offset value to make GSM work

  [ Neels Hofmeyr ]
  * add basic .gitignore
  * configure.ac: check for boost/config.hpp header
  * The INSTALL file is being overwritten by autoreconf, but it is committed as empty file. As a result, the INSTALL file always shows as modified. Instead, remove INSTALL from git and ignore it.
  * add contrib/jenkins.sh, for gerrit build bot

  [ pierre.baudry ]
  * transceiver: Fix mismatched allocations and deallocations

  [ Holger Hans Peter Freyther ]
  * debian: Require fftw3 header files for osmo-trx

  [ Max ]
  * Add gerrit settings
  * Integrate Debian packaging changes
  * Remove embedded sqlite3
  * Fix building against sqlite3
  * Add autoconf-archive to dependencies
  * debian: remove obsolete dependency
  * deb: remove unused dependency
  * Remove redundant explicit dependency
  * Use release helper from libosmocore

  [ Ruben Undheim ]
  * Do not embed sqlite3 when building

  [ Philipp Maier ]
  * buildenv: Turn off native architecture builds
  * cosmetic: Make parameter lists uniform
  * Add test program to verify convolution implementation
  * ssedetect: Add runtime CPU detection
  * cosmetic: remove code duplication
  * buildenv: Make build CPU invariant
  * buildenv: Split up SSE3 and SSE4.1 code
  * cosmetic: Add info about SSE support

  [ Vadim Yanitskiy ]
  * buildenv: correct the ax_sse macro description
  * buildenv: actually strip unused cpuid functionality
  * buildenv: fix build on systems without SIMD support
  * buildenv: cosmetic changes
  * buildenv: check for __builtin_cpu_supports call support
  * ssedetect: call __builtin_cpu_supports() only if supported

  [ Pau Espin Pedrol ]
  * cosmetic: transciever: Remove trailing whitespaces
  * transceiver: Avoid sending clock indications when trx is not powered on
  * Add -j option to bind to specific address

  [ ignasj ]
  * LimeSDR: Change device detection to work with USB and PCIe versions
  * LimeSDR: change tx window type to TX_WINDOW_FIXED
  * LimeSDR: Fix sample value range

  [ Harald Welte ]
  * Add '-t' command line option to enable SCHED_RR
  * Import git-version-gen and update AC_INIT()

 -- Harald Welte <laforge@gnumonks.org>  Sat, 28 Oct 2017 17:52:32 +0200

osmo-trx (0.1.9) trusty; urgency=medium

  * Ask Ivan, really

 -- Kirill Zakharenko <earwin@gmail.com>  Thu, 16 Jul 2015 12:13:46 +0000

osmo-trx (0.1.8) precise; urgency=low

     * Initial release (Closes: #nnnn) <nnnn is the bug number of your ITP

 -- Ivan Klyuchnikov <Ivan.Kluchnikov@fairwaves.ru>  Sun, 9 Mar 2014 14:10:10 +0400
