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
