Cleanup of modem filters
This commit is contained in:
parent
f368369945
commit
6af84a870c
|
@ -391,133 +391,89 @@ t42.lo: cielab_luts.h
|
|||
cielab_luts.h: make_cielab_luts$(EXEEXT)
|
||||
./make_cielab_luts$(EXEEXT) >cielab_luts.h
|
||||
|
||||
V17_V32BIS_RX_INCL = v17_v32bis_rx_fixed_rrc.h \
|
||||
v17_v32bis_rx_floating_rrc.h
|
||||
V17_V32BIS_RX_INCL = v17_v32bis_rx_rrc.h
|
||||
|
||||
v17rx.$(OBJEXT): ${V17_V32BIS_RX_INCL}
|
||||
|
||||
v17rx.lo: ${V17_V32BIS_RX_INCL}
|
||||
|
||||
v17_v32bis_rx_fixed_rrc.h: make_modem_filter$(EXEEXT)
|
||||
./make_modem_filter$(EXEEXT) -m V.17 -i -r >v17_v32bis_rx_fixed_rrc.h
|
||||
v17_v32bis_rx_rrc.h: make_modem_filter$(EXEEXT)
|
||||
./make_modem_filter$(EXEEXT) -m V.17 -r >v17_v32bis_rx_rrc.h
|
||||
|
||||
v17_v32bis_rx_floating_rrc.h: make_modem_filter$(EXEEXT)
|
||||
./make_modem_filter$(EXEEXT) -m V.17 -r >v17_v32bis_rx_floating_rrc.h
|
||||
|
||||
V17_V32BIS_TX_INCL = v17_v32bis_tx_fixed_rrc.h \
|
||||
v17_v32bis_tx_floating_rrc.h
|
||||
V17_V32BIS_TX_INCL = v17_v32bis_tx_rrc.h
|
||||
|
||||
v17tx.$(OBJEXT): ${V17_V32BIS_TX_INCL}
|
||||
|
||||
v17tx.lo: ${V17_V32BIS_TX_INCL}
|
||||
|
||||
v17_v32bis_tx_fixed_rrc.h: make_modem_filter$(EXEEXT)
|
||||
./make_modem_filter$(EXEEXT) -m V.17 -i -t >v17_v32bis_tx_fixed_rrc.h
|
||||
v17_v32bis_tx_rrc.h: make_modem_filter$(EXEEXT)
|
||||
./make_modem_filter$(EXEEXT) -m V.17 -t >v17_v32bis_tx_rrc.h
|
||||
|
||||
v17_v32bis_tx_floating_rrc.h: make_modem_filter$(EXEEXT)
|
||||
./make_modem_filter$(EXEEXT) -m V.17 -t >v17_v32bis_tx_floating_rrc.h
|
||||
|
||||
V22BIS_RX_INCL = v22bis_rx_1200_fixed_rrc.h \
|
||||
v22bis_rx_2400_fixed_rrc.h \
|
||||
v22bis_rx_1200_floating_rrc.h \
|
||||
v22bis_rx_2400_floating_rrc.h
|
||||
V22BIS_RX_INCL = v22bis_rx_1200_rrc.h \
|
||||
v22bis_rx_2400_rrc.h
|
||||
|
||||
v22bis_rx.$(OBJEXT): ${V22BIS_RX_INCL}
|
||||
|
||||
v22bis_rx.lo: ${V22BIS_RX_INCL}
|
||||
|
||||
v22bis_rx_1200_fixed_rrc.h: make_modem_filter$(EXEEXT)
|
||||
./make_modem_filter$(EXEEXT) -m V.22bis1200 -i -r >v22bis_rx_1200_fixed_rrc.h
|
||||
v22bis_rx_1200_rrc.h: make_modem_filter$(EXEEXT)
|
||||
./make_modem_filter$(EXEEXT) -m V.22bis1200 -r >v22bis_rx_1200_rrc.h
|
||||
|
||||
v22bis_rx_2400_fixed_rrc.h: make_modem_filter$(EXEEXT)
|
||||
./make_modem_filter$(EXEEXT) -m V.22bis2400 -i -r >v22bis_rx_2400_fixed_rrc.h
|
||||
v22bis_rx_2400_rrc.h: make_modem_filter$(EXEEXT)
|
||||
./make_modem_filter$(EXEEXT) -m V.22bis2400 -r >v22bis_rx_2400_rrc.h
|
||||
|
||||
v22bis_rx_1200_floating_rrc.h: make_modem_filter$(EXEEXT)
|
||||
./make_modem_filter$(EXEEXT) -m V.22bis1200 -r >v22bis_rx_1200_floating_rrc.h
|
||||
|
||||
v22bis_rx_2400_floating_rrc.h: make_modem_filter$(EXEEXT)
|
||||
./make_modem_filter$(EXEEXT) -m V.22bis2400 -r >v22bis_rx_2400_floating_rrc.h
|
||||
|
||||
V22BIS_TX_INCL = v22bis_tx_fixed_rrc.h \
|
||||
v22bis_tx_floating_rrc.h
|
||||
V22BIS_TX_INCL = v22bis_tx_rrc.h
|
||||
|
||||
v22bis_tx.$(OBJEXT): ${V22BIS_TX_INCL}
|
||||
|
||||
v22bis_tx.lo: ${V22BIS_TX_INCL}
|
||||
|
||||
v22bis_tx_fixed_rrc.h: make_modem_filter$(EXEEXT)
|
||||
./make_modem_filter$(EXEEXT) -m V.22bis -i -t >v22bis_tx_fixed_rrc.h
|
||||
v22bis_tx_rrc.h: make_modem_filter$(EXEEXT)
|
||||
./make_modem_filter$(EXEEXT) -m V.22bis -t >v22bis_tx_rrc.h
|
||||
|
||||
v22bis_tx_floating_rrc.h: make_modem_filter$(EXEEXT)
|
||||
./make_modem_filter$(EXEEXT) -m V.22bis -t >v22bis_tx_floating_rrc.h
|
||||
|
||||
V27_RX_INCL = v27ter_rx_2400_fixed_rrc.h \
|
||||
v27ter_rx_4800_fixed_rrc.h \
|
||||
v27ter_rx_2400_floating_rrc.h \
|
||||
v27ter_rx_4800_floating_rrc.h
|
||||
V27_RX_INCL = v27ter_rx_2400_rrc.h \
|
||||
v27ter_rx_4800_rrc.h
|
||||
|
||||
v27ter_rx.$(OBJEXT): ${V27_RX_INCL}
|
||||
|
||||
v27ter_rx.lo: ${V27_RX_INCL}
|
||||
|
||||
v27ter_rx_2400_fixed_rrc.h: make_modem_filter$(EXEEXT)
|
||||
./make_modem_filter$(EXEEXT) -m V.27ter2400 -i -r >v27ter_rx_2400_fixed_rrc.h
|
||||
v27ter_rx_2400_rrc.h: make_modem_filter$(EXEEXT)
|
||||
./make_modem_filter$(EXEEXT) -m V.27ter2400 -r >v27ter_rx_2400_rrc.h
|
||||
|
||||
v27ter_rx_4800_fixed_rrc.h: make_modem_filter$(EXEEXT)
|
||||
./make_modem_filter$(EXEEXT) -m V.27ter4800 -i -r >v27ter_rx_4800_fixed_rrc.h
|
||||
v27ter_rx_4800_rrc.h: make_modem_filter$(EXEEXT)
|
||||
./make_modem_filter$(EXEEXT) -m V.27ter4800 -r >v27ter_rx_4800_rrc.h
|
||||
|
||||
v27ter_rx_2400_floating_rrc.h: make_modem_filter$(EXEEXT)
|
||||
./make_modem_filter$(EXEEXT) -m V.27ter2400 -r >v27ter_rx_2400_floating_rrc.h
|
||||
|
||||
v27ter_rx_4800_floating_rrc.h: make_modem_filter$(EXEEXT)
|
||||
./make_modem_filter$(EXEEXT) -m V.27ter4800 -r >v27ter_rx_4800_floating_rrc.h
|
||||
|
||||
V27TER_TX_INCL = v27ter_tx_2400_fixed_rrc.h \
|
||||
v27ter_tx_4800_fixed_rrc.h \
|
||||
v27ter_tx_2400_floating_rrc.h \
|
||||
v27ter_tx_4800_floating_rrc.h
|
||||
V27TER_TX_INCL = v27ter_tx_2400_rrc.h \
|
||||
v27ter_tx_4800_rrc.h
|
||||
|
||||
v27ter_tx_.$(OBJEXT): ${V27TER_TX_INCL}
|
||||
|
||||
v27ter_tx.lo: ${V27TER_TX_INCL}
|
||||
|
||||
v27ter_tx_2400_fixed_rrc.h: make_modem_filter$(EXEEXT)
|
||||
./make_modem_filter$(EXEEXT) -m V.27ter2400 -i -t >v27ter_tx_2400_fixed_rrc.h
|
||||
v27ter_tx_2400_rrc.h: make_modem_filter$(EXEEXT)
|
||||
./make_modem_filter$(EXEEXT) -m V.27ter2400 -t >v27ter_tx_2400_rrc.h
|
||||
|
||||
v27ter_tx_4800_fixed_rrc.h: make_modem_filter$(EXEEXT)
|
||||
./make_modem_filter$(EXEEXT) -m V.27ter4800 -i -t >v27ter_tx_4800_fixed_rrc.h
|
||||
v27ter_tx_4800_rrc.h: make_modem_filter$(EXEEXT)
|
||||
./make_modem_filter$(EXEEXT) -m V.27ter4800 -t >v27ter_tx_4800_rrc.h
|
||||
|
||||
v27ter_tx_2400_floating_rrc.h: make_modem_filter$(EXEEXT)
|
||||
./make_modem_filter$(EXEEXT) -m V.27ter2400 -t >v27ter_tx_2400_floating_rrc.h
|
||||
|
||||
v27ter_tx_4800_floating_rrc.h: make_modem_filter$(EXEEXT)
|
||||
./make_modem_filter$(EXEEXT) -m V.27ter4800 -t >v27ter_tx_4800_floating_rrc.h
|
||||
|
||||
V29_RX_INCL = v29rx_fixed_rrc.h \
|
||||
v29rx_floating_rrc.h
|
||||
V29_RX_INCL = v29rx_rrc.h
|
||||
|
||||
v29rx.$(OBJEXT): ${V29_RX_INCL}
|
||||
|
||||
v29rx.lo: ${V29_RX_INCL}
|
||||
|
||||
v29rx_fixed_rrc.h: make_modem_filter$(EXEEXT)
|
||||
./make_modem_filter$(EXEEXT) -m V.29 -i -r >v29rx_fixed_rrc.h
|
||||
v29rx_rrc.h: make_modem_filter$(EXEEXT)
|
||||
./make_modem_filter$(EXEEXT) -m V.29 -r >v29rx_rrc.h
|
||||
|
||||
v29rx_floating_rrc.h: make_modem_filter$(EXEEXT)
|
||||
./make_modem_filter$(EXEEXT) -m V.29 -r >v29rx_floating_rrc.h
|
||||
|
||||
V29_TX_INCL = v29tx_fixed_rrc.h \
|
||||
v29tx_floating_rrc.h
|
||||
V29_TX_INCL = v29tx_rrc.h
|
||||
|
||||
v29tx.$(OBJEXT): ${V29_TX_INCL}
|
||||
|
||||
v29tx.lo: ${V29_TX_INCL}
|
||||
|
||||
v29tx_fixed_rrc.h: make_modem_filter$(EXEEXT)
|
||||
./make_modem_filter$(EXEEXT) -m V.29 -i -t >v29tx_fixed_rrc.h
|
||||
|
||||
v29tx_floating_rrc.h: make_modem_filter$(EXEEXT)
|
||||
./make_modem_filter$(EXEEXT) -m V.29 -t >v29tx_floating_rrc.h
|
||||
v29tx_rrc.h: make_modem_filter$(EXEEXT)
|
||||
./make_modem_filter$(EXEEXT) -m V.29 -t >v29tx_rrc.h
|
||||
|
||||
DSP = libspandsp.dsp
|
||||
VCPROJ8 = libspandsp.2005.vcproj
|
||||
|
|
|
@ -212,42 +212,46 @@ SPAN_DECLARE_NONSTD(int) async_tx_get_bit(void *user_data)
|
|||
{
|
||||
async_tx_state_t *s;
|
||||
int bit;
|
||||
int parity_bit;
|
||||
|
||||
s = (async_tx_state_t *) user_data;
|
||||
if (s->bitpos == 0)
|
||||
{
|
||||
if (s->presend_bits > 0)
|
||||
{
|
||||
s->presend_bits--;
|
||||
return 1;
|
||||
}
|
||||
if ((s->byte_in_progress = s->get_byte(s->user_data)) < 0)
|
||||
{
|
||||
/* No more data */
|
||||
bit = SIG_STATUS_END_OF_DATA;
|
||||
if (s->byte_in_progress != SIG_STATUS_LINK_IDLE)
|
||||
return s->byte_in_progress;
|
||||
/* Idle for a bit time. If the get byte call configured a presend
|
||||
time we might idle for longer. */
|
||||
return 1;
|
||||
}
|
||||
s->byte_in_progress &= (0xFFFF >> (16 - s->data_bits));
|
||||
if (s->parity != ASYNC_PARITY_NONE)
|
||||
{
|
||||
parity_bit = parity8(s->byte_in_progress);
|
||||
if (s->parity == ASYNC_PARITY_ODD)
|
||||
parity_bit ^= 1;
|
||||
s->byte_in_progress |= (parity_bit << s->data_bits);
|
||||
s->byte_in_progress |= (0xFFFF << (s->data_bits + 1));
|
||||
}
|
||||
else
|
||||
{
|
||||
/* Start bit */
|
||||
bit = 0;
|
||||
s->parity_bit = 0;
|
||||
s->bitpos++;
|
||||
s->byte_in_progress |= (0xFFFF << s->data_bits);
|
||||
}
|
||||
}
|
||||
else if (s->bitpos <= s->data_bits)
|
||||
{
|
||||
bit = s->byte_in_progress & 1;
|
||||
s->byte_in_progress >>= 1;
|
||||
s->parity_bit ^= bit;
|
||||
s->bitpos++;
|
||||
}
|
||||
else if (s->parity && s->bitpos == s->data_bits + 1)
|
||||
{
|
||||
if (s->parity == ASYNC_PARITY_ODD)
|
||||
s->parity_bit ^= 1;
|
||||
bit = s->parity_bit;
|
||||
/* Start bit */
|
||||
bit = 0;
|
||||
s->bitpos++;
|
||||
}
|
||||
else
|
||||
{
|
||||
/* Stop bit(s) */
|
||||
bit = 1;
|
||||
if (++s->bitpos > s->data_bits + s->stop_bits)
|
||||
bit = s->byte_in_progress & 1;
|
||||
s->byte_in_progress >>= 1;
|
||||
if (++s->bitpos > s->total_bits)
|
||||
s->bitpos = 0;
|
||||
}
|
||||
return bit;
|
||||
|
@ -278,16 +282,15 @@ SPAN_DECLARE(async_tx_state_t *) async_tx_init(async_tx_state_t *s,
|
|||
flow control does not exist, so V.14 stuffing is not needed. */
|
||||
s->data_bits = data_bits;
|
||||
s->parity = parity;
|
||||
s->stop_bits = stop_bits;
|
||||
s->total_bits = data_bits + stop_bits;
|
||||
if (parity != ASYNC_PARITY_NONE)
|
||||
s->stop_bits++;
|
||||
s->total_bits++;
|
||||
|
||||
s->get_byte = get_byte;
|
||||
s->user_data = user_data;
|
||||
|
||||
s->byte_in_progress = 0;
|
||||
s->bitpos = 0;
|
||||
s->parity_bit = 0;
|
||||
s->presend_bits = 0;
|
||||
return s;
|
||||
}
|
||||
|
|
|
@ -92,6 +92,7 @@
|
|||
Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
|
||||
UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
|
||||
>
|
||||
<File RelativePath="ademco_contactid.c"></File>
|
||||
<File RelativePath="adsi.c"></File>
|
||||
<File RelativePath="async.c"></File>
|
||||
<File RelativePath="at_interpreter.c"></File>
|
||||
|
@ -123,12 +124,14 @@
|
|||
<File RelativePath="gsm0610_short_term.c"></File>
|
||||
<File RelativePath="hdlc.c"></File>
|
||||
<File RelativePath="ima_adpcm.c"></File>
|
||||
<File RelativePath="image_translate.c"></File>
|
||||
<File RelativePath="logging.c"></File>
|
||||
<File RelativePath="lpc10_analyse.c"></File>
|
||||
<File RelativePath="lpc10_decode.c"></File>
|
||||
<File RelativePath="lpc10_encode.c"></File>
|
||||
<File RelativePath="lpc10_placev.c"></File>
|
||||
<File RelativePath="lpc10_voicing.c"></File>
|
||||
<File RelativePath="math_fixed.c"></File>
|
||||
<File RelativePath="modem_echo.c"></File>
|
||||
<File RelativePath="modem_connect_tones.c"></File>
|
||||
<File RelativePath="noise.c"></File>
|
||||
|
@ -143,6 +146,8 @@
|
|||
<File RelativePath="super_tone_rx.c"></File>
|
||||
<File RelativePath="super_tone_tx.c"></File>
|
||||
<File RelativePath="swept_tone.c"></File>
|
||||
<File RelativePath="t4_t6_decode.c"></File>
|
||||
<File RelativePath="t4_t6_encode.c"></File>
|
||||
<File RelativePath="t4_rx.c"></File>
|
||||
<File RelativePath="t4_tx.c"></File>
|
||||
<File RelativePath="t30.c"></File>
|
||||
|
@ -154,8 +159,13 @@
|
|||
<File RelativePath="t38_gateway.c"></File>
|
||||
<File RelativePath="t38_non_ecm_buffer.c"></File>
|
||||
<File RelativePath="t38_terminal.c"></File>
|
||||
<File RelativePath="t42.c"></File>
|
||||
<File RelativePath="t81_t82_arith_coding.c"></File>
|
||||
<File RelativePath="t85_decode.c"></File>
|
||||
<File RelativePath="t85_encode.c"></File>
|
||||
<File RelativePath="testcpuid.c"></File>
|
||||
<File RelativePath="time_scale.c"></File>
|
||||
<File RelativePath="timezone.c"></File>
|
||||
<File RelativePath="tone_detect.c"></File>
|
||||
<File RelativePath="tone_generate.c"></File>
|
||||
<File RelativePath="v17rx.c"></File>
|
||||
|
@ -174,6 +184,7 @@
|
|||
<File RelativePath="vector_int.c"></File>
|
||||
<File RelativePath=".\msvc\gettimeofday.c"></File>
|
||||
</Filter><Filter Name="Header Files">
|
||||
<File RelativePath="spandsp/ademco_contactid.h"></File>
|
||||
<File RelativePath="spandsp/adsi.h"></File>
|
||||
<File RelativePath="spandsp/async.h"></File>
|
||||
<File RelativePath="spandsp/arctan2.h"></File>
|
||||
|
@ -205,8 +216,10 @@
|
|||
<File RelativePath="spandsp/gsm0610.h"></File>
|
||||
<File RelativePath="spandsp/hdlc.h"></File>
|
||||
<File RelativePath="spandsp/ima_adpcm.h"></File>
|
||||
<File RelativePath="spandsp/image_translate.h"></File>
|
||||
<File RelativePath="spandsp/logging.h"></File>
|
||||
<File RelativePath="spandsp/lpc10.h"></File>
|
||||
<File RelativePath="spandsp/math_fixed.h"></File>
|
||||
<File RelativePath="spandsp/modem_echo.h"></File>
|
||||
<File RelativePath="spandsp/modem_connect_tones.h"></File>
|
||||
<File RelativePath="spandsp/noise.h"></File>
|
||||
|
@ -222,8 +235,6 @@
|
|||
<File RelativePath="spandsp/super_tone_rx.h"></File>
|
||||
<File RelativePath="spandsp/super_tone_tx.h"></File>
|
||||
<File RelativePath="spandsp/swept_tone.h"></File>
|
||||
<File RelativePath="spandsp/t4_rx.h"></File>
|
||||
<File RelativePath="spandsp/t4_tx.h"></File>
|
||||
<File RelativePath="spandsp/t30.h"></File>
|
||||
<File RelativePath="spandsp/t30_api.h"></File>
|
||||
<File RelativePath="spandsp/t30_fcf.h"></File>
|
||||
|
@ -234,8 +245,16 @@
|
|||
<File RelativePath="spandsp/t38_gateway.h"></File>
|
||||
<File RelativePath="spandsp/t38_non_ecm_buffer.h"></File>
|
||||
<File RelativePath="spandsp/t38_terminal.h"></File>
|
||||
<File RelativePath="spandsp/t4_rx.h"></File>
|
||||
<File RelativePath="spandsp/t4_tx.h"></File>
|
||||
<File RelativePath="spandsp/t4_t6_decode.h"></File>
|
||||
<File RelativePath="spandsp/t4_t6_encode.h"></File>
|
||||
<File RelativePath="spandsp/t42.h"></File>
|
||||
<File RelativePath="spandsp/t81_t82_arith_coding.h"></File>
|
||||
<File RelativePath="spandsp/t85.h"></File>
|
||||
<File RelativePath="spandsp/telephony.h"></File>
|
||||
<File RelativePath="spandsp/time_scale.h"></File>
|
||||
<File RelativePath="spandsp/timezone.h"></File>
|
||||
<File RelativePath="spandsp/timing.h"></File>
|
||||
<File RelativePath="spandsp/tone_detect.h"></File>
|
||||
<File RelativePath="spandsp/tone_generate.h"></File>
|
||||
|
@ -253,6 +272,7 @@
|
|||
<File RelativePath="spandsp/vector_float.h"></File>
|
||||
<File RelativePath="spandsp/vector_int.h"></File>
|
||||
<File RelativePath="spandsp/version.h"></File>
|
||||
<File RelativePath="spandsp/private/ademco_contactid.h"></File>
|
||||
<File RelativePath="spandsp/private/adsi.h"></File>
|
||||
<File RelativePath="spandsp/private/async.h"></File>
|
||||
<File RelativePath="spandsp/private/at_interpreter.h"></File>
|
||||
|
@ -271,6 +291,7 @@
|
|||
<File RelativePath="spandsp/private/gsm0610.h"></File>
|
||||
<File RelativePath="spandsp/private/hdlc.h"></File>
|
||||
<File RelativePath="spandsp/private/ima_adpcm.h"></File>
|
||||
<File RelativePath="spandsp/private/image_translate.h"></File>
|
||||
<File RelativePath="spandsp/private/logging.h"></File>
|
||||
<File RelativePath="spandsp/private/lpc10.h"></File>
|
||||
<File RelativePath="spandsp/private/modem_connect_tones.h"></File>
|
||||
|
@ -293,7 +314,13 @@
|
|||
<File RelativePath="spandsp/private/t38_terminal.h"></File>
|
||||
<File RelativePath="spandsp/private/t4_rx.h"></File>
|
||||
<File RelativePath="spandsp/private/t4_tx.h"></File>
|
||||
<File RelativePath="spandsp/private/t4_t6_decode.h"></File>
|
||||
<File RelativePath="spandsp/private/t4_t6_encode.h"></File>
|
||||
<File RelativePath="spandsp/private/t42.h"></File>
|
||||
<File RelativePath="spandsp/private/t81_t82_arith_coding.h"></File>
|
||||
<File RelativePath="spandsp/private/t85.h"></File>
|
||||
<File RelativePath="spandsp/private/time_scale.h"></File>
|
||||
<File RelativePath="spandsp/private/timezone.h"></File>
|
||||
<File RelativePath="spandsp/private/tone_detect.h"></File>
|
||||
<File RelativePath="spandsp/private/tone_generate.h"></File>
|
||||
<File RelativePath="spandsp/private/v17rx.h"></File>
|
||||
|
|
|
@ -342,6 +342,10 @@
|
|||
Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
|
||||
UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
|
||||
>
|
||||
<File
|
||||
RelativePath="ademco_contactid.c"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="adsi.c"
|
||||
>
|
||||
|
@ -702,18 +706,15 @@
|
|||
<Filter
|
||||
Name="Header Files"
|
||||
>
|
||||
<File
|
||||
RelativePath=".\spandsp\private\image_translate.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\spandsp\image_translate.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="spandsp.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="spandsp/ademco_contactid.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="spandsp/adsi.h"
|
||||
>
|
||||
|
@ -842,6 +843,10 @@
|
|||
RelativePath="spandsp/ima_adpcm.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="spandsp/image_translate.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="spandsp/logging.h"
|
||||
>
|
||||
|
@ -878,6 +883,10 @@
|
|||
RelativePath="spandsp/power_meter.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="spandsp/private/ademco_contactid.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="spandsp/private/adsi.h"
|
||||
>
|
||||
|
@ -950,6 +959,10 @@
|
|||
RelativePath="spandsp/private/ima_adpcm.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="spandsp/private/image_translate.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="spandsp/private/logging.h"
|
||||
>
|
||||
|
|
|
@ -66,7 +66,6 @@ static void make_tx_filter(int coeff_sets,
|
|||
double carrier,
|
||||
double baud_rate,
|
||||
double excess_bandwidth,
|
||||
int fixed_point,
|
||||
const char *tag)
|
||||
{
|
||||
int i;
|
||||
|
@ -75,8 +74,9 @@ static void make_tx_filter(int coeff_sets,
|
|||
int total_coeffs;
|
||||
double alpha;
|
||||
double beta;
|
||||
double gain;
|
||||
double scaling;
|
||||
double floating_gain;
|
||||
double fixed_gain;
|
||||
double fixed_scaling;
|
||||
double peak;
|
||||
double coeffs[MAX_COEFF_SETS*MAX_COEFFS_PER_FILTER + 1];
|
||||
|
||||
|
@ -87,63 +87,63 @@ static void make_tx_filter(int coeff_sets,
|
|||
compute_raised_cosine_filter(coeffs, total_coeffs, TRUE, FALSE, alpha, beta);
|
||||
|
||||
/* Find the DC gain of the filter, and adjust the filter to unity gain. */
|
||||
gain = 0.0;
|
||||
floating_gain = 0.0;
|
||||
for (i = coeff_sets/2; i < total_coeffs; i += coeff_sets)
|
||||
gain += coeffs[i];
|
||||
floating_gain += coeffs[i];
|
||||
/* Normalise the gain to 1.0 */
|
||||
for (i = 0; i < total_coeffs; i++)
|
||||
coeffs[i] /= gain;
|
||||
gain = 1.0;
|
||||
coeffs[i] /= floating_gain;
|
||||
floating_gain = 1.0;
|
||||
fixed_gain = 1.0;
|
||||
|
||||
if (fixed_point)
|
||||
peak = -1.0;
|
||||
for (i = 0; i < total_coeffs; i++)
|
||||
{
|
||||
peak = -1.0;
|
||||
for (i = 0; i < total_coeffs; i++)
|
||||
{
|
||||
if (fabs(coeffs[i]) > peak)
|
||||
peak = fabs(coeffs[i]);
|
||||
}
|
||||
scaling = 32767.0;
|
||||
if (peak >= 1.0)
|
||||
{
|
||||
scaling /= peak;
|
||||
gain = 1.0/peak;
|
||||
}
|
||||
for (i = 0; i < total_coeffs; i++)
|
||||
coeffs[i] *= scaling;
|
||||
if (fabs(coeffs[i]) > peak)
|
||||
peak = fabs(coeffs[i]);
|
||||
}
|
||||
fixed_scaling = 32767.0f;
|
||||
if (peak >= 1.0)
|
||||
{
|
||||
fixed_scaling /= peak;
|
||||
fixed_gain = 1.0/peak;
|
||||
}
|
||||
|
||||
/* Churn out the data as a C source code header file, which can be directly included by the
|
||||
modem code. */
|
||||
printf("#define TX_PULSESHAPER%s_GAIN %ff\n", tag, gain);
|
||||
printf("#if defined(SPANDSP_USE_FIXED_POINT)\n");
|
||||
printf("#define TX_PULSESHAPER%s_SCALE(x) ((int16_t) (%f*x + ((x >= 0.0) ? 0.5 : -0.5)))\n", tag, fixed_scaling);
|
||||
printf("#define TX_PULSESHAPER%s_GAIN %ff\n", tag, fixed_gain);
|
||||
printf("#else\n");
|
||||
printf("#define TX_PULSESHAPER%s_SCALE(x) (x)\n", tag);
|
||||
printf("#define TX_PULSESHAPER%s_GAIN %ff\n", tag, floating_gain);
|
||||
printf("#endif\n");
|
||||
printf("#define TX_PULSESHAPER%s_COEFF_SETS %d\n", tag, coeff_sets);
|
||||
printf("static const %s tx_pulseshaper%s[TX_PULSESHAPER%s_COEFF_SETS][%d] =\n",
|
||||
(fixed_point) ? "int16_t" : "float",
|
||||
printf("\n");
|
||||
printf("#if defined(SPANDSP_USE_FIXED_POINT)\n");
|
||||
printf("static const int16_t tx_pulseshaper%s[TX_PULSESHAPER%s_COEFF_SETS][%d] =\n",
|
||||
tag,
|
||||
tag,
|
||||
coeffs_per_filter);
|
||||
printf("#else\n");
|
||||
printf("static const float tx_pulseshaper%s[TX_PULSESHAPER%s_COEFF_SETS][%d] =\n",
|
||||
tag,
|
||||
tag,
|
||||
coeffs_per_filter);
|
||||
printf("#endif\n");
|
||||
printf("{\n");
|
||||
for (j = 0; j < coeff_sets; j++)
|
||||
{
|
||||
x = j;
|
||||
printf(" {\n");
|
||||
if (fixed_point)
|
||||
printf(" %8d, /* Filter %d */\n", (int) coeffs[x], j);
|
||||
else
|
||||
printf(" %15.10ff, /* Filter %d */\n", coeffs[x], j);
|
||||
printf(" TX_PULSESHAPER%s_SCALE(%15.10ff), /* Filter %d */\n", tag, coeffs[x], j);
|
||||
for (i = 1; i < coeffs_per_filter - 1; i++)
|
||||
{
|
||||
x = i*coeff_sets + j;
|
||||
if (fixed_point)
|
||||
printf(" %8d,\n", (int) coeffs[x]);
|
||||
else
|
||||
printf(" %15.10ff,\n", coeffs[x]);
|
||||
printf(" TX_PULSESHAPER%s_SCALE(%15.10ff),\n", tag, coeffs[x]);
|
||||
}
|
||||
x = i*coeff_sets + j;
|
||||
if (fixed_point)
|
||||
printf(" %8d\n", (int) coeffs[x]);
|
||||
else
|
||||
printf(" %15.10ff\n", coeffs[x]);
|
||||
printf(" TX_PULSESHAPER%s_SCALE(%15.10ff)\n", tag, coeffs[x]);
|
||||
if (j < coeff_sets - 1)
|
||||
printf(" },\n");
|
||||
else
|
||||
|
@ -158,7 +158,6 @@ static void make_rx_filter(int coeff_sets,
|
|||
double carrier,
|
||||
double baud_rate,
|
||||
double excess_bandwidth,
|
||||
int fixed_point,
|
||||
const char *tag)
|
||||
{
|
||||
int i;
|
||||
|
@ -169,14 +168,12 @@ static void make_rx_filter(int coeff_sets,
|
|||
int total_coeffs;
|
||||
double alpha;
|
||||
double beta;
|
||||
double gain;
|
||||
double floating_gain;
|
||||
double fixed_gain;
|
||||
double fixed_scaling;
|
||||
double peak;
|
||||
double coeffs[MAX_COEFF_SETS*MAX_COEFFS_PER_FILTER + 1];
|
||||
#if 0
|
||||
complex_t co[MAX_COEFFS_PER_FILTER];
|
||||
#else
|
||||
double cox[MAX_COEFFS_PER_FILTER];
|
||||
#endif
|
||||
|
||||
total_coeffs = coeff_sets*coeffs_per_filter + 1;
|
||||
alpha = baud_rate/(2.0*(double) (coeff_sets*SAMPLE_RATE));
|
||||
|
@ -186,84 +183,54 @@ static void make_rx_filter(int coeff_sets,
|
|||
compute_raised_cosine_filter(coeffs, total_coeffs, TRUE, FALSE, alpha, beta);
|
||||
|
||||
/* Find the DC gain of the filter, and adjust the filter to unity gain. */
|
||||
gain = 0.0;
|
||||
floating_gain = 0.0;
|
||||
for (i = coeff_sets/2; i < total_coeffs; i += coeff_sets)
|
||||
gain += coeffs[i];
|
||||
floating_gain += coeffs[i];
|
||||
/* Normalise the gain to 1.0 */
|
||||
for (i = 0; i < total_coeffs; i++)
|
||||
coeffs[i] /= gain;
|
||||
gain = 1.0;
|
||||
coeffs[i] /= floating_gain;
|
||||
floating_gain = 1.0;
|
||||
fixed_gain = 1.0;
|
||||
|
||||
if (fixed_point)
|
||||
peak = -1.0;
|
||||
for (i = 0; i < total_coeffs; i++)
|
||||
{
|
||||
peak = -1.0;
|
||||
for (i = 0; i < total_coeffs; i++)
|
||||
{
|
||||
if (fabs(coeffs[i]) > peak)
|
||||
peak = fabs(coeffs[i]);
|
||||
}
|
||||
gain = 32767.0;
|
||||
if (peak >= 1.0)
|
||||
gain /= peak;
|
||||
for (i = 0; i < total_coeffs; i++)
|
||||
coeffs[i] *= gain;
|
||||
if (fabs(coeffs[i]) > peak)
|
||||
peak = fabs(coeffs[i]);
|
||||
}
|
||||
fixed_scaling = 32767.0f;
|
||||
if (peak >= 1.0)
|
||||
{
|
||||
fixed_scaling /= peak;
|
||||
fixed_gain = 1.0/peak;
|
||||
}
|
||||
|
||||
/* Churn out the data as a C source code header file, which can be directly included by the
|
||||
modem code. */
|
||||
printf("#define RX_PULSESHAPER%s_GAIN %ff\n", tag, gain);
|
||||
printf("#if defined(SPANDSP_USE_FIXED_POINT)\n");
|
||||
printf("#define RX_PULSESHAPER%s_SCALE(x) ((int16_t) (%f*x + ((x >= 0.0) ? 0.5 : -0.5)))\n", tag, fixed_scaling);
|
||||
printf("#define RX_PULSESHAPER%s_GAIN %ff\n", tag, fixed_gain);
|
||||
printf("#else\n");
|
||||
printf("#define RX_PULSESHAPER%s_SCALE(x) (x)\n", tag);
|
||||
printf("#define RX_PULSESHAPER%s_GAIN %ff\n", tag, floating_gain);
|
||||
printf("#endif\n");
|
||||
printf("#define RX_PULSESHAPER%s_COEFF_SETS %d\n", tag, coeff_sets);
|
||||
#if 0
|
||||
printf("static const %s rx_pulseshaper%s[RX_PULSESHAPER%s_COEFF_SETS][%d] =\n",
|
||||
(fixed_point) ? "complexi16_t" : "complexf_t",
|
||||
tag,
|
||||
tag,
|
||||
coeffs_per_filter);
|
||||
printf("{\n");
|
||||
for (j = 0; j < coeff_sets; j++)
|
||||
{
|
||||
/* Complex modulate the filter, to make it a complex pulse shaping bandpass filter
|
||||
centred at the nominal carrier frequency. Use the same phase for all the coefficient
|
||||
sets. This means the modem can step the carrier in whole samples, and not worry about
|
||||
the fractional sample shift caused by selecting amongst the various coefficient sets. */
|
||||
for (i = 0; i < coeffs_per_filter; i++)
|
||||
{
|
||||
m = i - (coeffs_per_filter >> 1);
|
||||
x = i*coeff_sets + j;
|
||||
co[i].re = coeffs[x]*cos(carrier*m);
|
||||
co[i].im = coeffs[x]*sin(carrier*m);
|
||||
}
|
||||
printf(" {\n");
|
||||
if (fixed_point)
|
||||
printf(" {%8d, %8d}, /* Filter %d */\n", (int) co[i].re, (int) co[i].im, j);
|
||||
else
|
||||
printf(" {%15.10ff, %15.10ff}, /* Filter %d */\n", co[0].re, co[0].im, j);
|
||||
for (i = 1; i < coeffs_per_filter - 1; i++)
|
||||
{
|
||||
if (fixed_point)
|
||||
printf(" {%8d, %8d},\n", (int) co[i].re, (int) co[i].im);
|
||||
else
|
||||
printf(" {%15.10ff, %15.10ff},\n", co[i].re, co[i].im);
|
||||
}
|
||||
if (fixed_point)
|
||||
printf(" {%8d, %8d}\n", (int) co[i].re, (int) co[i].im);
|
||||
else
|
||||
printf(" {%15.10ff, %15.10ff}\n", co[i].re, co[i].im);
|
||||
if (j < coeff_sets - 1)
|
||||
printf(" },\n");
|
||||
else
|
||||
printf(" }\n");
|
||||
}
|
||||
printf("};\n");
|
||||
#else
|
||||
for (k = 0; k < 2; k++)
|
||||
{
|
||||
printf("static const %s rx_pulseshaper%s_%s[RX_PULSESHAPER%s_COEFF_SETS][%d] =\n",
|
||||
(fixed_point) ? "int16_t" : "float",
|
||||
printf("\n");
|
||||
printf("#if defined(SPANDSP_USE_FIXED_POINT)\n");
|
||||
printf("static const int16_t rx_pulseshaper%s_%s[RX_PULSESHAPER%s_COEFF_SETS][%d] =\n",
|
||||
tag,
|
||||
(k == 0) ? "re" : "im",
|
||||
tag,
|
||||
coeffs_per_filter);
|
||||
printf("#else\n");
|
||||
printf("static const float rx_pulseshaper%s_%s[RX_PULSESHAPER%s_COEFF_SETS][%d] =\n",
|
||||
tag,
|
||||
(k == 0) ? "re" : "im",
|
||||
tag,
|
||||
coeffs_per_filter);
|
||||
printf("#endif\n");
|
||||
printf("{\n");
|
||||
for (j = 0; j < coeff_sets; j++)
|
||||
{
|
||||
|
@ -281,21 +248,10 @@ static void make_rx_filter(int coeff_sets,
|
|||
cox[i] = coeffs[x]*sin(carrier*m);
|
||||
}
|
||||
printf(" {\n");
|
||||
if (fixed_point)
|
||||
printf(" %8d, /* Filter %d */\n", (int) cox[0], j);
|
||||
else
|
||||
printf(" %15.10ff, /* Filter %d */\n", cox[0], j);
|
||||
printf(" RX_PULSESHAPER%s_SCALE(%15.10ff), /* Filter %d */\n", tag, cox[0], j);
|
||||
for (i = 1; i < coeffs_per_filter - 1; i++)
|
||||
{
|
||||
if (fixed_point)
|
||||
printf(" %8d,\n", (int) cox[i]);
|
||||
else
|
||||
printf(" %15.10ff,\n", cox[i]);
|
||||
}
|
||||
if (fixed_point)
|
||||
printf(" %8d\n", (int) cox[i]);
|
||||
else
|
||||
printf(" %15.10ff\n", cox[i]);
|
||||
printf(" RX_PULSESHAPER%s_SCALE(%15.10ff),\n", tag, cox[i]);
|
||||
printf(" RX_PULSESHAPER%s_SCALE(%15.10ff)\n", tag, cox[i]);
|
||||
if (j < coeff_sets - 1)
|
||||
printf(" },\n");
|
||||
else
|
||||
|
@ -303,13 +259,12 @@ static void make_rx_filter(int coeff_sets,
|
|||
}
|
||||
printf("};\n");
|
||||
}
|
||||
#endif
|
||||
}
|
||||
/*- End of function --------------------------------------------------------*/
|
||||
|
||||
static void usage(void)
|
||||
{
|
||||
fprintf(stderr, "Usage: make_modem_rx_filter -m <V.17 | V.22bis | V.22bis1200 | V.22bis2400 | V.27ter2400 | V.27ter4800 | V.29> [-i] [-r] [-t]\n");
|
||||
fprintf(stderr, "Usage: make_modem_rx_filter -m <V.17 | V.22bis | V.22bis1200 | V.22bis2400 | V.27ter2400 | V.27ter4800 | V.29> [-r] [-t]\n");
|
||||
}
|
||||
/*- End of function --------------------------------------------------------*/
|
||||
|
||||
|
@ -321,7 +276,6 @@ int main(int argc, char **argv)
|
|||
int tx_coeffs_per_filter;
|
||||
int opt;
|
||||
int transmit_modem;
|
||||
int fixed_point;
|
||||
double carrier;
|
||||
double baud_rate;
|
||||
double rx_excess_bandwidth;
|
||||
|
@ -330,16 +284,12 @@ int main(int argc, char **argv)
|
|||
const char *tx_tag;
|
||||
const char *modem;
|
||||
|
||||
fixed_point = FALSE;
|
||||
transmit_modem = FALSE;
|
||||
modem = "";
|
||||
while ((opt = getopt(argc, argv, "im:rt")) != -1)
|
||||
while ((opt = getopt(argc, argv, "m:rt")) != -1)
|
||||
{
|
||||
switch (opt)
|
||||
{
|
||||
case 'i':
|
||||
fixed_point = TRUE;
|
||||
break;
|
||||
case 'm':
|
||||
modem = optarg;
|
||||
break;
|
||||
|
@ -607,7 +557,6 @@ int main(int argc, char **argv)
|
|||
carrier,
|
||||
baud_rate,
|
||||
tx_excess_bandwidth,
|
||||
fixed_point,
|
||||
tx_tag);
|
||||
}
|
||||
else
|
||||
|
@ -617,7 +566,6 @@ int main(int argc, char **argv)
|
|||
carrier,
|
||||
baud_rate,
|
||||
rx_excess_bandwidth,
|
||||
fixed_point,
|
||||
rx_tag);
|
||||
}
|
||||
return 0;
|
||||
|
|
|
@ -39,6 +39,8 @@ struct async_tx_state_s
|
|||
int parity;
|
||||
/*! \brief The number of stop bits per character. */
|
||||
int stop_bits;
|
||||
/*! \brief Total number of bits per character, including the parity and stop bits. */
|
||||
int total_bits;
|
||||
/*! \brief A pointer to the callback routine used to get characters to be transmitted. */
|
||||
get_byte_func_t get_byte;
|
||||
/*! \brief An opaque pointer passed when calling get_byte. */
|
||||
|
|
|
@ -1538,7 +1538,7 @@ static int build_dcs(t30_state_t *s)
|
|||
||
|
||||
((s->image_width == T4_WIDTH_1200_A4) && (s->x_resolution == T4_X_RESOLUTION_1200)))
|
||||
{
|
||||
span_log(&s->logging, SPAN_LOG_FLOW, "Image width is A4 0x%x 0x%x\n", s->image_width, s->x_resolution);
|
||||
span_log(&s->logging, SPAN_LOG_FLOW, "Image width is A4\n");
|
||||
/* No width related bits need to be set. */
|
||||
}
|
||||
else if (((s->image_width == T4_WIDTH_R8_B4) && (s->x_resolution == T4_X_RESOLUTION_R8))
|
||||
|
|
|
@ -653,6 +653,8 @@ SPAN_DECLARE(int) t30_set_rx_encoding(t30_state_t *s, int encoding)
|
|||
case T4_COMPRESSION_ITU_T4_1D:
|
||||
case T4_COMPRESSION_ITU_T4_2D:
|
||||
case T4_COMPRESSION_ITU_T6:
|
||||
//case T4_COMPRESSION_ITU_T85:
|
||||
//case T4_COMPRESSION_ITU_T85_L0:
|
||||
s->output_encoding = encoding;
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -146,9 +146,16 @@ static int set_tiff_directory_info(t4_rx_state_t *s)
|
|||
t4_rx_tiff_state_t *t;
|
||||
int32_t output_compression;
|
||||
int32_t output_t4_options;
|
||||
int bits_per_sample;
|
||||
int samples_per_pixel;
|
||||
int photometric;
|
||||
int image_length;
|
||||
|
||||
t = &s->tiff;
|
||||
/* Prepare the directory entry fully before writing the image, or libtiff complains */
|
||||
bits_per_sample = 1;
|
||||
samples_per_pixel = 1;
|
||||
photometric = PHOTOMETRIC_MINISWHITE;
|
||||
switch (t->output_encoding)
|
||||
{
|
||||
case T4_COMPRESSION_ITU_T4_1D:
|
||||
|
@ -163,7 +170,24 @@ static int set_tiff_directory_info(t4_rx_state_t *s)
|
|||
case T4_COMPRESSION_ITU_T6:
|
||||
output_compression = COMPRESSION_CCITT_T6;
|
||||
break;
|
||||
#if defined(SPANDSP_SUPPORT_T42)
|
||||
case T4_COMPRESSION_ITU_T42:
|
||||
output_compression = COMPRESSION_JPEG;
|
||||
bits_per_sample = 8;
|
||||
samples_per_pixel = 3;
|
||||
photometric = PHOTOMETRIC_ITULAB;
|
||||
break;
|
||||
#endif
|
||||
#if defined(SPANDSP_SUPPORT_T43)
|
||||
case T4_COMPRESSION_ITU_T43:
|
||||
output_compression = COMPRESSION_T43;
|
||||
bits_per_sample = 8;
|
||||
samples_per_pixel = 3;
|
||||
photometric = PHOTOMETRIC_ITULAB;
|
||||
break;
|
||||
#endif
|
||||
case T4_COMPRESSION_ITU_T85:
|
||||
case T4_COMPRESSION_ITU_T85_L0:
|
||||
output_compression = COMPRESSION_T85;
|
||||
break;
|
||||
}
|
||||
|
@ -179,28 +203,23 @@ static int set_tiff_directory_info(t4_rx_state_t *s)
|
|||
TIFFSetField(t->tiff_file, TIFFTAG_T6OPTIONS, 0);
|
||||
TIFFSetField(t->tiff_file, TIFFTAG_FAXMODE, FAXMODE_CLASSF);
|
||||
break;
|
||||
case COMPRESSION_JPEG:
|
||||
TIFFSetField(t->tiff_file, TIFFTAG_FAXMODE, FAXMODE_CLASSF);
|
||||
break;
|
||||
#if defined(SPANDSP_SUPPORT_T43)
|
||||
case COMPRESSION_T43:
|
||||
TIFFSetField(t->tiff_file, TIFFTAG_FAXMODE, FAXMODE_CLASSF);
|
||||
break;
|
||||
#endif
|
||||
case COMPRESSION_T85:
|
||||
TIFFSetField(t->tiff_file, TIFFTAG_FAXMODE, FAXMODE_CLASSF);
|
||||
TIFFSetField(t->tiff_file, TIFFTAG_ROWSPERSTRIP, -1L);
|
||||
break;
|
||||
default:
|
||||
TIFFSetField(t->tiff_file,
|
||||
TIFFTAG_ROWSPERSTRIP,
|
||||
TIFFDefaultStripSize(t->tiff_file, 0));
|
||||
break;
|
||||
}
|
||||
#if defined(SPANDSP_SUPPORT_TIFF_FX)
|
||||
TIFFSetField(t->tiff_file, TIFFTAG_PROFILETYPE, PROFILETYPE_G3_FAX);
|
||||
TIFFSetField(t->tiff_file, TIFFTAG_FAXPROFILE, FAXPROFILE_F);
|
||||
TIFFSetField(t->tiff_file, TIFFTAG_CODINGMETHODS, CODINGMETHODS_T4_1D | CODINGMETHODS_T4_2D | CODINGMETHODS_T6);
|
||||
TIFFSetField(t->tiff_file, TIFFTAG_VERSIONYEAR, "1998");
|
||||
/* TIFFSetField(t->tiff_file, TIFFTAG_MODENUMBER, 0); */
|
||||
#endif
|
||||
TIFFSetField(t->tiff_file, TIFFTAG_BITSPERSAMPLE, 1);
|
||||
TIFFSetField(t->tiff_file, TIFFTAG_ORIENTATION, ORIENTATION_TOPLEFT);
|
||||
TIFFSetField(t->tiff_file, TIFFTAG_SAMPLESPERPIXEL, 1);
|
||||
TIFFSetField(t->tiff_file, TIFFTAG_BITSPERSAMPLE, bits_per_sample);
|
||||
TIFFSetField(t->tiff_file, TIFFTAG_SAMPLESPERPIXEL, samples_per_pixel);
|
||||
TIFFSetField(t->tiff_file, TIFFTAG_PLANARCONFIG, PLANARCONFIG_CONTIG);
|
||||
TIFFSetField(t->tiff_file, TIFFTAG_PHOTOMETRIC, PHOTOMETRIC_MINISWHITE);
|
||||
TIFFSetField(t->tiff_file, TIFFTAG_PHOTOMETRIC, photometric);
|
||||
TIFFSetField(t->tiff_file, TIFFTAG_FILLORDER, FILLORDER_LSB2MSB);
|
||||
/* TIFFTAG_STRIPBYTECOUNTS and TIFFTAG_STRIPOFFSETS are added automatically */
|
||||
|
||||
|
@ -257,6 +276,7 @@ static int set_tiff_directory_info(t4_rx_state_t *s)
|
|||
/* TIFF page numbers start from zero, so the number of pages in the file
|
||||
is always one greater than the highest page number in the file. */
|
||||
s->tiff.pages_in_file = s->current_page + 1;
|
||||
image_length = 0;
|
||||
switch (s->line_encoding)
|
||||
{
|
||||
case T4_COMPRESSION_ITU_T4_1D:
|
||||
|
@ -277,22 +297,28 @@ static int set_tiff_directory_info(t4_rx_state_t *s)
|
|||
}
|
||||
/* Fall through */
|
||||
case T4_COMPRESSION_ITU_T6:
|
||||
TIFFSetField(t->tiff_file, TIFFTAG_IMAGELENGTH, t4_t6_decode_get_image_length(&s->decoder.t4_t6));
|
||||
image_length = t4_t6_decode_get_image_length(&s->decoder.t4_t6);
|
||||
break;
|
||||
case T4_COMPRESSION_ITU_T42:
|
||||
TIFFSetField(t->tiff_file, TIFFTAG_IMAGELENGTH, t42_decode_get_image_length(&s->decoder.t42));
|
||||
image_length = t42_decode_get_image_length(&s->decoder.t42);
|
||||
break;
|
||||
#if defined(SPANDSP_SUPPORT_T43)
|
||||
case T4_COMPRESSION_ITU_T43:
|
||||
TIFFSetField(t->tiff_file, TIFFTAG_IMAGELENGTH, t43_decode_get_image_length(&s->decoder.t43));
|
||||
image_length = t43_decode_get_image_length(&s->decoder.t43);
|
||||
break;
|
||||
#endif
|
||||
case T4_COMPRESSION_ITU_T85:
|
||||
case T4_COMPRESSION_ITU_T85_L0:
|
||||
TIFFSetField(t->tiff_file, TIFFTAG_IMAGELENGTH, t85_decode_get_image_length(&s->decoder.t85));
|
||||
image_length = t85_decode_get_image_length(&s->decoder.t85);
|
||||
break;
|
||||
}
|
||||
TIFFSetField(t->tiff_file, TIFFTAG_IMAGELENGTH, image_length);
|
||||
TIFFSetField(t->tiff_file, TIFFTAG_ROWSPERSTRIP, image_length);
|
||||
#if defined(SPANDSP_SUPPORT_TIFF_FX)
|
||||
TIFFSetField(t->tiff_file, TIFFTAG_PROFILETYPE, PROFILETYPE_G3_FAX);
|
||||
TIFFSetField(t->tiff_file, TIFFTAG_FAXPROFILE, FAXPROFILE_S);
|
||||
TIFFSetField(t->tiff_file, TIFFTAG_CODINGMETHODS, CODINGMETHODS_T4_1D | CODINGMETHODS_T4_2D | CODINGMETHODS_T6);
|
||||
TIFFSetField(t->tiff_file, TIFFTAG_VERSIONYEAR, "1998");
|
||||
if (s->current_page == 0)
|
||||
{
|
||||
/* Create a placeholder for the global parameters IFD, to be filled in later */
|
||||
|
|
|
@ -2,12 +2,11 @@
|
|||
* SpanDSP - a series of DSP components for telephony
|
||||
*
|
||||
* v17_v32bis_tx_constellation_maps.h - ITU V.17 and V.32bis modems
|
||||
* transmit part.
|
||||
* Constellation mapping.
|
||||
* transmit part. Constellation mapping.
|
||||
*
|
||||
* Written by Steve Underwood <steveu@coppice.org>
|
||||
*
|
||||
* Copyright (C) 2004 Steve Underwood
|
||||
* Copyright (C) 2004, 2012 Steve Underwood
|
||||
*
|
||||
* All rights reserved.
|
||||
*
|
||||
|
@ -31,134 +30,134 @@ static const complexi16_t v17_v32bis_14400_constellation[128] =
|
|||
static const complexf_t v17_v32bis_14400_constellation[128] =
|
||||
#endif
|
||||
{
|
||||
{FP_SCALE(-8.0f), FP_SCALE(-3.0f)}, /* 0x00 */
|
||||
{FP_SCALE( 9.0f), FP_SCALE( 2.0f)}, /* 0x01 */
|
||||
{FP_SCALE( 2.0f), FP_SCALE(-9.0f)}, /* 0x02 */
|
||||
{FP_SCALE(-3.0f), FP_SCALE( 8.0f)}, /* 0x03 */
|
||||
{FP_SCALE( 8.0f), FP_SCALE( 3.0f)}, /* 0x04 */
|
||||
{FP_SCALE(-9.0f), FP_SCALE(-2.0f)}, /* 0x05 */
|
||||
{FP_SCALE(-2.0f), FP_SCALE( 9.0f)}, /* 0x06 */
|
||||
{FP_SCALE( 3.0f), FP_SCALE(-8.0f)}, /* 0x07 */
|
||||
{FP_SCALE(-8.0f), FP_SCALE( 1.0f)}, /* 0x08 */
|
||||
{FP_SCALE( 9.0f), FP_SCALE(-2.0f)}, /* 0x09 */
|
||||
{FP_SCALE(-2.0f), FP_SCALE(-9.0f)}, /* 0x0A */
|
||||
{FP_SCALE( 1.0f), FP_SCALE( 8.0f)}, /* 0x0B */
|
||||
{FP_SCALE( 8.0f), FP_SCALE(-1.0f)}, /* 0x0C */
|
||||
{FP_SCALE(-9.0f), FP_SCALE( 2.0f)}, /* 0x0D */
|
||||
{FP_SCALE( 2.0f), FP_SCALE( 9.0f)}, /* 0x0E */
|
||||
{FP_SCALE(-1.0f), FP_SCALE(-8.0f)}, /* 0x0F */
|
||||
{FP_SCALE(-4.0f), FP_SCALE(-3.0f)}, /* 0x10 */
|
||||
{FP_SCALE( 5.0f), FP_SCALE( 2.0f)}, /* 0x11 */
|
||||
{FP_SCALE( 2.0f), FP_SCALE(-5.0f)}, /* 0x12 */
|
||||
{FP_SCALE(-3.0f), FP_SCALE( 4.0f)}, /* 0x13 */
|
||||
{FP_SCALE( 4.0f), FP_SCALE( 3.0f)}, /* 0x14 */
|
||||
{FP_SCALE(-5.0f), FP_SCALE(-2.0f)}, /* 0x15 */
|
||||
{FP_SCALE(-2.0f), FP_SCALE( 5.0f)}, /* 0x16 */
|
||||
{FP_SCALE( 3.0f), FP_SCALE(-4.0f)}, /* 0x17 */
|
||||
{FP_SCALE(-4.0f), FP_SCALE( 1.0f)}, /* 0x18 */
|
||||
{FP_SCALE( 5.0f), FP_SCALE(-2.0f)}, /* 0x19 */
|
||||
{FP_SCALE(-2.0f), FP_SCALE(-5.0f)}, /* 0x1A */
|
||||
{FP_SCALE( 1.0f), FP_SCALE( 4.0f)}, /* 0x1B */
|
||||
{FP_SCALE( 4.0f), FP_SCALE(-1.0f)}, /* 0x1C */
|
||||
{FP_SCALE(-5.0f), FP_SCALE( 2.0f)}, /* 0x1D */
|
||||
{FP_SCALE( 2.0f), FP_SCALE( 5.0f)}, /* 0x1E */
|
||||
{FP_SCALE(-1.0f), FP_SCALE(-4.0f)}, /* 0x1F */
|
||||
{FP_SCALE( 4.0f), FP_SCALE(-3.0f)}, /* 0x20 */
|
||||
{FP_SCALE(-3.0f), FP_SCALE( 2.0f)}, /* 0x21 */
|
||||
{FP_SCALE( 2.0f), FP_SCALE( 3.0f)}, /* 0x22 */
|
||||
{FP_SCALE(-3.0f), FP_SCALE(-4.0f)}, /* 0x23 */
|
||||
{FP_SCALE(-4.0f), FP_SCALE( 3.0f)}, /* 0x24 */
|
||||
{FP_SCALE( 3.0f), FP_SCALE(-2.0f)}, /* 0x25 */
|
||||
{FP_SCALE(-2.0f), FP_SCALE(-3.0f)}, /* 0x26 */
|
||||
{FP_SCALE( 3.0f), FP_SCALE( 4.0f)}, /* 0x27 */
|
||||
{FP_SCALE( 4.0f), FP_SCALE( 1.0f)}, /* 0x28 */
|
||||
{FP_SCALE(-3.0f), FP_SCALE(-2.0f)}, /* 0x29 */
|
||||
{FP_SCALE(-2.0f), FP_SCALE( 3.0f)}, /* 0x2A */
|
||||
{FP_SCALE( 1.0f), FP_SCALE(-4.0f)}, /* 0x2B */
|
||||
{FP_SCALE(-4.0f), FP_SCALE(-1.0f)}, /* 0x2C */
|
||||
{FP_SCALE( 3.0f), FP_SCALE( 2.0f)}, /* 0x2D */
|
||||
{FP_SCALE( 2.0f), FP_SCALE(-3.0f)}, /* 0x2E */
|
||||
{FP_SCALE(-1.0f), FP_SCALE( 4.0f)}, /* 0x2F */
|
||||
{FP_SCALE( 0.0f), FP_SCALE(-3.0f)}, /* 0x30 */
|
||||
{FP_SCALE( 1.0f), FP_SCALE( 2.0f)}, /* 0x31 */
|
||||
{FP_SCALE( 2.0f), FP_SCALE(-1.0f)}, /* 0x32 */
|
||||
{FP_SCALE(-3.0f), FP_SCALE( 0.0f)}, /* 0x33 */
|
||||
{FP_SCALE( 0.0f), FP_SCALE( 3.0f)}, /* 0x34 */
|
||||
{FP_SCALE(-1.0f), FP_SCALE(-2.0f)}, /* 0x35 */
|
||||
{FP_SCALE(-2.0f), FP_SCALE( 1.0f)}, /* 0x36 */
|
||||
{FP_SCALE( 3.0f), FP_SCALE( 0.0f)}, /* 0x37 */
|
||||
{FP_SCALE( 0.0f), FP_SCALE( 1.0f)}, /* 0x38 */
|
||||
{FP_SCALE( 1.0f), FP_SCALE(-2.0f)}, /* 0x39 */
|
||||
{FP_SCALE(-2.0f), FP_SCALE(-1.0f)}, /* 0x3A */
|
||||
{FP_SCALE( 1.0f), FP_SCALE( 0.0f)}, /* 0x3B */
|
||||
{FP_SCALE( 0.0f), FP_SCALE(-1.0f)}, /* 0x3C */
|
||||
{FP_SCALE(-1.0f), FP_SCALE( 2.0f)}, /* 0x3D */
|
||||
{FP_SCALE( 2.0f), FP_SCALE( 1.0f)}, /* 0x3E */
|
||||
{FP_SCALE(-1.0f), FP_SCALE( 0.0f)}, /* 0x3F */
|
||||
{FP_SCALE( 8.0f), FP_SCALE(-3.0f)}, /* 0x40 */
|
||||
{FP_SCALE(-7.0f), FP_SCALE( 2.0f)}, /* 0x41 */
|
||||
{FP_SCALE( 2.0f), FP_SCALE( 7.0f)}, /* 0x42 */
|
||||
{FP_SCALE(-3.0f), FP_SCALE(-8.0f)}, /* 0x43 */
|
||||
{FP_SCALE(-8.0f), FP_SCALE( 3.0f)}, /* 0x44 */
|
||||
{FP_SCALE( 7.0f), FP_SCALE(-2.0f)}, /* 0x45 */
|
||||
{FP_SCALE(-2.0f), FP_SCALE(-7.0f)}, /* 0x46 */
|
||||
{FP_SCALE( 3.0f), FP_SCALE( 8.0f)}, /* 0x47 */
|
||||
{FP_SCALE( 8.0f), FP_SCALE( 1.0f)}, /* 0x48 */
|
||||
{FP_SCALE(-7.0f), FP_SCALE(-2.0f)}, /* 0x49 */
|
||||
{FP_SCALE(-2.0f), FP_SCALE( 7.0f)}, /* 0x4A */
|
||||
{FP_SCALE( 1.0f), FP_SCALE(-8.0f)}, /* 0x4B */
|
||||
{FP_SCALE(-8.0f), FP_SCALE(-1.0f)}, /* 0x4C */
|
||||
{FP_SCALE( 7.0f), FP_SCALE( 2.0f)}, /* 0x4D */
|
||||
{FP_SCALE( 2.0f), FP_SCALE(-7.0f)}, /* 0x4E */
|
||||
{FP_SCALE(-1.0f), FP_SCALE( 8.0f)}, /* 0x4F */
|
||||
{FP_SCALE(-4.0f), FP_SCALE(-7.0f)}, /* 0x50 */
|
||||
{FP_SCALE( 5.0f), FP_SCALE( 6.0f)}, /* 0x51 */
|
||||
{FP_SCALE( 6.0f), FP_SCALE(-5.0f)}, /* 0x52 */
|
||||
{FP_SCALE(-7.0f), FP_SCALE( 4.0f)}, /* 0x53 */
|
||||
{FP_SCALE( 4.0f), FP_SCALE( 7.0f)}, /* 0x54 */
|
||||
{FP_SCALE(-5.0f), FP_SCALE(-6.0f)}, /* 0x55 */
|
||||
{FP_SCALE(-6.0f), FP_SCALE( 5.0f)}, /* 0x56 */
|
||||
{FP_SCALE( 7.0f), FP_SCALE(-4.0f)}, /* 0x57 */
|
||||
{FP_SCALE(-4.0f), FP_SCALE( 5.0f)}, /* 0x58 */
|
||||
{FP_SCALE( 5.0f), FP_SCALE(-6.0f)}, /* 0x59 */
|
||||
{FP_SCALE(-6.0f), FP_SCALE(-5.0f)}, /* 0x5A */
|
||||
{FP_SCALE( 5.0f), FP_SCALE( 4.0f)}, /* 0x5B */
|
||||
{FP_SCALE( 4.0f), FP_SCALE(-5.0f)}, /* 0x5C */
|
||||
{FP_SCALE(-5.0f), FP_SCALE( 6.0f)}, /* 0x5D */
|
||||
{FP_SCALE( 6.0f), FP_SCALE( 5.0f)}, /* 0x5E */
|
||||
{FP_SCALE(-5.0f), FP_SCALE(-4.0f)}, /* 0x5F */
|
||||
{FP_SCALE( 4.0f), FP_SCALE(-7.0f)}, /* 0x60 */
|
||||
{FP_SCALE(-3.0f), FP_SCALE( 6.0f)}, /* 0x61 */
|
||||
{FP_SCALE( 6.0f), FP_SCALE( 3.0f)}, /* 0x62 */
|
||||
{FP_SCALE(-7.0f), FP_SCALE(-4.0f)}, /* 0x63 */
|
||||
{FP_SCALE(-4.0f), FP_SCALE( 7.0f)}, /* 0x64 */
|
||||
{FP_SCALE( 3.0f), FP_SCALE(-6.0f)}, /* 0x65 */
|
||||
{FP_SCALE(-6.0f), FP_SCALE(-3.0f)}, /* 0x66 */
|
||||
{FP_SCALE( 7.0f), FP_SCALE( 4.0f)}, /* 0x67 */
|
||||
{FP_SCALE( 4.0f), FP_SCALE( 5.0f)}, /* 0x68 */
|
||||
{FP_SCALE(-3.0f), FP_SCALE(-6.0f)}, /* 0x69 */
|
||||
{FP_SCALE(-6.0f), FP_SCALE( 3.0f)}, /* 0x6A */
|
||||
{FP_SCALE( 5.0f), FP_SCALE(-4.0f)}, /* 0x6B */
|
||||
{FP_SCALE(-4.0f), FP_SCALE(-5.0f)}, /* 0x6C */
|
||||
{FP_SCALE( 3.0f), FP_SCALE( 6.0f)}, /* 0x6D */
|
||||
{FP_SCALE( 6.0f), FP_SCALE(-3.0f)}, /* 0x6E */
|
||||
{FP_SCALE(-5.0f), FP_SCALE( 4.0f)}, /* 0x6F */
|
||||
{FP_SCALE( 0.0f), FP_SCALE(-7.0f)}, /* 0x70 */
|
||||
{FP_SCALE( 1.0f), FP_SCALE( 6.0f)}, /* 0x71 */
|
||||
{FP_SCALE( 6.0f), FP_SCALE(-1.0f)}, /* 0x72 */
|
||||
{FP_SCALE(-7.0f), FP_SCALE( 0.0f)}, /* 0x73 */
|
||||
{FP_SCALE( 0.0f), FP_SCALE( 7.0f)}, /* 0x74 */
|
||||
{FP_SCALE(-1.0f), FP_SCALE(-6.0f)}, /* 0x75 */
|
||||
{FP_SCALE(-6.0f), FP_SCALE( 1.0f)}, /* 0x76 */
|
||||
{FP_SCALE( 7.0f), FP_SCALE( 0.0f)}, /* 0x77 */
|
||||
{FP_SCALE( 0.0f), FP_SCALE( 5.0f)}, /* 0x78 */
|
||||
{FP_SCALE( 1.0f), FP_SCALE(-6.0f)}, /* 0x79 */
|
||||
{FP_SCALE(-6.0f), FP_SCALE(-1.0f)}, /* 0x7A */
|
||||
{FP_SCALE( 5.0f), FP_SCALE( 0.0f)}, /* 0x7B */
|
||||
{FP_SCALE( 0.0f), FP_SCALE(-5.0f)}, /* 0x7C */
|
||||
{FP_SCALE(-1.0f), FP_SCALE( 6.0f)}, /* 0x7D */
|
||||
{FP_SCALE( 6.0f), FP_SCALE( 1.0f)}, /* 0x7E */
|
||||
{FP_SCALE(-5.0f), FP_SCALE( 0.0f)} /* 0x7F */
|
||||
{FP_CONSTELLATION_SCALE(-8.0f), FP_CONSTELLATION_SCALE(-3.0f)}, /* 0x00 */
|
||||
{FP_CONSTELLATION_SCALE( 9.0f), FP_CONSTELLATION_SCALE( 2.0f)}, /* 0x01 */
|
||||
{FP_CONSTELLATION_SCALE( 2.0f), FP_CONSTELLATION_SCALE(-9.0f)}, /* 0x02 */
|
||||
{FP_CONSTELLATION_SCALE(-3.0f), FP_CONSTELLATION_SCALE( 8.0f)}, /* 0x03 */
|
||||
{FP_CONSTELLATION_SCALE( 8.0f), FP_CONSTELLATION_SCALE( 3.0f)}, /* 0x04 */
|
||||
{FP_CONSTELLATION_SCALE(-9.0f), FP_CONSTELLATION_SCALE(-2.0f)}, /* 0x05 */
|
||||
{FP_CONSTELLATION_SCALE(-2.0f), FP_CONSTELLATION_SCALE( 9.0f)}, /* 0x06 */
|
||||
{FP_CONSTELLATION_SCALE( 3.0f), FP_CONSTELLATION_SCALE(-8.0f)}, /* 0x07 */
|
||||
{FP_CONSTELLATION_SCALE(-8.0f), FP_CONSTELLATION_SCALE( 1.0f)}, /* 0x08 */
|
||||
{FP_CONSTELLATION_SCALE( 9.0f), FP_CONSTELLATION_SCALE(-2.0f)}, /* 0x09 */
|
||||
{FP_CONSTELLATION_SCALE(-2.0f), FP_CONSTELLATION_SCALE(-9.0f)}, /* 0x0A */
|
||||
{FP_CONSTELLATION_SCALE( 1.0f), FP_CONSTELLATION_SCALE( 8.0f)}, /* 0x0B */
|
||||
{FP_CONSTELLATION_SCALE( 8.0f), FP_CONSTELLATION_SCALE(-1.0f)}, /* 0x0C */
|
||||
{FP_CONSTELLATION_SCALE(-9.0f), FP_CONSTELLATION_SCALE( 2.0f)}, /* 0x0D */
|
||||
{FP_CONSTELLATION_SCALE( 2.0f), FP_CONSTELLATION_SCALE( 9.0f)}, /* 0x0E */
|
||||
{FP_CONSTELLATION_SCALE(-1.0f), FP_CONSTELLATION_SCALE(-8.0f)}, /* 0x0F */
|
||||
{FP_CONSTELLATION_SCALE(-4.0f), FP_CONSTELLATION_SCALE(-3.0f)}, /* 0x10 */
|
||||
{FP_CONSTELLATION_SCALE( 5.0f), FP_CONSTELLATION_SCALE( 2.0f)}, /* 0x11 */
|
||||
{FP_CONSTELLATION_SCALE( 2.0f), FP_CONSTELLATION_SCALE(-5.0f)}, /* 0x12 */
|
||||
{FP_CONSTELLATION_SCALE(-3.0f), FP_CONSTELLATION_SCALE( 4.0f)}, /* 0x13 */
|
||||
{FP_CONSTELLATION_SCALE( 4.0f), FP_CONSTELLATION_SCALE( 3.0f)}, /* 0x14 */
|
||||
{FP_CONSTELLATION_SCALE(-5.0f), FP_CONSTELLATION_SCALE(-2.0f)}, /* 0x15 */
|
||||
{FP_CONSTELLATION_SCALE(-2.0f), FP_CONSTELLATION_SCALE( 5.0f)}, /* 0x16 */
|
||||
{FP_CONSTELLATION_SCALE( 3.0f), FP_CONSTELLATION_SCALE(-4.0f)}, /* 0x17 */
|
||||
{FP_CONSTELLATION_SCALE(-4.0f), FP_CONSTELLATION_SCALE( 1.0f)}, /* 0x18 */
|
||||
{FP_CONSTELLATION_SCALE( 5.0f), FP_CONSTELLATION_SCALE(-2.0f)}, /* 0x19 */
|
||||
{FP_CONSTELLATION_SCALE(-2.0f), FP_CONSTELLATION_SCALE(-5.0f)}, /* 0x1A */
|
||||
{FP_CONSTELLATION_SCALE( 1.0f), FP_CONSTELLATION_SCALE( 4.0f)}, /* 0x1B */
|
||||
{FP_CONSTELLATION_SCALE( 4.0f), FP_CONSTELLATION_SCALE(-1.0f)}, /* 0x1C */
|
||||
{FP_CONSTELLATION_SCALE(-5.0f), FP_CONSTELLATION_SCALE( 2.0f)}, /* 0x1D */
|
||||
{FP_CONSTELLATION_SCALE( 2.0f), FP_CONSTELLATION_SCALE( 5.0f)}, /* 0x1E */
|
||||
{FP_CONSTELLATION_SCALE(-1.0f), FP_CONSTELLATION_SCALE(-4.0f)}, /* 0x1F */
|
||||
{FP_CONSTELLATION_SCALE( 4.0f), FP_CONSTELLATION_SCALE(-3.0f)}, /* 0x20 */
|
||||
{FP_CONSTELLATION_SCALE(-3.0f), FP_CONSTELLATION_SCALE( 2.0f)}, /* 0x21 */
|
||||
{FP_CONSTELLATION_SCALE( 2.0f), FP_CONSTELLATION_SCALE( 3.0f)}, /* 0x22 */
|
||||
{FP_CONSTELLATION_SCALE(-3.0f), FP_CONSTELLATION_SCALE(-4.0f)}, /* 0x23 */
|
||||
{FP_CONSTELLATION_SCALE(-4.0f), FP_CONSTELLATION_SCALE( 3.0f)}, /* 0x24 */
|
||||
{FP_CONSTELLATION_SCALE( 3.0f), FP_CONSTELLATION_SCALE(-2.0f)}, /* 0x25 */
|
||||
{FP_CONSTELLATION_SCALE(-2.0f), FP_CONSTELLATION_SCALE(-3.0f)}, /* 0x26 */
|
||||
{FP_CONSTELLATION_SCALE( 3.0f), FP_CONSTELLATION_SCALE( 4.0f)}, /* 0x27 */
|
||||
{FP_CONSTELLATION_SCALE( 4.0f), FP_CONSTELLATION_SCALE( 1.0f)}, /* 0x28 */
|
||||
{FP_CONSTELLATION_SCALE(-3.0f), FP_CONSTELLATION_SCALE(-2.0f)}, /* 0x29 */
|
||||
{FP_CONSTELLATION_SCALE(-2.0f), FP_CONSTELLATION_SCALE( 3.0f)}, /* 0x2A */
|
||||
{FP_CONSTELLATION_SCALE( 1.0f), FP_CONSTELLATION_SCALE(-4.0f)}, /* 0x2B */
|
||||
{FP_CONSTELLATION_SCALE(-4.0f), FP_CONSTELLATION_SCALE(-1.0f)}, /* 0x2C */
|
||||
{FP_CONSTELLATION_SCALE( 3.0f), FP_CONSTELLATION_SCALE( 2.0f)}, /* 0x2D */
|
||||
{FP_CONSTELLATION_SCALE( 2.0f), FP_CONSTELLATION_SCALE(-3.0f)}, /* 0x2E */
|
||||
{FP_CONSTELLATION_SCALE(-1.0f), FP_CONSTELLATION_SCALE( 4.0f)}, /* 0x2F */
|
||||
{FP_CONSTELLATION_SCALE( 0.0f), FP_CONSTELLATION_SCALE(-3.0f)}, /* 0x30 */
|
||||
{FP_CONSTELLATION_SCALE( 1.0f), FP_CONSTELLATION_SCALE( 2.0f)}, /* 0x31 */
|
||||
{FP_CONSTELLATION_SCALE( 2.0f), FP_CONSTELLATION_SCALE(-1.0f)}, /* 0x32 */
|
||||
{FP_CONSTELLATION_SCALE(-3.0f), FP_CONSTELLATION_SCALE( 0.0f)}, /* 0x33 */
|
||||
{FP_CONSTELLATION_SCALE( 0.0f), FP_CONSTELLATION_SCALE( 3.0f)}, /* 0x34 */
|
||||
{FP_CONSTELLATION_SCALE(-1.0f), FP_CONSTELLATION_SCALE(-2.0f)}, /* 0x35 */
|
||||
{FP_CONSTELLATION_SCALE(-2.0f), FP_CONSTELLATION_SCALE( 1.0f)}, /* 0x36 */
|
||||
{FP_CONSTELLATION_SCALE( 3.0f), FP_CONSTELLATION_SCALE( 0.0f)}, /* 0x37 */
|
||||
{FP_CONSTELLATION_SCALE( 0.0f), FP_CONSTELLATION_SCALE( 1.0f)}, /* 0x38 */
|
||||
{FP_CONSTELLATION_SCALE( 1.0f), FP_CONSTELLATION_SCALE(-2.0f)}, /* 0x39 */
|
||||
{FP_CONSTELLATION_SCALE(-2.0f), FP_CONSTELLATION_SCALE(-1.0f)}, /* 0x3A */
|
||||
{FP_CONSTELLATION_SCALE( 1.0f), FP_CONSTELLATION_SCALE( 0.0f)}, /* 0x3B */
|
||||
{FP_CONSTELLATION_SCALE( 0.0f), FP_CONSTELLATION_SCALE(-1.0f)}, /* 0x3C */
|
||||
{FP_CONSTELLATION_SCALE(-1.0f), FP_CONSTELLATION_SCALE( 2.0f)}, /* 0x3D */
|
||||
{FP_CONSTELLATION_SCALE( 2.0f), FP_CONSTELLATION_SCALE( 1.0f)}, /* 0x3E */
|
||||
{FP_CONSTELLATION_SCALE(-1.0f), FP_CONSTELLATION_SCALE( 0.0f)}, /* 0x3F */
|
||||
{FP_CONSTELLATION_SCALE( 8.0f), FP_CONSTELLATION_SCALE(-3.0f)}, /* 0x40 */
|
||||
{FP_CONSTELLATION_SCALE(-7.0f), FP_CONSTELLATION_SCALE( 2.0f)}, /* 0x41 */
|
||||
{FP_CONSTELLATION_SCALE( 2.0f), FP_CONSTELLATION_SCALE( 7.0f)}, /* 0x42 */
|
||||
{FP_CONSTELLATION_SCALE(-3.0f), FP_CONSTELLATION_SCALE(-8.0f)}, /* 0x43 */
|
||||
{FP_CONSTELLATION_SCALE(-8.0f), FP_CONSTELLATION_SCALE( 3.0f)}, /* 0x44 */
|
||||
{FP_CONSTELLATION_SCALE( 7.0f), FP_CONSTELLATION_SCALE(-2.0f)}, /* 0x45 */
|
||||
{FP_CONSTELLATION_SCALE(-2.0f), FP_CONSTELLATION_SCALE(-7.0f)}, /* 0x46 */
|
||||
{FP_CONSTELLATION_SCALE( 3.0f), FP_CONSTELLATION_SCALE( 8.0f)}, /* 0x47 */
|
||||
{FP_CONSTELLATION_SCALE( 8.0f), FP_CONSTELLATION_SCALE( 1.0f)}, /* 0x48 */
|
||||
{FP_CONSTELLATION_SCALE(-7.0f), FP_CONSTELLATION_SCALE(-2.0f)}, /* 0x49 */
|
||||
{FP_CONSTELLATION_SCALE(-2.0f), FP_CONSTELLATION_SCALE( 7.0f)}, /* 0x4A */
|
||||
{FP_CONSTELLATION_SCALE( 1.0f), FP_CONSTELLATION_SCALE(-8.0f)}, /* 0x4B */
|
||||
{FP_CONSTELLATION_SCALE(-8.0f), FP_CONSTELLATION_SCALE(-1.0f)}, /* 0x4C */
|
||||
{FP_CONSTELLATION_SCALE( 7.0f), FP_CONSTELLATION_SCALE( 2.0f)}, /* 0x4D */
|
||||
{FP_CONSTELLATION_SCALE( 2.0f), FP_CONSTELLATION_SCALE(-7.0f)}, /* 0x4E */
|
||||
{FP_CONSTELLATION_SCALE(-1.0f), FP_CONSTELLATION_SCALE( 8.0f)}, /* 0x4F */
|
||||
{FP_CONSTELLATION_SCALE(-4.0f), FP_CONSTELLATION_SCALE(-7.0f)}, /* 0x50 */
|
||||
{FP_CONSTELLATION_SCALE( 5.0f), FP_CONSTELLATION_SCALE( 6.0f)}, /* 0x51 */
|
||||
{FP_CONSTELLATION_SCALE( 6.0f), FP_CONSTELLATION_SCALE(-5.0f)}, /* 0x52 */
|
||||
{FP_CONSTELLATION_SCALE(-7.0f), FP_CONSTELLATION_SCALE( 4.0f)}, /* 0x53 */
|
||||
{FP_CONSTELLATION_SCALE( 4.0f), FP_CONSTELLATION_SCALE( 7.0f)}, /* 0x54 */
|
||||
{FP_CONSTELLATION_SCALE(-5.0f), FP_CONSTELLATION_SCALE(-6.0f)}, /* 0x55 */
|
||||
{FP_CONSTELLATION_SCALE(-6.0f), FP_CONSTELLATION_SCALE( 5.0f)}, /* 0x56 */
|
||||
{FP_CONSTELLATION_SCALE( 7.0f), FP_CONSTELLATION_SCALE(-4.0f)}, /* 0x57 */
|
||||
{FP_CONSTELLATION_SCALE(-4.0f), FP_CONSTELLATION_SCALE( 5.0f)}, /* 0x58 */
|
||||
{FP_CONSTELLATION_SCALE( 5.0f), FP_CONSTELLATION_SCALE(-6.0f)}, /* 0x59 */
|
||||
{FP_CONSTELLATION_SCALE(-6.0f), FP_CONSTELLATION_SCALE(-5.0f)}, /* 0x5A */
|
||||
{FP_CONSTELLATION_SCALE( 5.0f), FP_CONSTELLATION_SCALE( 4.0f)}, /* 0x5B */
|
||||
{FP_CONSTELLATION_SCALE( 4.0f), FP_CONSTELLATION_SCALE(-5.0f)}, /* 0x5C */
|
||||
{FP_CONSTELLATION_SCALE(-5.0f), FP_CONSTELLATION_SCALE( 6.0f)}, /* 0x5D */
|
||||
{FP_CONSTELLATION_SCALE( 6.0f), FP_CONSTELLATION_SCALE( 5.0f)}, /* 0x5E */
|
||||
{FP_CONSTELLATION_SCALE(-5.0f), FP_CONSTELLATION_SCALE(-4.0f)}, /* 0x5F */
|
||||
{FP_CONSTELLATION_SCALE( 4.0f), FP_CONSTELLATION_SCALE(-7.0f)}, /* 0x60 */
|
||||
{FP_CONSTELLATION_SCALE(-3.0f), FP_CONSTELLATION_SCALE( 6.0f)}, /* 0x61 */
|
||||
{FP_CONSTELLATION_SCALE( 6.0f), FP_CONSTELLATION_SCALE( 3.0f)}, /* 0x62 */
|
||||
{FP_CONSTELLATION_SCALE(-7.0f), FP_CONSTELLATION_SCALE(-4.0f)}, /* 0x63 */
|
||||
{FP_CONSTELLATION_SCALE(-4.0f), FP_CONSTELLATION_SCALE( 7.0f)}, /* 0x64 */
|
||||
{FP_CONSTELLATION_SCALE( 3.0f), FP_CONSTELLATION_SCALE(-6.0f)}, /* 0x65 */
|
||||
{FP_CONSTELLATION_SCALE(-6.0f), FP_CONSTELLATION_SCALE(-3.0f)}, /* 0x66 */
|
||||
{FP_CONSTELLATION_SCALE( 7.0f), FP_CONSTELLATION_SCALE( 4.0f)}, /* 0x67 */
|
||||
{FP_CONSTELLATION_SCALE( 4.0f), FP_CONSTELLATION_SCALE( 5.0f)}, /* 0x68 */
|
||||
{FP_CONSTELLATION_SCALE(-3.0f), FP_CONSTELLATION_SCALE(-6.0f)}, /* 0x69 */
|
||||
{FP_CONSTELLATION_SCALE(-6.0f), FP_CONSTELLATION_SCALE( 3.0f)}, /* 0x6A */
|
||||
{FP_CONSTELLATION_SCALE( 5.0f), FP_CONSTELLATION_SCALE(-4.0f)}, /* 0x6B */
|
||||
{FP_CONSTELLATION_SCALE(-4.0f), FP_CONSTELLATION_SCALE(-5.0f)}, /* 0x6C */
|
||||
{FP_CONSTELLATION_SCALE( 3.0f), FP_CONSTELLATION_SCALE( 6.0f)}, /* 0x6D */
|
||||
{FP_CONSTELLATION_SCALE( 6.0f), FP_CONSTELLATION_SCALE(-3.0f)}, /* 0x6E */
|
||||
{FP_CONSTELLATION_SCALE(-5.0f), FP_CONSTELLATION_SCALE( 4.0f)}, /* 0x6F */
|
||||
{FP_CONSTELLATION_SCALE( 0.0f), FP_CONSTELLATION_SCALE(-7.0f)}, /* 0x70 */
|
||||
{FP_CONSTELLATION_SCALE( 1.0f), FP_CONSTELLATION_SCALE( 6.0f)}, /* 0x71 */
|
||||
{FP_CONSTELLATION_SCALE( 6.0f), FP_CONSTELLATION_SCALE(-1.0f)}, /* 0x72 */
|
||||
{FP_CONSTELLATION_SCALE(-7.0f), FP_CONSTELLATION_SCALE( 0.0f)}, /* 0x73 */
|
||||
{FP_CONSTELLATION_SCALE( 0.0f), FP_CONSTELLATION_SCALE( 7.0f)}, /* 0x74 */
|
||||
{FP_CONSTELLATION_SCALE(-1.0f), FP_CONSTELLATION_SCALE(-6.0f)}, /* 0x75 */
|
||||
{FP_CONSTELLATION_SCALE(-6.0f), FP_CONSTELLATION_SCALE( 1.0f)}, /* 0x76 */
|
||||
{FP_CONSTELLATION_SCALE( 7.0f), FP_CONSTELLATION_SCALE( 0.0f)}, /* 0x77 */
|
||||
{FP_CONSTELLATION_SCALE( 0.0f), FP_CONSTELLATION_SCALE( 5.0f)}, /* 0x78 */
|
||||
{FP_CONSTELLATION_SCALE( 1.0f), FP_CONSTELLATION_SCALE(-6.0f)}, /* 0x79 */
|
||||
{FP_CONSTELLATION_SCALE(-6.0f), FP_CONSTELLATION_SCALE(-1.0f)}, /* 0x7A */
|
||||
{FP_CONSTELLATION_SCALE( 5.0f), FP_CONSTELLATION_SCALE( 0.0f)}, /* 0x7B */
|
||||
{FP_CONSTELLATION_SCALE( 0.0f), FP_CONSTELLATION_SCALE(-5.0f)}, /* 0x7C */
|
||||
{FP_CONSTELLATION_SCALE(-1.0f), FP_CONSTELLATION_SCALE( 6.0f)}, /* 0x7D */
|
||||
{FP_CONSTELLATION_SCALE( 6.0f), FP_CONSTELLATION_SCALE( 1.0f)}, /* 0x7E */
|
||||
{FP_CONSTELLATION_SCALE(-5.0f), FP_CONSTELLATION_SCALE( 0.0f)} /* 0x7F */
|
||||
};
|
||||
|
||||
#if defined(SPANDSP_USE_FIXED_POINTx)
|
||||
|
@ -167,70 +166,70 @@ static const complexi16_t v17_v32bis_12000_constellation[64] =
|
|||
static const complexf_t v17_v32bis_12000_constellation[64] =
|
||||
#endif
|
||||
{
|
||||
{FP_SCALE( 7.0f), FP_SCALE( 1.0f)}, /* 0x00 */
|
||||
{FP_SCALE(-5.0f), FP_SCALE(-1.0f)}, /* 0x01 */
|
||||
{FP_SCALE(-1.0f), FP_SCALE( 5.0f)}, /* 0x02 */
|
||||
{FP_SCALE( 1.0f), FP_SCALE(-7.0f)}, /* 0x03 */
|
||||
{FP_SCALE(-7.0f), FP_SCALE(-1.0f)}, /* 0x04 */
|
||||
{FP_SCALE( 5.0f), FP_SCALE( 1.0f)}, /* 0x05 */
|
||||
{FP_SCALE( 1.0f), FP_SCALE(-5.0f)}, /* 0x06 */
|
||||
{FP_SCALE(-1.0f), FP_SCALE( 7.0f)}, /* 0x07 */
|
||||
{FP_SCALE( 3.0f), FP_SCALE(-3.0f)}, /* 0x08 */
|
||||
{FP_SCALE(-1.0f), FP_SCALE( 3.0f)}, /* 0x09 */
|
||||
{FP_SCALE( 3.0f), FP_SCALE( 1.0f)}, /* 0x0A */
|
||||
{FP_SCALE(-3.0f), FP_SCALE(-3.0f)}, /* 0x0B */
|
||||
{FP_SCALE(-3.0f), FP_SCALE( 3.0f)}, /* 0x0C */
|
||||
{FP_SCALE( 1.0f), FP_SCALE(-3.0f)}, /* 0x0D */
|
||||
{FP_SCALE(-3.0f), FP_SCALE(-1.0f)}, /* 0x0E */
|
||||
{FP_SCALE( 3.0f), FP_SCALE( 3.0f)}, /* 0x0F */
|
||||
{FP_SCALE( 7.0f), FP_SCALE(-7.0f)}, /* 0x10 */
|
||||
{FP_SCALE(-5.0f), FP_SCALE( 7.0f)}, /* 0x11 */
|
||||
{FP_SCALE( 7.0f), FP_SCALE( 5.0f)}, /* 0x12 */
|
||||
{FP_SCALE(-7.0f), FP_SCALE(-7.0f)}, /* 0x13 */
|
||||
{FP_SCALE(-7.0f), FP_SCALE( 7.0f)}, /* 0x14 */
|
||||
{FP_SCALE( 5.0f), FP_SCALE(-7.0f)}, /* 0x15 */
|
||||
{FP_SCALE(-7.0f), FP_SCALE(-5.0f)}, /* 0x16 */
|
||||
{FP_SCALE( 7.0f), FP_SCALE( 7.0f)}, /* 0x17 */
|
||||
{FP_SCALE(-1.0f), FP_SCALE(-7.0f)}, /* 0x18 */
|
||||
{FP_SCALE( 3.0f), FP_SCALE( 7.0f)}, /* 0x19 */
|
||||
{FP_SCALE( 7.0f), FP_SCALE(-3.0f)}, /* 0x1A */
|
||||
{FP_SCALE(-7.0f), FP_SCALE( 1.0f)}, /* 0x1B */
|
||||
{FP_SCALE( 1.0f), FP_SCALE( 7.0f)}, /* 0x1C */
|
||||
{FP_SCALE(-3.0f), FP_SCALE(-7.0f)}, /* 0x1D */
|
||||
{FP_SCALE(-7.0f), FP_SCALE( 3.0f)}, /* 0x1E */
|
||||
{FP_SCALE( 7.0f), FP_SCALE(-1.0f)}, /* 0x1F */
|
||||
{FP_SCALE( 3.0f), FP_SCALE( 5.0f)}, /* 0x20 */
|
||||
{FP_SCALE(-1.0f), FP_SCALE(-5.0f)}, /* 0x21 */
|
||||
{FP_SCALE(-5.0f), FP_SCALE( 1.0f)}, /* 0x22 */
|
||||
{FP_SCALE( 5.0f), FP_SCALE(-3.0f)}, /* 0x23 */
|
||||
{FP_SCALE(-3.0f), FP_SCALE(-5.0f)}, /* 0x24 */
|
||||
{FP_SCALE( 1.0f), FP_SCALE( 5.0f)}, /* 0x25 */
|
||||
{FP_SCALE( 5.0f), FP_SCALE(-1.0f)}, /* 0x26 */
|
||||
{FP_SCALE(-5.0f), FP_SCALE( 3.0f)}, /* 0x27 */
|
||||
{FP_SCALE(-1.0f), FP_SCALE( 1.0f)}, /* 0x28 */
|
||||
{FP_SCALE( 3.0f), FP_SCALE(-1.0f)}, /* 0x29 */
|
||||
{FP_SCALE(-1.0f), FP_SCALE(-3.0f)}, /* 0x2A */
|
||||
{FP_SCALE( 1.0f), FP_SCALE( 1.0f)}, /* 0x2B */
|
||||
{FP_SCALE( 1.0f), FP_SCALE(-1.0f)}, /* 0x2C */
|
||||
{FP_SCALE(-3.0f), FP_SCALE( 1.0f)}, /* 0x2D */
|
||||
{FP_SCALE( 1.0f), FP_SCALE( 3.0f)}, /* 0x2E */
|
||||
{FP_SCALE(-1.0f), FP_SCALE(-1.0f)}, /* 0x2F */
|
||||
{FP_SCALE(-5.0f), FP_SCALE( 5.0f)}, /* 0x30 */
|
||||
{FP_SCALE( 7.0f), FP_SCALE(-5.0f)}, /* 0x31 */
|
||||
{FP_SCALE(-5.0f), FP_SCALE(-7.0f)}, /* 0x32 */
|
||||
{FP_SCALE( 5.0f), FP_SCALE( 5.0f)}, /* 0x33 */
|
||||
{FP_SCALE( 5.0f), FP_SCALE(-5.0f)}, /* 0x34 */
|
||||
{FP_SCALE(-7.0f), FP_SCALE( 5.0f)}, /* 0x35 */
|
||||
{FP_SCALE( 5.0f), FP_SCALE( 7.0f)}, /* 0x36 */
|
||||
{FP_SCALE(-5.0f), FP_SCALE(-5.0f)}, /* 0x37 */
|
||||
{FP_SCALE(-5.0f), FP_SCALE(-3.0f)}, /* 0x38 */
|
||||
{FP_SCALE( 7.0f), FP_SCALE( 3.0f)}, /* 0x39 */
|
||||
{FP_SCALE( 3.0f), FP_SCALE(-7.0f)}, /* 0x3A */
|
||||
{FP_SCALE(-3.0f), FP_SCALE( 5.0f)}, /* 0x3B */
|
||||
{FP_SCALE( 5.0f), FP_SCALE( 3.0f)}, /* 0x3C */
|
||||
{FP_SCALE(-7.0f), FP_SCALE(-3.0f)}, /* 0x3D */
|
||||
{FP_SCALE(-3.0f), FP_SCALE( 7.0f)}, /* 0x3E */
|
||||
{FP_SCALE( 3.0f), FP_SCALE(-5.0f)} /* 0x3F */
|
||||
{FP_CONSTELLATION_SCALE( 7.0f), FP_CONSTELLATION_SCALE( 1.0f)}, /* 0x00 */
|
||||
{FP_CONSTELLATION_SCALE(-5.0f), FP_CONSTELLATION_SCALE(-1.0f)}, /* 0x01 */
|
||||
{FP_CONSTELLATION_SCALE(-1.0f), FP_CONSTELLATION_SCALE( 5.0f)}, /* 0x02 */
|
||||
{FP_CONSTELLATION_SCALE( 1.0f), FP_CONSTELLATION_SCALE(-7.0f)}, /* 0x03 */
|
||||
{FP_CONSTELLATION_SCALE(-7.0f), FP_CONSTELLATION_SCALE(-1.0f)}, /* 0x04 */
|
||||
{FP_CONSTELLATION_SCALE( 5.0f), FP_CONSTELLATION_SCALE( 1.0f)}, /* 0x05 */
|
||||
{FP_CONSTELLATION_SCALE( 1.0f), FP_CONSTELLATION_SCALE(-5.0f)}, /* 0x06 */
|
||||
{FP_CONSTELLATION_SCALE(-1.0f), FP_CONSTELLATION_SCALE( 7.0f)}, /* 0x07 */
|
||||
{FP_CONSTELLATION_SCALE( 3.0f), FP_CONSTELLATION_SCALE(-3.0f)}, /* 0x08 */
|
||||
{FP_CONSTELLATION_SCALE(-1.0f), FP_CONSTELLATION_SCALE( 3.0f)}, /* 0x09 */
|
||||
{FP_CONSTELLATION_SCALE( 3.0f), FP_CONSTELLATION_SCALE( 1.0f)}, /* 0x0A */
|
||||
{FP_CONSTELLATION_SCALE(-3.0f), FP_CONSTELLATION_SCALE(-3.0f)}, /* 0x0B */
|
||||
{FP_CONSTELLATION_SCALE(-3.0f), FP_CONSTELLATION_SCALE( 3.0f)}, /* 0x0C */
|
||||
{FP_CONSTELLATION_SCALE( 1.0f), FP_CONSTELLATION_SCALE(-3.0f)}, /* 0x0D */
|
||||
{FP_CONSTELLATION_SCALE(-3.0f), FP_CONSTELLATION_SCALE(-1.0f)}, /* 0x0E */
|
||||
{FP_CONSTELLATION_SCALE( 3.0f), FP_CONSTELLATION_SCALE( 3.0f)}, /* 0x0F */
|
||||
{FP_CONSTELLATION_SCALE( 7.0f), FP_CONSTELLATION_SCALE(-7.0f)}, /* 0x10 */
|
||||
{FP_CONSTELLATION_SCALE(-5.0f), FP_CONSTELLATION_SCALE( 7.0f)}, /* 0x11 */
|
||||
{FP_CONSTELLATION_SCALE( 7.0f), FP_CONSTELLATION_SCALE( 5.0f)}, /* 0x12 */
|
||||
{FP_CONSTELLATION_SCALE(-7.0f), FP_CONSTELLATION_SCALE(-7.0f)}, /* 0x13 */
|
||||
{FP_CONSTELLATION_SCALE(-7.0f), FP_CONSTELLATION_SCALE( 7.0f)}, /* 0x14 */
|
||||
{FP_CONSTELLATION_SCALE( 5.0f), FP_CONSTELLATION_SCALE(-7.0f)}, /* 0x15 */
|
||||
{FP_CONSTELLATION_SCALE(-7.0f), FP_CONSTELLATION_SCALE(-5.0f)}, /* 0x16 */
|
||||
{FP_CONSTELLATION_SCALE( 7.0f), FP_CONSTELLATION_SCALE( 7.0f)}, /* 0x17 */
|
||||
{FP_CONSTELLATION_SCALE(-1.0f), FP_CONSTELLATION_SCALE(-7.0f)}, /* 0x18 */
|
||||
{FP_CONSTELLATION_SCALE( 3.0f), FP_CONSTELLATION_SCALE( 7.0f)}, /* 0x19 */
|
||||
{FP_CONSTELLATION_SCALE( 7.0f), FP_CONSTELLATION_SCALE(-3.0f)}, /* 0x1A */
|
||||
{FP_CONSTELLATION_SCALE(-7.0f), FP_CONSTELLATION_SCALE( 1.0f)}, /* 0x1B */
|
||||
{FP_CONSTELLATION_SCALE( 1.0f), FP_CONSTELLATION_SCALE( 7.0f)}, /* 0x1C */
|
||||
{FP_CONSTELLATION_SCALE(-3.0f), FP_CONSTELLATION_SCALE(-7.0f)}, /* 0x1D */
|
||||
{FP_CONSTELLATION_SCALE(-7.0f), FP_CONSTELLATION_SCALE( 3.0f)}, /* 0x1E */
|
||||
{FP_CONSTELLATION_SCALE( 7.0f), FP_CONSTELLATION_SCALE(-1.0f)}, /* 0x1F */
|
||||
{FP_CONSTELLATION_SCALE( 3.0f), FP_CONSTELLATION_SCALE( 5.0f)}, /* 0x20 */
|
||||
{FP_CONSTELLATION_SCALE(-1.0f), FP_CONSTELLATION_SCALE(-5.0f)}, /* 0x21 */
|
||||
{FP_CONSTELLATION_SCALE(-5.0f), FP_CONSTELLATION_SCALE( 1.0f)}, /* 0x22 */
|
||||
{FP_CONSTELLATION_SCALE( 5.0f), FP_CONSTELLATION_SCALE(-3.0f)}, /* 0x23 */
|
||||
{FP_CONSTELLATION_SCALE(-3.0f), FP_CONSTELLATION_SCALE(-5.0f)}, /* 0x24 */
|
||||
{FP_CONSTELLATION_SCALE( 1.0f), FP_CONSTELLATION_SCALE( 5.0f)}, /* 0x25 */
|
||||
{FP_CONSTELLATION_SCALE( 5.0f), FP_CONSTELLATION_SCALE(-1.0f)}, /* 0x26 */
|
||||
{FP_CONSTELLATION_SCALE(-5.0f), FP_CONSTELLATION_SCALE( 3.0f)}, /* 0x27 */
|
||||
{FP_CONSTELLATION_SCALE(-1.0f), FP_CONSTELLATION_SCALE( 1.0f)}, /* 0x28 */
|
||||
{FP_CONSTELLATION_SCALE( 3.0f), FP_CONSTELLATION_SCALE(-1.0f)}, /* 0x29 */
|
||||
{FP_CONSTELLATION_SCALE(-1.0f), FP_CONSTELLATION_SCALE(-3.0f)}, /* 0x2A */
|
||||
{FP_CONSTELLATION_SCALE( 1.0f), FP_CONSTELLATION_SCALE( 1.0f)}, /* 0x2B */
|
||||
{FP_CONSTELLATION_SCALE( 1.0f), FP_CONSTELLATION_SCALE(-1.0f)}, /* 0x2C */
|
||||
{FP_CONSTELLATION_SCALE(-3.0f), FP_CONSTELLATION_SCALE( 1.0f)}, /* 0x2D */
|
||||
{FP_CONSTELLATION_SCALE( 1.0f), FP_CONSTELLATION_SCALE( 3.0f)}, /* 0x2E */
|
||||
{FP_CONSTELLATION_SCALE(-1.0f), FP_CONSTELLATION_SCALE(-1.0f)}, /* 0x2F */
|
||||
{FP_CONSTELLATION_SCALE(-5.0f), FP_CONSTELLATION_SCALE( 5.0f)}, /* 0x30 */
|
||||
{FP_CONSTELLATION_SCALE( 7.0f), FP_CONSTELLATION_SCALE(-5.0f)}, /* 0x31 */
|
||||
{FP_CONSTELLATION_SCALE(-5.0f), FP_CONSTELLATION_SCALE(-7.0f)}, /* 0x32 */
|
||||
{FP_CONSTELLATION_SCALE( 5.0f), FP_CONSTELLATION_SCALE( 5.0f)}, /* 0x33 */
|
||||
{FP_CONSTELLATION_SCALE( 5.0f), FP_CONSTELLATION_SCALE(-5.0f)}, /* 0x34 */
|
||||
{FP_CONSTELLATION_SCALE(-7.0f), FP_CONSTELLATION_SCALE( 5.0f)}, /* 0x35 */
|
||||
{FP_CONSTELLATION_SCALE( 5.0f), FP_CONSTELLATION_SCALE( 7.0f)}, /* 0x36 */
|
||||
{FP_CONSTELLATION_SCALE(-5.0f), FP_CONSTELLATION_SCALE(-5.0f)}, /* 0x37 */
|
||||
{FP_CONSTELLATION_SCALE(-5.0f), FP_CONSTELLATION_SCALE(-3.0f)}, /* 0x38 */
|
||||
{FP_CONSTELLATION_SCALE( 7.0f), FP_CONSTELLATION_SCALE( 3.0f)}, /* 0x39 */
|
||||
{FP_CONSTELLATION_SCALE( 3.0f), FP_CONSTELLATION_SCALE(-7.0f)}, /* 0x3A */
|
||||
{FP_CONSTELLATION_SCALE(-3.0f), FP_CONSTELLATION_SCALE( 5.0f)}, /* 0x3B */
|
||||
{FP_CONSTELLATION_SCALE( 5.0f), FP_CONSTELLATION_SCALE( 3.0f)}, /* 0x3C */
|
||||
{FP_CONSTELLATION_SCALE(-7.0f), FP_CONSTELLATION_SCALE(-3.0f)}, /* 0x3D */
|
||||
{FP_CONSTELLATION_SCALE(-3.0f), FP_CONSTELLATION_SCALE( 7.0f)}, /* 0x3E */
|
||||
{FP_CONSTELLATION_SCALE( 3.0f), FP_CONSTELLATION_SCALE(-5.0f)} /* 0x3F */
|
||||
};
|
||||
|
||||
#if defined(SPANDSP_USE_FIXED_POINTx)
|
||||
|
@ -239,38 +238,38 @@ static const complexi16_t v17_v32bis_9600_constellation[32] =
|
|||
static const complexf_t v17_v32bis_9600_constellation[32] =
|
||||
#endif
|
||||
{
|
||||
{FP_SCALE(-8.0f), FP_SCALE( 2.0f)}, /* 0x00 */
|
||||
{FP_SCALE(-6.0f), FP_SCALE(-4.0f)}, /* 0x01 */
|
||||
{FP_SCALE(-4.0f), FP_SCALE( 6.0f)}, /* 0x02 */
|
||||
{FP_SCALE( 2.0f), FP_SCALE( 8.0f)}, /* 0x03 */
|
||||
{FP_SCALE( 8.0f), FP_SCALE(-2.0f)}, /* 0x04 */
|
||||
{FP_SCALE( 6.0f), FP_SCALE( 4.0f)}, /* 0x05 */
|
||||
{FP_SCALE( 4.0f), FP_SCALE(-6.0f)}, /* 0x06 */
|
||||
{FP_SCALE(-2.0f), FP_SCALE(-8.0f)}, /* 0x07 */
|
||||
{FP_SCALE( 0.0f), FP_SCALE( 2.0f)}, /* 0x08 */
|
||||
{FP_SCALE(-6.0f), FP_SCALE( 4.0f)}, /* 0x09 */
|
||||
{FP_SCALE( 4.0f), FP_SCALE( 6.0f)}, /* 0x0A */
|
||||
{FP_SCALE( 2.0f), FP_SCALE( 0.0f)}, /* 0x0B */
|
||||
{FP_SCALE( 0.0f), FP_SCALE(-2.0f)}, /* 0x0C */
|
||||
{FP_SCALE( 6.0f), FP_SCALE(-4.0f)}, /* 0x0D */
|
||||
{FP_SCALE(-4.0f), FP_SCALE(-6.0f)}, /* 0x0E */
|
||||
{FP_SCALE(-2.0f), FP_SCALE( 0.0f)}, /* 0x0F */
|
||||
{FP_SCALE( 0.0f), FP_SCALE(-6.0f)}, /* 0x10 */
|
||||
{FP_SCALE( 2.0f), FP_SCALE(-4.0f)}, /* 0x11 */
|
||||
{FP_SCALE(-4.0f), FP_SCALE(-2.0f)}, /* 0x12 */
|
||||
{FP_SCALE(-6.0f), FP_SCALE( 0.0f)}, /* 0x13 */
|
||||
{FP_SCALE( 0.0f), FP_SCALE( 6.0f)}, /* 0x14 */
|
||||
{FP_SCALE(-2.0f), FP_SCALE( 4.0f)}, /* 0x15 */
|
||||
{FP_SCALE( 4.0f), FP_SCALE( 2.0f)}, /* 0x16 */
|
||||
{FP_SCALE( 6.0f), FP_SCALE( 0.0f)}, /* 0x17 */
|
||||
{FP_SCALE( 8.0f), FP_SCALE( 2.0f)}, /* 0x18 */
|
||||
{FP_SCALE( 2.0f), FP_SCALE( 4.0f)}, /* 0x19 */
|
||||
{FP_SCALE( 4.0f), FP_SCALE(-2.0f)}, /* 0x1A */
|
||||
{FP_SCALE( 2.0f), FP_SCALE(-8.0f)}, /* 0x1B */
|
||||
{FP_SCALE(-8.0f), FP_SCALE(-2.0f)}, /* 0x1C */
|
||||
{FP_SCALE(-2.0f), FP_SCALE(-4.0f)}, /* 0x1D */
|
||||
{FP_SCALE(-4.0f), FP_SCALE( 2.0f)}, /* 0x1E */
|
||||
{FP_SCALE(-2.0f), FP_SCALE( 8.0f)} /* 0x1F */
|
||||
{FP_CONSTELLATION_SCALE(-8.0f), FP_CONSTELLATION_SCALE( 2.0f)}, /* 0x00 */
|
||||
{FP_CONSTELLATION_SCALE(-6.0f), FP_CONSTELLATION_SCALE(-4.0f)}, /* 0x01 */
|
||||
{FP_CONSTELLATION_SCALE(-4.0f), FP_CONSTELLATION_SCALE( 6.0f)}, /* 0x02 */
|
||||
{FP_CONSTELLATION_SCALE( 2.0f), FP_CONSTELLATION_SCALE( 8.0f)}, /* 0x03 */
|
||||
{FP_CONSTELLATION_SCALE( 8.0f), FP_CONSTELLATION_SCALE(-2.0f)}, /* 0x04 */
|
||||
{FP_CONSTELLATION_SCALE( 6.0f), FP_CONSTELLATION_SCALE( 4.0f)}, /* 0x05 */
|
||||
{FP_CONSTELLATION_SCALE( 4.0f), FP_CONSTELLATION_SCALE(-6.0f)}, /* 0x06 */
|
||||
{FP_CONSTELLATION_SCALE(-2.0f), FP_CONSTELLATION_SCALE(-8.0f)}, /* 0x07 */
|
||||
{FP_CONSTELLATION_SCALE( 0.0f), FP_CONSTELLATION_SCALE( 2.0f)}, /* 0x08 */
|
||||
{FP_CONSTELLATION_SCALE(-6.0f), FP_CONSTELLATION_SCALE( 4.0f)}, /* 0x09 */
|
||||
{FP_CONSTELLATION_SCALE( 4.0f), FP_CONSTELLATION_SCALE( 6.0f)}, /* 0x0A */
|
||||
{FP_CONSTELLATION_SCALE( 2.0f), FP_CONSTELLATION_SCALE( 0.0f)}, /* 0x0B */
|
||||
{FP_CONSTELLATION_SCALE( 0.0f), FP_CONSTELLATION_SCALE(-2.0f)}, /* 0x0C */
|
||||
{FP_CONSTELLATION_SCALE( 6.0f), FP_CONSTELLATION_SCALE(-4.0f)}, /* 0x0D */
|
||||
{FP_CONSTELLATION_SCALE(-4.0f), FP_CONSTELLATION_SCALE(-6.0f)}, /* 0x0E */
|
||||
{FP_CONSTELLATION_SCALE(-2.0f), FP_CONSTELLATION_SCALE( 0.0f)}, /* 0x0F */
|
||||
{FP_CONSTELLATION_SCALE( 0.0f), FP_CONSTELLATION_SCALE(-6.0f)}, /* 0x10 */
|
||||
{FP_CONSTELLATION_SCALE( 2.0f), FP_CONSTELLATION_SCALE(-4.0f)}, /* 0x11 */
|
||||
{FP_CONSTELLATION_SCALE(-4.0f), FP_CONSTELLATION_SCALE(-2.0f)}, /* 0x12 */
|
||||
{FP_CONSTELLATION_SCALE(-6.0f), FP_CONSTELLATION_SCALE( 0.0f)}, /* 0x13 */
|
||||
{FP_CONSTELLATION_SCALE( 0.0f), FP_CONSTELLATION_SCALE( 6.0f)}, /* 0x14 */
|
||||
{FP_CONSTELLATION_SCALE(-2.0f), FP_CONSTELLATION_SCALE( 4.0f)}, /* 0x15 */
|
||||
{FP_CONSTELLATION_SCALE( 4.0f), FP_CONSTELLATION_SCALE( 2.0f)}, /* 0x16 */
|
||||
{FP_CONSTELLATION_SCALE( 6.0f), FP_CONSTELLATION_SCALE( 0.0f)}, /* 0x17 */
|
||||
{FP_CONSTELLATION_SCALE( 8.0f), FP_CONSTELLATION_SCALE( 2.0f)}, /* 0x18 */
|
||||
{FP_CONSTELLATION_SCALE( 2.0f), FP_CONSTELLATION_SCALE( 4.0f)}, /* 0x19 */
|
||||
{FP_CONSTELLATION_SCALE( 4.0f), FP_CONSTELLATION_SCALE(-2.0f)}, /* 0x1A */
|
||||
{FP_CONSTELLATION_SCALE( 2.0f), FP_CONSTELLATION_SCALE(-8.0f)}, /* 0x1B */
|
||||
{FP_CONSTELLATION_SCALE(-8.0f), FP_CONSTELLATION_SCALE(-2.0f)}, /* 0x1C */
|
||||
{FP_CONSTELLATION_SCALE(-2.0f), FP_CONSTELLATION_SCALE(-4.0f)}, /* 0x1D */
|
||||
{FP_CONSTELLATION_SCALE(-4.0f), FP_CONSTELLATION_SCALE( 2.0f)}, /* 0x1E */
|
||||
{FP_CONSTELLATION_SCALE(-2.0f), FP_CONSTELLATION_SCALE( 8.0f)} /* 0x1F */
|
||||
};
|
||||
|
||||
#if defined(SPANDSP_USE_FIXED_POINTx)
|
||||
|
@ -279,22 +278,22 @@ static const complexi16_t v17_v32bis_7200_constellation[16] =
|
|||
static const complexf_t v17_v32bis_7200_constellation[16] =
|
||||
#endif
|
||||
{
|
||||
{FP_SCALE( 6.0f), FP_SCALE(-6.0f)}, /* 0x00 */
|
||||
{FP_SCALE(-2.0f), FP_SCALE( 6.0f)}, /* 0x01 */
|
||||
{FP_SCALE( 6.0f), FP_SCALE( 2.0f)}, /* 0x02 */
|
||||
{FP_SCALE(-6.0f), FP_SCALE(-6.0f)}, /* 0x03 */
|
||||
{FP_SCALE(-6.0f), FP_SCALE( 6.0f)}, /* 0x04 */
|
||||
{FP_SCALE( 2.0f), FP_SCALE(-6.0f)}, /* 0x05 */
|
||||
{FP_SCALE(-6.0f), FP_SCALE(-2.0f)}, /* 0x06 */
|
||||
{FP_SCALE( 6.0f), FP_SCALE( 6.0f)}, /* 0x07 */
|
||||
{FP_SCALE(-2.0f), FP_SCALE( 2.0f)}, /* 0x08 */
|
||||
{FP_SCALE( 6.0f), FP_SCALE(-2.0f)}, /* 0x09 */
|
||||
{FP_SCALE(-2.0f), FP_SCALE(-6.0f)}, /* 0x0A */
|
||||
{FP_SCALE( 2.0f), FP_SCALE( 2.0f)}, /* 0x0B */
|
||||
{FP_SCALE( 2.0f), FP_SCALE(-2.0f)}, /* 0x0C */
|
||||
{FP_SCALE(-6.0f), FP_SCALE( 2.0f)}, /* 0x0D */
|
||||
{FP_SCALE( 2.0f), FP_SCALE( 6.0f)}, /* 0x0E */
|
||||
{FP_SCALE(-2.0f), FP_SCALE(-2.0f)} /* 0x0F */
|
||||
{FP_CONSTELLATION_SCALE( 6.0f), FP_CONSTELLATION_SCALE(-6.0f)}, /* 0x00 */
|
||||
{FP_CONSTELLATION_SCALE(-2.0f), FP_CONSTELLATION_SCALE( 6.0f)}, /* 0x01 */
|
||||
{FP_CONSTELLATION_SCALE( 6.0f), FP_CONSTELLATION_SCALE( 2.0f)}, /* 0x02 */
|
||||
{FP_CONSTELLATION_SCALE(-6.0f), FP_CONSTELLATION_SCALE(-6.0f)}, /* 0x03 */
|
||||
{FP_CONSTELLATION_SCALE(-6.0f), FP_CONSTELLATION_SCALE( 6.0f)}, /* 0x04 */
|
||||
{FP_CONSTELLATION_SCALE( 2.0f), FP_CONSTELLATION_SCALE(-6.0f)}, /* 0x05 */
|
||||
{FP_CONSTELLATION_SCALE(-6.0f), FP_CONSTELLATION_SCALE(-2.0f)}, /* 0x06 */
|
||||
{FP_CONSTELLATION_SCALE( 6.0f), FP_CONSTELLATION_SCALE( 6.0f)}, /* 0x07 */
|
||||
{FP_CONSTELLATION_SCALE(-2.0f), FP_CONSTELLATION_SCALE( 2.0f)}, /* 0x08 */
|
||||
{FP_CONSTELLATION_SCALE( 6.0f), FP_CONSTELLATION_SCALE(-2.0f)}, /* 0x09 */
|
||||
{FP_CONSTELLATION_SCALE(-2.0f), FP_CONSTELLATION_SCALE(-6.0f)}, /* 0x0A */
|
||||
{FP_CONSTELLATION_SCALE( 2.0f), FP_CONSTELLATION_SCALE( 2.0f)}, /* 0x0B */
|
||||
{FP_CONSTELLATION_SCALE( 2.0f), FP_CONSTELLATION_SCALE(-2.0f)}, /* 0x0C */
|
||||
{FP_CONSTELLATION_SCALE(-6.0f), FP_CONSTELLATION_SCALE( 2.0f)}, /* 0x0D */
|
||||
{FP_CONSTELLATION_SCALE( 2.0f), FP_CONSTELLATION_SCALE( 6.0f)}, /* 0x0E */
|
||||
{FP_CONSTELLATION_SCALE(-2.0f), FP_CONSTELLATION_SCALE(-2.0f)} /* 0x0F */
|
||||
};
|
||||
|
||||
/* This one does not exist in V.17 as a data constellation. It is only
|
||||
|
@ -305,10 +304,10 @@ static const complexi16_t v17_v32bis_4800_constellation[4] =
|
|||
static const complexf_t v17_v32bis_4800_constellation[4] =
|
||||
#endif
|
||||
{
|
||||
{FP_SCALE(-6.0f), FP_SCALE(-2.0f)}, /* 0x00 */
|
||||
{FP_SCALE(-2.0f), FP_SCALE( 6.0f)}, /* 0x01 */
|
||||
{FP_SCALE( 2.0f), FP_SCALE(-6.0f)}, /* 0x02 */
|
||||
{FP_SCALE( 6.0f), FP_SCALE( 2.0f)} /* 0x03 */
|
||||
{FP_CONSTELLATION_SCALE(-6.0f), FP_CONSTELLATION_SCALE(-2.0f)}, /* 0x00 */
|
||||
{FP_CONSTELLATION_SCALE(-2.0f), FP_CONSTELLATION_SCALE( 6.0f)}, /* 0x01 */
|
||||
{FP_CONSTELLATION_SCALE( 2.0f), FP_CONSTELLATION_SCALE(-6.0f)}, /* 0x02 */
|
||||
{FP_CONSTELLATION_SCALE( 6.0f), FP_CONSTELLATION_SCALE( 2.0f)} /* 0x03 */
|
||||
};
|
||||
|
||||
#if defined(SPANDSP_USE_FIXED_POINTx)
|
||||
|
@ -317,10 +316,10 @@ static const complexi16_t v17_v32bis_abcd_constellation[4] =
|
|||
static const complexf_t v17_v32bis_abcd_constellation[4] =
|
||||
#endif
|
||||
{
|
||||
{FP_SCALE(-6.0f), FP_SCALE(-2.0f)}, /* A */
|
||||
{FP_SCALE( 2.0f), FP_SCALE(-6.0f)}, /* B */
|
||||
{FP_SCALE( 6.0f), FP_SCALE( 2.0f)}, /* C */
|
||||
{FP_SCALE(-2.0f), FP_SCALE( 6.0f)} /* D */
|
||||
{FP_CONSTELLATION_SCALE(-6.0f), FP_CONSTELLATION_SCALE(-2.0f)}, /* A */
|
||||
{FP_CONSTELLATION_SCALE( 2.0f), FP_CONSTELLATION_SCALE(-6.0f)}, /* B */
|
||||
{FP_CONSTELLATION_SCALE( 6.0f), FP_CONSTELLATION_SCALE( 2.0f)}, /* C */
|
||||
{FP_CONSTELLATION_SCALE(-2.0f), FP_CONSTELLATION_SCALE( 6.0f)} /* D */
|
||||
};
|
||||
|
||||
/*- End of file ------------------------------------------------------------*/
|
||||
|
|
|
@ -69,11 +69,14 @@
|
|||
#define FP_SCALE(x) FP_Q_6_10(x)
|
||||
#define FP_FACTOR 1024
|
||||
#define FP_SHIFT_FACTOR 12
|
||||
#include "v17_v32bis_rx_fixed_rrc.h"
|
||||
#else
|
||||
#define FP_SCALE(x) (x)
|
||||
#include "v17_v32bis_rx_floating_rrc.h"
|
||||
#endif
|
||||
|
||||
#include "v17_v32bis_rx_rrc.h"
|
||||
|
||||
#define FP_CONSTELLATION_SCALE(x) FP_SCALE(x)
|
||||
|
||||
#include "v17_v32bis_tx_constellation_maps.h"
|
||||
#include "v17_v32bis_rx_constellation_maps.h"
|
||||
|
||||
|
|
|
@ -63,44 +63,42 @@
|
|||
#include "spandsp/private/v17tx.h"
|
||||
|
||||
#if defined(SPANDSP_USE_FIXED_POINT)
|
||||
#define FP_SCALE(x) ((int16_t) x)
|
||||
#define FP_SCALE(x) ((int16_t) x)
|
||||
#else
|
||||
#define FP_SCALE(x) (x)
|
||||
#define FP_SCALE(x) (x)
|
||||
#endif
|
||||
|
||||
#define FP_CONSTELLATION_SCALE(x) FP_SCALE(x)
|
||||
|
||||
#include "v17_v32bis_tx_constellation_maps.h"
|
||||
#if defined(SPANDSP_USE_FIXED_POINT)
|
||||
#include "v17_v32bis_tx_fixed_rrc.h"
|
||||
#else
|
||||
#include "v17_v32bis_tx_floating_rrc.h"
|
||||
#endif
|
||||
#include "v17_v32bis_tx_rrc.h"
|
||||
|
||||
/*! The nominal frequency of the carrier, in Hertz */
|
||||
#define CARRIER_NOMINAL_FREQ 1800.0f
|
||||
#define CARRIER_NOMINAL_FREQ 1800.0f
|
||||
|
||||
/* Segments of the training sequence */
|
||||
/*! The start of the optional TEP, that may preceed the actual training, in symbols */
|
||||
#define V17_TRAINING_SEG_TEP_A 0
|
||||
#define V17_TRAINING_SEG_TEP_A 0
|
||||
/*! The mid point of the optional TEP, that may preceed the actual training, in symbols */
|
||||
#define V17_TRAINING_SEG_TEP_B (V17_TRAINING_SEG_TEP_A + 480)
|
||||
#define V17_TRAINING_SEG_TEP_B (V17_TRAINING_SEG_TEP_A + 480)
|
||||
/*! The start of training segment 1, in symbols */
|
||||
#define V17_TRAINING_SEG_1 (V17_TRAINING_SEG_TEP_B + 48)
|
||||
#define V17_TRAINING_SEG_1 (V17_TRAINING_SEG_TEP_B + 48)
|
||||
/*! The start of training segment 2, in symbols */
|
||||
#define V17_TRAINING_SEG_2 (V17_TRAINING_SEG_1 + 256)
|
||||
#define V17_TRAINING_SEG_2 (V17_TRAINING_SEG_1 + 256)
|
||||
/*! The start of training segment 3, in symbols */
|
||||
#define V17_TRAINING_SEG_3 (V17_TRAINING_SEG_2 + 2976)
|
||||
#define V17_TRAINING_SEG_3 (V17_TRAINING_SEG_2 + 2976)
|
||||
/*! The start of training segment 4, in symbols */
|
||||
#define V17_TRAINING_SEG_4 (V17_TRAINING_SEG_3 + 64)
|
||||
#define V17_TRAINING_SEG_4 (V17_TRAINING_SEG_3 + 64)
|
||||
/*! The start of training segment 4 in short training mode, in symbols */
|
||||
#define V17_TRAINING_SHORT_SEG_4 (V17_TRAINING_SEG_2 + 38)
|
||||
#define V17_TRAINING_SHORT_SEG_4 (V17_TRAINING_SEG_2 + 38)
|
||||
/*! The end of the training, in symbols */
|
||||
#define V17_TRAINING_END (V17_TRAINING_SEG_4 + 48)
|
||||
#define V17_TRAINING_SHUTDOWN_A (V17_TRAINING_END + 32)
|
||||
#define V17_TRAINING_END (V17_TRAINING_SEG_4 + 48)
|
||||
#define V17_TRAINING_SHUTDOWN_A (V17_TRAINING_END + 32)
|
||||
/*! The end of the shutdown sequence, in symbols */
|
||||
#define V17_TRAINING_SHUTDOWN_END (V17_TRAINING_SHUTDOWN_A + 48)
|
||||
#define V17_TRAINING_SHUTDOWN_END (V17_TRAINING_SHUTDOWN_A + 48)
|
||||
|
||||
/*! The 16 bit pattern used in the bridge section of the training sequence */
|
||||
#define V17_BRIDGE_WORD 0x8880
|
||||
#define V17_BRIDGE_WORD 0x8880
|
||||
|
||||
static __inline__ int scramble(v17_tx_state_t *s, int in_bit)
|
||||
{
|
||||
|
|
|
@ -75,14 +75,13 @@
|
|||
#if defined(SPANDSP_USE_FIXED_POINT)
|
||||
#define FP_SHIFT_FACTOR 10
|
||||
#define FP_SCALE FP_Q_6_10
|
||||
#include "v22bis_rx_1200_fixed_rrc.h"
|
||||
#include "v22bis_rx_2400_fixed_rrc.h"
|
||||
#else
|
||||
#define FP_SCALE(x) (x)
|
||||
#include "v22bis_rx_1200_floating_rrc.h"
|
||||
#include "v22bis_rx_2400_floating_rrc.h"
|
||||
#endif
|
||||
|
||||
#include "v22bis_rx_1200_rrc.h"
|
||||
#include "v22bis_rx_2400_rrc.h"
|
||||
|
||||
#define ms_to_symbols(t) (((t)*600)/1000)
|
||||
|
||||
/*! The adaption rate coefficient for the equalizer */
|
||||
|
|
|
@ -64,12 +64,12 @@
|
|||
|
||||
#if defined(SPANDSP_USE_FIXED_POINT)
|
||||
#define FP_SCALE FP_Q_6_10
|
||||
#include "v22bis_tx_fixed_rrc.h"
|
||||
#else
|
||||
#define FP_SCALE(x) (x)
|
||||
#include "v22bis_tx_floating_rrc.h"
|
||||
#endif
|
||||
|
||||
#include "v22bis_tx_rrc.h"
|
||||
|
||||
/* Quoting from the V.22bis spec.
|
||||
|
||||
6.3.1.1 Interworking at 2400 bit/s
|
||||
|
|
|
@ -68,14 +68,13 @@
|
|||
#define FP_SCALE FP_Q_6_10
|
||||
#define FP_FACTOR 4096
|
||||
#define FP_SHIFT_FACTOR 12
|
||||
#include "v27ter_rx_4800_fixed_rrc.h"
|
||||
#include "v27ter_rx_2400_fixed_rrc.h"
|
||||
#else
|
||||
#define FP_SCALE(x) (x)
|
||||
#include "v27ter_rx_4800_floating_rrc.h"
|
||||
#include "v27ter_rx_2400_floating_rrc.h"
|
||||
#endif
|
||||
|
||||
#include "v27ter_rx_4800_rrc.h"
|
||||
#include "v27ter_rx_2400_rrc.h"
|
||||
|
||||
/* V.27ter is a DPSK modem, but this code treats it like QAM. It nails down the
|
||||
signal to a static constellation, even though dealing with differences is all
|
||||
that is necessary. */
|
||||
|
@ -272,6 +271,34 @@ static void tune_equalizer(v27ter_rx_state_t *s, const complexf_t *z, const comp
|
|||
#endif
|
||||
/*- End of function --------------------------------------------------------*/
|
||||
|
||||
#if defined(SPANDSP_USE_FIXED_POINT)
|
||||
static __inline__ void track_carrier(v27ter_rx_state_t *s, const complexi16_t *z, const complexi16_t *target)
|
||||
#else
|
||||
static __inline__ void track_carrier(v27ter_rx_state_t *s, const complexf_t *z, const complexf_t *target)
|
||||
#endif
|
||||
{
|
||||
#if defined(SPANDSP_USE_FIXED_POINT)
|
||||
int32_t error;
|
||||
#else
|
||||
float error;
|
||||
#endif
|
||||
|
||||
/* For small errors the imaginary part of the difference between the actual and the target
|
||||
positions is proportional to the phase error, for any particular target. However, the
|
||||
different amplitudes of the various target positions scale things. */
|
||||
#if defined(SPANDSP_USE_FIXED_POINT)
|
||||
error = ((int32_t) z->im*target->re - (int32_t) z->re*target->im) >> 10;
|
||||
s->carrier_phase_rate += ((s->carrier_track_i*error) >> FP_SHIFT_FACTOR);
|
||||
s->carrier_phase += ((s->carrier_track_p*error) >> FP_SHIFT_FACTOR);
|
||||
#else
|
||||
error = z->im*target->re - z->re*target->im;
|
||||
s->carrier_phase_rate += (int32_t) (s->carrier_track_i*error);
|
||||
s->carrier_phase += (int32_t) (s->carrier_track_p*error);
|
||||
//span_log(&s->logging, SPAN_LOG_FLOW, "Im = %15.5f f = %15.5f\n", error, dds_frequencyf(s->carrier_phase_rate));
|
||||
#endif
|
||||
}
|
||||
/*- End of function --------------------------------------------------------*/
|
||||
|
||||
#if defined(SPANDSP_USE_FIXED_POINT)
|
||||
static __inline__ int find_quadrant(const complexi16_t *z)
|
||||
#else
|
||||
|
@ -337,38 +364,11 @@ static __inline__ int find_octant(complexf_t *z)
|
|||
}
|
||||
/*- End of function --------------------------------------------------------*/
|
||||
|
||||
#if defined(SPANDSP_USE_FIXED_POINT)
|
||||
static __inline__ void track_carrier(v27ter_rx_state_t *s, const complexi16_t *z, const complexi16_t *target)
|
||||
#else
|
||||
static __inline__ void track_carrier(v27ter_rx_state_t *s, const complexf_t *z, const complexf_t *target)
|
||||
#endif
|
||||
{
|
||||
#if defined(SPANDSP_USE_FIXED_POINT)
|
||||
int32_t error;
|
||||
#else
|
||||
float error;
|
||||
#endif
|
||||
|
||||
/* For small errors the imaginary part of the difference between the actual and the target
|
||||
positions is proportional to the phase error, for any particular target. However, the
|
||||
different amplitudes of the various target positions scale things. */
|
||||
#if defined(SPANDSP_USE_FIXED_POINT)
|
||||
error = ((int32_t) z->im*target->re - (int32_t) z->re*target->im) >> 10;
|
||||
s->carrier_phase_rate += ((s->carrier_track_i*error) >> FP_SHIFT_FACTOR);
|
||||
s->carrier_phase += ((s->carrier_track_p*error) >> FP_SHIFT_FACTOR);
|
||||
#else
|
||||
error = z->im*target->re - z->re*target->im;
|
||||
s->carrier_phase_rate += (int32_t) (s->carrier_track_i*error);
|
||||
s->carrier_phase += (int32_t) (s->carrier_track_p*error);
|
||||
//span_log(&s->logging, SPAN_LOG_FLOW, "Im = %15.5f f = %15.5f\n", error, dds_frequencyf(s->carrier_phase_rate));
|
||||
#endif
|
||||
}
|
||||
/*- End of function --------------------------------------------------------*/
|
||||
|
||||
static __inline__ int descramble(v27ter_rx_state_t *s, int in_bit)
|
||||
{
|
||||
int out_bit;
|
||||
|
||||
in_bit &= 1;
|
||||
out_bit = (in_bit ^ (s->scramble_reg >> 5) ^ (s->scramble_reg >> 6)) & 1;
|
||||
if (s->scrambler_pattern_count >= 33)
|
||||
{
|
||||
|
|
|
@ -60,14 +60,13 @@
|
|||
|
||||
#if defined(SPANDSP_USE_FIXED_POINT)
|
||||
#define FP_SCALE FP_Q_6_10
|
||||
#include "v27ter_tx_4800_fixed_rrc.h"
|
||||
#include "v27ter_tx_2400_fixed_rrc.h"
|
||||
#else
|
||||
#define FP_SCALE(x) (x)
|
||||
#include "v27ter_tx_4800_floating_rrc.h"
|
||||
#include "v27ter_tx_2400_floating_rrc.h"
|
||||
#endif
|
||||
|
||||
#include "v27ter_tx_4800_rrc.h"
|
||||
#include "v27ter_tx_2400_rrc.h"
|
||||
|
||||
/*! The nominal frequency of the carrier, in Hertz */
|
||||
#define CARRIER_NOMINAL_FREQ 1800.0f
|
||||
|
||||
|
|
|
@ -67,14 +67,16 @@
|
|||
#define FP_SCALE FP_Q_4_12
|
||||
#define FP_FACTOR 4096
|
||||
#define FP_SHIFT_FACTOR 12
|
||||
#include "v29tx_constellation_maps.h"
|
||||
#include "v29rx_fixed_rrc.h"
|
||||
#else
|
||||
#define FP_SCALE(x) (x)
|
||||
#include "v29tx_constellation_maps.h"
|
||||
#include "v29rx_floating_rrc.h"
|
||||
#endif
|
||||
|
||||
#include "v29rx_rrc.h"
|
||||
|
||||
#define FP_CONSTELLATION_SCALE(x) FP_SCALE(x)
|
||||
|
||||
#include "v29tx_constellation_maps.h"
|
||||
|
||||
/*! The nominal frequency of the carrier, in Hertz */
|
||||
#define CARRIER_NOMINAL_FREQ 1700.0f
|
||||
/*! The nominal baud or symbol rate */
|
||||
|
@ -104,6 +106,7 @@ enum
|
|||
|
||||
static const uint8_t space_map_9600[20][20] =
|
||||
{
|
||||
/* Middle V Middle */
|
||||
{13, 13, 13, 13, 13, 13, 12, 12, 12, 12, 12, 12, 12, 12, 11, 11, 11, 11, 11, 11},
|
||||
{13, 13, 13, 13, 13, 13, 13, 12, 12, 12, 12, 12, 12, 11, 11, 11, 11, 11, 11, 11},
|
||||
{13, 13, 13, 13, 13, 13, 13, 4, 4, 4, 4, 4, 4, 11, 11, 11, 11, 11, 11, 11},
|
||||
|
@ -113,8 +116,8 @@ static const uint8_t space_map_9600[20][20] =
|
|||
{14, 13, 13, 13, 13, 13, 5, 5, 5, 5, 3, 3, 3, 3, 11, 11, 11, 11, 11, 10},
|
||||
{14, 14, 6, 6, 6, 5, 5, 5, 5, 5, 3, 3, 3, 3, 3, 2, 2, 2, 10, 10},
|
||||
{14, 14, 6, 6, 6, 6, 5, 5, 5, 5, 3, 3, 3, 3, 2, 2, 2, 2, 10, 10},
|
||||
{14, 14, 6, 6, 6, 6, 5, 5, 5, 5, 3, 3, 3, 3, 2, 2, 2, 2, 10, 10},
|
||||
{14, 14, 6, 6, 6, 6, 7, 7, 7, 7, 1, 1, 1, 1, 2, 2, 2, 2, 10, 10},
|
||||
{14, 14, 6, 6, 6, 6, 5, 5, 5, 5, 3, 3, 3, 3, 2, 2, 2, 2, 10, 10}, /* << Middle */
|
||||
{14, 14, 6, 6, 6, 6, 7, 7, 7, 7, 1, 1, 1, 1, 2, 2, 2, 2, 10, 10}, /* << Middle */
|
||||
{14, 14, 6, 6, 6, 6, 7, 7, 7, 7, 1, 1, 1, 1, 2, 2, 2, 2, 10, 10},
|
||||
{14, 14, 6, 6, 6, 7, 7, 7, 7, 7, 1, 1, 1, 1, 1, 2, 2, 2, 10, 10},
|
||||
{14, 15, 15, 15, 15, 15, 7, 7, 7, 7, 1, 1, 1, 1, 9, 9, 9, 9, 9, 10},
|
||||
|
@ -124,6 +127,7 @@ static const uint8_t space_map_9600[20][20] =
|
|||
{15, 15, 15, 15, 15, 15, 15, 0, 0, 0, 0, 0, 0, 9, 9, 9, 9, 9, 9, 9},
|
||||
{15, 15, 15, 15, 15, 15, 15, 8, 8, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 9},
|
||||
{15, 15, 15, 15, 15, 15, 8, 8, 8, 8, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9}
|
||||
/* Middle ^ Middle */
|
||||
};
|
||||
|
||||
/* Coefficients for the band edge symbol timing synchroniser (alpha = 0.99) */
|
||||
|
|
|
@ -58,13 +58,18 @@
|
|||
#include "spandsp/private/logging.h"
|
||||
#include "spandsp/private/v29tx.h"
|
||||
|
||||
#include "v29tx_constellation_maps.h"
|
||||
#if defined(SPANDSP_USE_FIXED_POINT)
|
||||
#include "v29tx_fixed_rrc.h"
|
||||
#define FP_SCALE(x) ((int16_t) x)
|
||||
#else
|
||||
#include "v29tx_floating_rrc.h"
|
||||
#define FP_SCALE(x) (x)
|
||||
#endif
|
||||
|
||||
#define FP_CONSTELLATION_SCALE(x) FP_SCALE(x)
|
||||
|
||||
#include "v29tx_constellation_maps.h"
|
||||
|
||||
#include "v29tx_rrc.h"
|
||||
|
||||
/*! The nominal frequency of the carrier, in Hertz */
|
||||
#define CARRIER_NOMINAL_FREQ 1700.0f
|
||||
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
*
|
||||
* Written by Steve Underwood <steveu@coppice.org>
|
||||
*
|
||||
* Copyright (C) 2008 Steve Underwood
|
||||
* Copyright (C) 2008, 2012 Steve Underwood
|
||||
*
|
||||
* All rights reserved.
|
||||
*
|
||||
|
@ -24,26 +24,18 @@
|
|||
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
*/
|
||||
|
||||
#if !defined(FP_SCALE)
|
||||
#if defined(SPANDSP_USE_FIXED_POINT)
|
||||
#define FP_SCALE(x) ((int16_t) x)
|
||||
#else
|
||||
#define FP_SCALE(x) (x)
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#if defined(SPANDSP_USE_FIXED_POINT)
|
||||
static const complexi16_t v29_abab_constellation[6] =
|
||||
#else
|
||||
static const complexf_t v29_abab_constellation[6] =
|
||||
#endif
|
||||
{
|
||||
{FP_SCALE( 3.0f), FP_SCALE(-3.0f)}, /* 315deg high 9600 */
|
||||
{FP_SCALE(-3.0f), FP_SCALE( 0.0f)}, /* 180deg low */
|
||||
{FP_SCALE( 1.0f), FP_SCALE(-1.0f)}, /* 315deg low 7200 */
|
||||
{FP_SCALE(-3.0f), FP_SCALE( 0.0f)}, /* 180deg low */
|
||||
{FP_SCALE( 0.0f), FP_SCALE(-3.0f)}, /* 270deg low 4800 */
|
||||
{FP_SCALE(-3.0f), FP_SCALE( 0.0f)} /* 180deg low */
|
||||
{FP_CONSTELLATION_SCALE( 3.0f), FP_CONSTELLATION_SCALE(-3.0f)}, /* 315deg high 9600 */
|
||||
{FP_CONSTELLATION_SCALE(-3.0f), FP_CONSTELLATION_SCALE( 0.0f)}, /* 180deg low */
|
||||
{FP_CONSTELLATION_SCALE( 1.0f), FP_CONSTELLATION_SCALE(-1.0f)}, /* 315deg low 7200 */
|
||||
{FP_CONSTELLATION_SCALE(-3.0f), FP_CONSTELLATION_SCALE( 0.0f)}, /* 180deg low */
|
||||
{FP_CONSTELLATION_SCALE( 0.0f), FP_CONSTELLATION_SCALE(-3.0f)}, /* 270deg low 4800 */
|
||||
{FP_CONSTELLATION_SCALE(-3.0f), FP_CONSTELLATION_SCALE( 0.0f)} /* 180deg low */
|
||||
};
|
||||
|
||||
#if defined(SPANDSP_USE_FIXED_POINT)
|
||||
|
@ -52,12 +44,12 @@ static const complexi16_t v29_cdcd_constellation[6] =
|
|||
static const complexf_t v29_cdcd_constellation[6] =
|
||||
#endif
|
||||
{
|
||||
{FP_SCALE( 3.0f), FP_SCALE( 0.0f)}, /* 0deg low 9600 */
|
||||
{FP_SCALE(-3.0f), FP_SCALE( 3.0f)}, /* 135deg high */
|
||||
{FP_SCALE( 3.0f), FP_SCALE( 0.0f)}, /* 0deg low 7200 */
|
||||
{FP_SCALE(-1.0f), FP_SCALE( 1.0f)}, /* 135deg low */
|
||||
{FP_SCALE( 3.0f), FP_SCALE( 0.0f)}, /* 0deg low 4800 */
|
||||
{FP_SCALE( 0.0f), FP_SCALE( 3.0f)} /* 90deg low */
|
||||
{FP_CONSTELLATION_SCALE( 3.0f), FP_CONSTELLATION_SCALE( 0.0f)}, /* 0deg low 9600 */
|
||||
{FP_CONSTELLATION_SCALE(-3.0f), FP_CONSTELLATION_SCALE( 3.0f)}, /* 135deg high */
|
||||
{FP_CONSTELLATION_SCALE( 3.0f), FP_CONSTELLATION_SCALE( 0.0f)}, /* 0deg low 7200 */
|
||||
{FP_CONSTELLATION_SCALE(-1.0f), FP_CONSTELLATION_SCALE( 1.0f)}, /* 135deg low */
|
||||
{FP_CONSTELLATION_SCALE( 3.0f), FP_CONSTELLATION_SCALE( 0.0f)}, /* 0deg low 4800 */
|
||||
{FP_CONSTELLATION_SCALE( 0.0f), FP_CONSTELLATION_SCALE( 3.0f)} /* 90deg low */
|
||||
};
|
||||
|
||||
#if defined(SPANDSP_USE_FIXED_POINT)
|
||||
|
@ -66,22 +58,22 @@ static const complexi16_t v29_9600_constellation[16] =
|
|||
static const complexf_t v29_9600_constellation[16] =
|
||||
#endif
|
||||
{
|
||||
{FP_SCALE( 3.0f), FP_SCALE( 0.0f)}, /* 0deg low */
|
||||
{FP_SCALE( 1.0f), FP_SCALE( 1.0f)}, /* 45deg low */
|
||||
{FP_SCALE( 0.0f), FP_SCALE( 3.0f)}, /* 90deg low */
|
||||
{FP_SCALE(-1.0f), FP_SCALE( 1.0f)}, /* 135deg low */
|
||||
{FP_SCALE(-3.0f), FP_SCALE( 0.0f)}, /* 180deg low */
|
||||
{FP_SCALE(-1.0f), FP_SCALE(-1.0f)}, /* 225deg low */
|
||||
{FP_SCALE( 0.0f), FP_SCALE(-3.0f)}, /* 270deg low */
|
||||
{FP_SCALE( 1.0f), FP_SCALE(-1.0f)}, /* 315deg low */
|
||||
{FP_SCALE( 5.0f), FP_SCALE( 0.0f)}, /* 0deg high */
|
||||
{FP_SCALE( 3.0f), FP_SCALE( 3.0f)}, /* 45deg high */
|
||||
{FP_SCALE( 0.0f), FP_SCALE( 5.0f)}, /* 90deg high */
|
||||
{FP_SCALE(-3.0f), FP_SCALE( 3.0f)}, /* 135deg high */
|
||||
{FP_SCALE(-5.0f), FP_SCALE( 0.0f)}, /* 180deg high */
|
||||
{FP_SCALE(-3.0f), FP_SCALE(-3.0f)}, /* 225deg high */
|
||||
{FP_SCALE( 0.0f), FP_SCALE(-5.0f)}, /* 270deg high */
|
||||
{FP_SCALE( 3.0f), FP_SCALE(-3.0f)} /* 315deg high */
|
||||
{FP_CONSTELLATION_SCALE( 3.0f), FP_CONSTELLATION_SCALE( 0.0f)}, /* 0deg low */
|
||||
{FP_CONSTELLATION_SCALE( 1.0f), FP_CONSTELLATION_SCALE( 1.0f)}, /* 45deg low */
|
||||
{FP_CONSTELLATION_SCALE( 0.0f), FP_CONSTELLATION_SCALE( 3.0f)}, /* 90deg low */
|
||||
{FP_CONSTELLATION_SCALE(-1.0f), FP_CONSTELLATION_SCALE( 1.0f)}, /* 135deg low */
|
||||
{FP_CONSTELLATION_SCALE(-3.0f), FP_CONSTELLATION_SCALE( 0.0f)}, /* 180deg low */
|
||||
{FP_CONSTELLATION_SCALE(-1.0f), FP_CONSTELLATION_SCALE(-1.0f)}, /* 225deg low */
|
||||
{FP_CONSTELLATION_SCALE( 0.0f), FP_CONSTELLATION_SCALE(-3.0f)}, /* 270deg low */
|
||||
{FP_CONSTELLATION_SCALE( 1.0f), FP_CONSTELLATION_SCALE(-1.0f)}, /* 315deg low */
|
||||
{FP_CONSTELLATION_SCALE( 5.0f), FP_CONSTELLATION_SCALE( 0.0f)}, /* 0deg high */
|
||||
{FP_CONSTELLATION_SCALE( 3.0f), FP_CONSTELLATION_SCALE( 3.0f)}, /* 45deg high */
|
||||
{FP_CONSTELLATION_SCALE( 0.0f), FP_CONSTELLATION_SCALE( 5.0f)}, /* 90deg high */
|
||||
{FP_CONSTELLATION_SCALE(-3.0f), FP_CONSTELLATION_SCALE( 3.0f)}, /* 135deg high */
|
||||
{FP_CONSTELLATION_SCALE(-5.0f), FP_CONSTELLATION_SCALE( 0.0f)}, /* 180deg high */
|
||||
{FP_CONSTELLATION_SCALE(-3.0f), FP_CONSTELLATION_SCALE(-3.0f)}, /* 225deg high */
|
||||
{FP_CONSTELLATION_SCALE( 0.0f), FP_CONSTELLATION_SCALE(-5.0f)}, /* 270deg high */
|
||||
{FP_CONSTELLATION_SCALE( 3.0f), FP_CONSTELLATION_SCALE(-3.0f)} /* 315deg high */
|
||||
};
|
||||
|
||||
/*- End of file ------------------------------------------------------------*/
|
||||
|
|
|
@ -25,6 +25,15 @@ STDERR_DEST=xyzzy2
|
|||
echo Performing basic spandsp regression tests
|
||||
echo
|
||||
|
||||
./ademco_contactid_tests >$STDOUT_DEST 2>$STDERR_DEST
|
||||
RETVAL=$?
|
||||
if [ $RETVAL != 0 ]
|
||||
then
|
||||
echo ademco_contactid_tests failed!
|
||||
exit $RETVAL
|
||||
fi
|
||||
echo ademco_contactid_tests completed OK
|
||||
|
||||
./adsi_tests >$STDOUT_DEST 2>$STDERR_DEST
|
||||
RETVAL=$?
|
||||
if [ $RETVAL != 0 ]
|
||||
|
|
Loading…
Reference in New Issue