Accepting request 628721 from home:scarabeus_iv:branches:hardware:sdr

- Apply upstream patch to fix ambiguous license situation:
  * codec2-licensed-stuff.patch

OBS-URL: https://build.opensuse.org/request/show/628721
OBS-URL: https://build.opensuse.org/package/show/hardware:sdr/codec2?expand=0&rev=13
This commit is contained in:
Ismail Dönmez 2018-08-12 12:31:53 +00:00 committed by Git OBS Bridge
parent 74a8055461
commit dabdbd847d
3 changed files with 503 additions and 0 deletions

495
codec2-licensed-stuff.patch Normal file
View File

@ -0,0 +1,495 @@
Index: src/CMakeLists.txt
===================================================================
--- src/CMakeLists.txt.orig
+++ src/CMakeLists.txt
@@ -378,8 +378,8 @@ target_link_libraries(drs232 ${CMAKE_REQ
add_executable(drs232_ldpc drs232_ldpc.c)
target_link_libraries(drs232_ldpc ${CMAKE_REQUIRED_LIBRARIES} codec2)
-add_definitions(-DHORUS_L2_RX -DINTERLEAVER -DSCRAMBLER)
-add_executable(horus_demod horus_demod.c horus_api.c horus_l2.c fsk.c kiss_fft.c)
+add_definitions(-DHORUS_L2_RX -DINTERLEAVER -DSCRAMBLER -DRUN_TIME_TABLES)
+add_executable(horus_demod horus_demod.c horus_api.c horus_l2.c golay23.c fsk.c kiss_fft.c)
target_link_libraries(horus_demod ${CMAKE_REQUIRED_LIBRARIES})
install(TARGETS codec2 EXPORT codec2-config
Index: src/golay23.c
===================================================================
--- src/golay23.c.orig
+++ src/golay23.c
@@ -53,7 +53,7 @@ static int inited = 0;
//since we want to avoid bit-reversing inside syndrome() we bit-reverse the polynomial instead
#define GOLAY_POLYNOMIAL 0xC75 //AE3 reversed
-static int syndrome(int c) {
+int golay23_syndrome(int c) {
//could probably be done slightly smarter, but works
int x;
for (x = 11; x >= 0; x--) {
@@ -85,7 +85,7 @@ static int popcount(unsigned int c) {
#if defined(NO_TABLES) || defined(RUN_TIME_TABLES)
static int golay23_encode_no_tables(int c) {
c <<= 11;
- return syndrome(c) | c;
+ return golay23_syndrome(c) | c;
}
#endif
@@ -101,7 +101,7 @@ static int golay23_decode_no_tables(int
for (x = 0; x < 23; x++) {
int t;
- int s = syndrome(c);
+ int s = golay23_syndrome(c);
if (popcount(s) <= 3) {
return unrotate(c ^ s, x) & 0xFFF;
@@ -109,7 +109,7 @@ static int golay23_decode_no_tables(int
for (t = 0; t < 23; t++) {
int c2 = c ^ (1 << t);
- int s = syndrome(c2);
+ int s = golay23_syndrome(c2);
if (popcount(s) <= 2) {
return unrotate(c2 ^ s, x) & 0xFFF;
@@ -138,13 +138,13 @@ void golay23_init(void) {
//1-bit errors
for (x = 0; x < 23; x++) {
int d = 1<<x;
- decoding_table[syndrome(d)] = d;
+ decoding_table[golay23_syndrome(d)] = d;
}
//2-bit errors
for (x = 0; x < 22; x++) {
for (y = x+1; y < 23; y++) {
int d = (1<<x) | (1<<y);
- decoding_table[syndrome(d)] = d;
+ decoding_table[golay23_syndrome(d)] = d;
}
}
//3-bit errors
@@ -152,7 +152,7 @@ void golay23_init(void) {
for (y = x+1; y < 22; y++) {
for (z = y+1; z < 23; z++) {
int d = (1<<x) | (1<<y) | (1<<z);
- decoding_table[syndrome(d)] = d;
+ decoding_table[golay23_syndrome(d)] = d;
}
}
}
@@ -183,7 +183,7 @@ int golay23_decode(int c) {
return unrotate(golay23_decode_no_tables(c), 11);
#else
//message is shifted 11 places left in the return value
- return c ^ decoding_table[syndrome(c)];
+ return c ^ decoding_table[golay23_syndrome(c)];
#endif
}
Index: src/golay23.h
===================================================================
--- src/golay23.h.orig
+++ src/golay23.h
@@ -36,6 +36,7 @@ void golay23_init(void);
int golay23_encode(int data);
int golay23_decode(int received_codeword);
int golay23_count_errors(int recd_codeword, int corrected_codeword);
+int golay23_syndrome(int c);
#ifdef __cplusplus
}
Index: src/horus_l2.c
===================================================================
--- src/horus_l2.c.orig
+++ src/horus_l2.c
@@ -9,9 +9,6 @@
data and parity bits, pre-pends a Unique Word for modem sync.
Caller is responsible for providing storage for output packet.
- [ ] code based interleaver
- [ ] test correction of 1,2 & 3 error patterms
-
1/ Unit test on a PC:
$ gcc horus_l2.c -o horus_l2 -Wall -DHORUS_L2_UNITTEST
@@ -29,24 +26,24 @@
2/ To build with just the tx function, ie for linking with the payload
firmware:
- $ gcc horus_l2.c -c -Wall
+ $ gcc horus_l2.c golay23.c -c -Wall
By default the RX side is #ifdef-ed out, leaving the minimal amount
of code for tx.
3/ Generate some tx_bits as input for testing with fsk_horus:
- $ gcc horus_l2.c -o horus_l2 -Wall -DGEN_TX_BITS -DSCRAMBLER
+ $ gcc horus_l2.c golay23.c -o horus_l2 -Wall -DGEN_TX_BITS -DSCRAMBLER
$ ./horus_l2
$ more ../octave/horus_tx_bits_binary.txt
4/ Unit testing interleaver:
- $ gcc horus_l2.c -o horus_l2 -Wall -DINTERLEAVER -DTEST_INTERLEAVER -DSCRAMBLER
+ $ gcc horus_l2.c golay23.c -o horus_l2 -Wall -DINTERLEAVER -DTEST_INTERLEAVER -DSCRAMBLER
5/ Compile for use as decoder called by fsk_horus.m and fsk_horus_stream.m:
- $ gcc horus_l2.c -o horus_l2 -Wall -DDEC_RX_BITS -DHORUS_L2_RX
+ $ gcc horus_l2.c golay23.c -o horus_l2 -Wall -DDEC_RX_BITS -DHORUS_L2_RX
\*---------------------------------------------------------------------------*/
@@ -56,22 +53,23 @@
#include <string.h>
#include <stdint.h>
#include "horus_l2.h"
+#include "golay23.h"
+
#ifdef HORUS_L2_UNITTEST
#define HORUS_L2_RX
#endif
-#define RUN_TIME_TABLES
-
static char uw[] = {'$','$'};
/* Function Prototypes ------------------------------------------------*/
-int32_t get_syndrome(int32_t pattern);
-void golay23_init(void);
-int golay23_decode(int received_codeword);
+#ifdef INTERLEAVER
void interleave(unsigned char *inout, int nbytes, int dir);
+#endif
+#ifdef SCRAMBLER
void scramble(unsigned char *inout, int nbytes);
+#endif
/* Functions ----------------------------------------------------------*/
@@ -177,7 +175,7 @@ int horus_l2_encode_tx_packet(unsigned c
#ifdef DEBUG0
fprintf(stderr, " ningolay: %d ingolay: 0x%04x\n", ningolay, ingolay);
#endif
- golayparity = get_syndrome(ingolay<<11);
+ golayparity = golay23_syndrome(ingolay<<11);
ingolay = 0;
#ifdef DEBUG0
@@ -219,7 +217,7 @@ int horus_l2_encode_tx_packet(unsigned c
if (ningolay % 12) {
ingolay >>= 1;
- golayparity = get_syndrome(ingolay<<12);
+ golayparity = golay23_syndrome(ingolay<<12);
#ifdef DEBUG0
fprintf(stderr, " ningolay: %d ingolay: 0x%04x\n", ningolay, ingolay);
fprintf(stderr, " golayparity: 0x%04x\n", golayparity);
@@ -292,8 +290,10 @@ void horus_l2_decode_rx_packet(unsigned
unsigned char *pin = input_rx_data;
int ninbit, ingolay, ningolay, paritybyte, nparitybits;
int ninbyte, shift, inbit, golayparitybit, i, outbit, outbyte, noutbits, outdata;
+ #if defined(SCRAMBLER) || defined(INTERLEAVER)
int num_tx_data_bytes = horus_l2_get_num_tx_data_bytes(num_payload_data_bytes);
-
+ #endif
+
/* optional scrambler and interleaver - we dont interleave UW */
#ifdef SCRAMBLER
@@ -878,291 +878,6 @@ int main(void) {
}
#endif
-/*---------------------------------------------------------------------------*\
-
- GOLAY FUNCTIONS
-
-\*---------------------------------------------------------------------------*/
-
-/* File: golay23.c
- * Title: Encoder/decoder for a binary (23,12,7) Golay code
- * Author: Robert Morelos-Zaragoza (robert@spectra.eng.hawaii.edu)
- * Date: August 1994
- *
- * The binary (23,12,7) Golay code is an example of a perfect code, that is,
- * the number of syndromes equals the number of correctable error patterns.
- * The minimum distance is 7, so all error patterns of Hamming weight up to
- * 3 can be corrected. The total number of these error patterns is:
- *
- * Number of errors Number of patterns
- * ---------------- ------------------
- * 0 1
- * 1 23
- * 2 253
- * 3 1771
- * ----
- * Total number of error patterns = 2048 = 2^{11} = number of syndromes
- * --
- * number of redundant bits -------^
- *
- * Because of its relatively low length (23), dimension (12) and number of
- * redundant bits (11), the binary (23,12,7) Golay code can be encoded and
- * decoded simply by using look-up tables. The program below uses a 16K
- * encoding table and an 8K decoding table.
- *
- * For more information, suggestions, or other ideas on implementing error
- * correcting codes, please contact me at (I'm temporarily in Japan, but
- * below is my U.S. address):
- *
- * Robert Morelos-Zaragoza
- * 770 S. Post Oak Ln. #200
- * Houston, Texas 77056
- *
- * email: robert@spectra.eng.hawaii.edu
- *
- * Homework: Add an overall parity-check bit to get the (24,12,8)
- * extended Golay code.
- *
- * COPYRIGHT NOTICE: This computer program is free for non-commercial purposes.
- * You may implement this program for any non-commercial application. You may
- * also implement this program for commercial purposes, provided that you
- * obtain my written permission. Any modification of this program is covered
- * by this copyright.
- *
- * == Copyright (c) 1994 Robert Morelos-Zaragoza. All rights reserved. ==
- */
-
-#include <assert.h>
-#include <stdio.h>
-#include <stdlib.h>
-#define X22 0x00400000 /* vector representation of X^{22} */
-#define X11 0x00000800 /* vector representation of X^{11} */
-#define MASK12 0xfffff800 /* auxiliary vector for testing */
-#define GENPOL 0x00000c75 /* generator polinomial, g(x) */
-
-/* Global variables:
- *
- * pattern = error pattern, or information, or received vector
- * encoding_table[] = encoding table
- * decoding_table[] = decoding table
- * data = information bits, i(x)
- * codeword = code bits = x^{11}i(x) + (x^{11}i(x) mod g(x))
- * numerr = number of errors = Hamming weight of error polynomial e(x)
- * position[] = error positions in the vector representation of e(x)
- * recd = representation of corrupted received polynomial r(x) = c(x) + e(x)
- * decerror = number of decoding errors
- * a[] = auxiliary array to generate correctable error patterns
- */
-
-#ifdef HORUS_L2_RX
-static int inited = 0;
-
-#ifdef RUN_TIME_TABLES
-static int encoding_table[4096], decoding_table[2048];
-#else
-#include "golayenctable.h"
-#include "golaydectable.h"
-#endif
-
-#ifdef RUN_TIME_TABLES
-static int arr2int(int a[], int r)
-/*
- * Convert a binary vector of Hamming weight r, and nonzero positions in
- * array a[1]...a[r], to a long integer \sum_{i=1}^r 2^{a[i]-1}.
- */
-{
- int i;
- long mul, result = 0, temp;
-
- for (i=1; i<=r; i++) {
- mul = 1;
- temp = a[i]-1;
- while (temp--)
- mul = mul << 1;
- result += mul;
- }
- return(result);
-}
-#endif
-#endif
-
-#ifdef HORUS_L2_RX
-void nextcomb(int n, int r, int a[])
-/*
- * Calculate next r-combination of an n-set.
- */
-{
- int i, j;
-
- a[r]++;
- if (a[r] <= n)
- return;
- j = r - 1;
- while (a[j] == n - r + j)
- j--;
- for (i = r; i >= j; i--)
- a[i] = a[j] + i - j + 1;
- return;
-}
-#endif
-
-int32_t get_syndrome(int32_t pattern)
-/*
- * Compute the syndrome corresponding to the given pattern, i.e., the
- * remainder after dividing the pattern (when considering it as the vector
- * representation of a polynomial) by the generator polynomial, GENPOL.
- * In the program this pattern has several meanings: (1) pattern = infomation
- * bits, when constructing the encoding table; (2) pattern = error pattern,
- * when constructing the decoding table; and (3) pattern = received vector, to
- * obtain its syndrome in decoding.
- */
-{
- int32_t aux = X22;
-
- if (pattern >= X11)
- while (pattern & MASK12) {
- while (!(aux & pattern))
- aux = aux >> 1;
- pattern ^= (aux/X11) * GENPOL;
- }
- return(pattern);
-}
-
-#ifdef HORUS_L2_RX
-
-/*---------------------------------------------------------------------------*\
-
- FUNCTION....: golay23_init()
- AUTHOR......: David Rowe
- DATE CREATED: 3 March 2013
-
- Call this once when you start your program to init the Golay tables.
-
-\*---------------------------------------------------------------------------*/
-
-void golay23_init(void) {
-#ifdef RUN_TIME_TABLES
- int i;
- long temp;
- int a[4];
- int pattern;
-
- /*
- * ---------------------------------------------------------------------
- * Generate ENCODING TABLE
- *
- * An entry to the table is an information vector, a 32-bit integer,
- * whose 12 least significant positions are the information bits. The
- * resulting value is a codeword in the (23,12,7) Golay code: A 32-bit
- * integer whose 23 least significant bits are coded bits: Of these, the
- * 12 most significant bits are information bits and the 11 least
- * significant bits are redundant bits (systematic encoding).
- * ---------------------------------------------------------------------
- */
- for (pattern = 0; pattern < 4096; pattern++) {
- temp = pattern << 11; /* multiply information by X^{11} */
- encoding_table[pattern] = temp + get_syndrome(temp);/* add redundancy */
- }
-
- /*
- * ---------------------------------------------------------------------
- * Generate DECODING TABLE
- *
- * An entry to the decoding table is a syndrome and the resulting value
- * is the most likely error pattern. First an error pattern is generated.
- * Then its syndrome is calculated and used as a pointer to the table
- * where the error pattern value is stored.
- * ---------------------------------------------------------------------
- *
- * (1) Error patterns of WEIGHT 1 (SINGLE ERRORS)
- */
- decoding_table[0] = 0;
- decoding_table[1] = 1;
- temp = 1;
- for (i=2; i<= 23; i++) {
- temp *= 2;
- decoding_table[get_syndrome(temp)] = temp;
- }
- /*
- * (2) Error patterns of WEIGHT 2 (DOUBLE ERRORS)
- */
- a[1] = 1; a[2] = 2;
- temp = arr2int(a,2);
- decoding_table[get_syndrome(temp)] = temp;
- for (i=1; i<253; i++) {
- nextcomb(23,2,a);
- temp = arr2int(a,2);
- decoding_table[get_syndrome(temp)] = temp;
- }
- /*
- * (3) Error patterns of WEIGHT 3 (TRIPLE ERRORS)
- */
- a[1] = 1; a[2] = 2; a[3] = 3;
- temp = arr2int(a,3);
- decoding_table[get_syndrome(temp)] = temp;
- for (i=1; i<1771; i++) {
- nextcomb(23,3,a);
- temp = arr2int(a,3);
- decoding_table[get_syndrome(temp)] = temp;
- }
-#endif
- inited = 1;
-}
-
-/*---------------------------------------------------------------------------*\
-
- FUNCTION....: golay23_encode()
- AUTHOR......: David Rowe
- DATE CREATED: 3 March 2013
-
- Given 12 bits of data retiurns a 23 bit codeword for transmission
- over the channel.
-
-\*---------------------------------------------------------------------------*/
-
-int golay23_encode(int data) {
- assert(inited);
- assert(data <= 0xfff);
-
- //printf("data: 0x%x\n", data);
- return encoding_table[data];
-}
-
-/*---------------------------------------------------------------------------*\
-
- FUNCTION....: golay23_decode()
- AUTHOR......: David Rowe
- DATE CREATED: 3 March 2013
-
- Given a 23 bit received codeword, returns the 12 bit corrected data.
-
-\*---------------------------------------------------------------------------*/
-
-int golay23_decode(int received_codeword) {
- assert(inited);
- assert((received_codeword < (1<<23)) && (received_codeword >= 0));
-
- //printf("syndrome: 0x%x\n", get_syndrome(received_codeword));
- return received_codeword ^= decoding_table[get_syndrome(received_codeword)];
-}
-
-int golay23_count_errors(int recd_codeword, int corrected_codeword)
-{
- int errors = 0;
- int diff, i;
-
- diff = recd_codeword ^ corrected_codeword;
- for(i=0; i<23; i++) {
- if (diff & 0x1)
- errors++;
- diff >>= 1;
- }
-
- return errors;
-}
-
-#endif
-
// from http://stackoverflow.com/questions/10564491/function-to-calculate-a-crc16-checksum
unsigned short horus_l2_gen_crc16(unsigned char* data_p, unsigned char length) {

View File

@ -1,3 +1,9 @@
-------------------------------------------------------------------
Sat Aug 11 07:14:59 UTC 2018 - tchvatal@suse.com
- Apply upstream patch to fix ambiguous license situation:
* codec2-licensed-stuff.patch
-------------------------------------------------------------------
Tue Jul 17 11:08:45 UTC 2018 - mpluskal@suse.com

View File

@ -30,6 +30,7 @@ Source: https://hobbes1069.fedorapeople.org/freetel/codec2/codec2-%{vers
Source1: %{name}-rpmlintrc
Source2: baselibs.conf
Patch0: codec2-no_return_random.patch
Patch1: codec2-licensed-stuff.patch
BuildRequires: cmake
BuildRequires: gcc-c++
BuildRequires: pkgconfig
@ -73,6 +74,7 @@ Example code for Codec 2, including test voices and matlab/octave files.
%prep
%setup -q
%patch0 -p1
%patch1 -p0
%build
%cmake \