]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
Cleanup of modem filters
authorSteve Underwood <steveu@coppice.org>
Sat, 16 Mar 2013 07:35:39 +0000 (15:35 +0800)
committerSteve Underwood <steveu@coppice.org>
Sat, 16 Mar 2013 07:35:39 +0000 (15:35 +0800)
20 files changed:
libs/spandsp/src/Makefile.am
libs/spandsp/src/async.c
libs/spandsp/src/libspandsp.2005.vcproj
libs/spandsp/src/libspandsp.2008.vcproj
libs/spandsp/src/make_modem_filter.c
libs/spandsp/src/spandsp/private/async.h
libs/spandsp/src/t30.c
libs/spandsp/src/t30_api.c
libs/spandsp/src/t4_rx.c
libs/spandsp/src/v17_v32bis_tx_constellation_maps.h
libs/spandsp/src/v17rx.c
libs/spandsp/src/v17tx.c
libs/spandsp/src/v22bis_rx.c
libs/spandsp/src/v22bis_tx.c
libs/spandsp/src/v27ter_rx.c
libs/spandsp/src/v27ter_tx.c
libs/spandsp/src/v29rx.c
libs/spandsp/src/v29tx.c
libs/spandsp/src/v29tx_constellation_maps.h
libs/spandsp/tests/regression_tests.sh

index 95e9932c3c239b9afd800a48e87079397bf184b4..aad3b91dd721502f07031f7165c46272af821be3 100644 (file)
@@ -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_floating_rrc.h: make_modem_filter$(EXEEXT)
-       ./make_modem_filter$(EXEEXT) -m V.17 -t >v17_v32bis_tx_floating_rrc.h
+v17_v32bis_tx_rrc.h: make_modem_filter$(EXEEXT)
+       ./make_modem_filter$(EXEEXT) -m V.17 -t >v17_v32bis_tx_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_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_1200_rrc.h: make_modem_filter$(EXEEXT)
+       ./make_modem_filter$(EXEEXT) -m V.22bis1200 -r >v22bis_rx_1200_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_rrc.h: make_modem_filter$(EXEEXT)
+       ./make_modem_filter$(EXEEXT) -m V.22bis2400 -r >v22bis_rx_2400_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_floating_rrc.h: make_modem_filter$(EXEEXT)
-       ./make_modem_filter$(EXEEXT) -m V.22bis -t >v22bis_tx_floating_rrc.h
+v22bis_tx_rrc.h: make_modem_filter$(EXEEXT)
+       ./make_modem_filter$(EXEEXT) -m V.22bis -t >v22bis_tx_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_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_2400_rrc.h: make_modem_filter$(EXEEXT)
+       ./make_modem_filter$(EXEEXT) -m V.27ter2400 -r >v27ter_rx_2400_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_rrc.h: make_modem_filter$(EXEEXT)
+       ./make_modem_filter$(EXEEXT) -m V.27ter4800 -r >v27ter_rx_4800_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_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_2400_floating_rrc.h: make_modem_filter$(EXEEXT)
-       ./make_modem_filter$(EXEEXT) -m V.27ter2400 -t >v27ter_tx_2400_floating_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_floating_rrc.h: make_modem_filter$(EXEEXT)
-       ./make_modem_filter$(EXEEXT) -m V.27ter4800 -t >v27ter_tx_4800_floating_rrc.h
+v27ter_tx_4800_rrc.h: make_modem_filter$(EXEEXT)
+       ./make_modem_filter$(EXEEXT) -m V.27ter4800 -t >v27ter_tx_4800_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
index 4df12dffb6229211bc0ea68516137e9b5b62b0c9..fb381bb7bc33daac8ee42a00729552abd05af41e 100644 (file)
@@ -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;
 }
index 4ed3af322a794675913921f06603dbc536b515da..a89a59b23d8526963509414ba01eead24f5955b7 100644 (file)
@@ -92,6 +92,7 @@
                        Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"\r
                        UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"\r
                        >\r
+<File RelativePath="ademco_contactid.c"></File>\r
 <File RelativePath="adsi.c"></File>\r
 <File RelativePath="async.c"></File>\r
 <File RelativePath="at_interpreter.c"></File>\r
 <File RelativePath="gsm0610_short_term.c"></File>\r
 <File RelativePath="hdlc.c"></File>\r
 <File RelativePath="ima_adpcm.c"></File>\r
+<File RelativePath="image_translate.c"></File>\r
 <File RelativePath="logging.c"></File>\r
 <File RelativePath="lpc10_analyse.c"></File>\r
 <File RelativePath="lpc10_decode.c"></File>\r
 <File RelativePath="lpc10_encode.c"></File>\r
 <File RelativePath="lpc10_placev.c"></File>\r
 <File RelativePath="lpc10_voicing.c"></File>\r
+<File RelativePath="math_fixed.c"></File>\r
 <File RelativePath="modem_echo.c"></File>\r
 <File RelativePath="modem_connect_tones.c"></File>\r
 <File RelativePath="noise.c"></File>\r
 <File RelativePath="super_tone_rx.c"></File>\r
 <File RelativePath="super_tone_tx.c"></File>\r
 <File RelativePath="swept_tone.c"></File>\r
+<File RelativePath="t4_t6_decode.c"></File>\r
+<File RelativePath="t4_t6_encode.c"></File>\r
 <File RelativePath="t4_rx.c"></File>\r
 <File RelativePath="t4_tx.c"></File>\r
 <File RelativePath="t30.c"></File>\r
 <File RelativePath="t38_gateway.c"></File>\r
 <File RelativePath="t38_non_ecm_buffer.c"></File>\r
 <File RelativePath="t38_terminal.c"></File>\r
+<File RelativePath="t42.c"></File>\r
+<File RelativePath="t81_t82_arith_coding.c"></File>\r
+<File RelativePath="t85_decode.c"></File>\r
+<File RelativePath="t85_encode.c"></File>\r
 <File RelativePath="testcpuid.c"></File>\r
 <File RelativePath="time_scale.c"></File>\r
+<File RelativePath="timezone.c"></File>\r
 <File RelativePath="tone_detect.c"></File>\r
 <File RelativePath="tone_generate.c"></File>\r
 <File RelativePath="v17rx.c"></File>\r
 <File RelativePath="vector_int.c"></File>\r
 <File RelativePath=".\msvc\gettimeofday.c"></File>\r
 </Filter><Filter  Name="Header Files">\r
+<File RelativePath="spandsp/ademco_contactid.h"></File>\r
 <File RelativePath="spandsp/adsi.h"></File>\r
 <File RelativePath="spandsp/async.h"></File>\r
 <File RelativePath="spandsp/arctan2.h"></File>\r
 <File RelativePath="spandsp/gsm0610.h"></File>\r
 <File RelativePath="spandsp/hdlc.h"></File>\r
 <File RelativePath="spandsp/ima_adpcm.h"></File>\r
+<File RelativePath="spandsp/image_translate.h"></File>\r
 <File RelativePath="spandsp/logging.h"></File>\r
 <File RelativePath="spandsp/lpc10.h"></File>\r
+<File RelativePath="spandsp/math_fixed.h"></File>\r
 <File RelativePath="spandsp/modem_echo.h"></File>\r
 <File RelativePath="spandsp/modem_connect_tones.h"></File>\r
 <File RelativePath="spandsp/noise.h"></File>\r
 <File RelativePath="spandsp/super_tone_rx.h"></File>\r
 <File RelativePath="spandsp/super_tone_tx.h"></File>\r
 <File RelativePath="spandsp/swept_tone.h"></File>\r
-<File RelativePath="spandsp/t4_rx.h"></File>\r
-<File RelativePath="spandsp/t4_tx.h"></File>\r
 <File RelativePath="spandsp/t30.h"></File>\r
 <File RelativePath="spandsp/t30_api.h"></File>\r
 <File RelativePath="spandsp/t30_fcf.h"></File>\r
 <File RelativePath="spandsp/t38_gateway.h"></File>\r
 <File RelativePath="spandsp/t38_non_ecm_buffer.h"></File>\r
 <File RelativePath="spandsp/t38_terminal.h"></File>\r
+<File RelativePath="spandsp/t4_rx.h"></File>\r
+<File RelativePath="spandsp/t4_tx.h"></File>\r
+<File RelativePath="spandsp/t4_t6_decode.h"></File>\r
+<File RelativePath="spandsp/t4_t6_encode.h"></File>\r
+<File RelativePath="spandsp/t42.h"></File>\r
+<File RelativePath="spandsp/t81_t82_arith_coding.h"></File>\r
+<File RelativePath="spandsp/t85.h"></File>\r
 <File RelativePath="spandsp/telephony.h"></File>\r
 <File RelativePath="spandsp/time_scale.h"></File>\r
+<File RelativePath="spandsp/timezone.h"></File>\r
 <File RelativePath="spandsp/timing.h"></File>\r
 <File RelativePath="spandsp/tone_detect.h"></File>\r
 <File RelativePath="spandsp/tone_generate.h"></File>\r
 <File RelativePath="spandsp/vector_float.h"></File>\r
 <File RelativePath="spandsp/vector_int.h"></File>\r
 <File RelativePath="spandsp/version.h"></File>\r
+<File RelativePath="spandsp/private/ademco_contactid.h"></File>\r
 <File RelativePath="spandsp/private/adsi.h"></File>\r
 <File RelativePath="spandsp/private/async.h"></File>\r
 <File RelativePath="spandsp/private/at_interpreter.h"></File>\r
 <File RelativePath="spandsp/private/gsm0610.h"></File>\r
 <File RelativePath="spandsp/private/hdlc.h"></File>\r
 <File RelativePath="spandsp/private/ima_adpcm.h"></File>\r
+<File RelativePath="spandsp/private/image_translate.h"></File>\r
 <File RelativePath="spandsp/private/logging.h"></File>\r
 <File RelativePath="spandsp/private/lpc10.h"></File>\r
 <File RelativePath="spandsp/private/modem_connect_tones.h"></File>\r
 <File RelativePath="spandsp/private/t38_terminal.h"></File>\r
 <File RelativePath="spandsp/private/t4_rx.h"></File>\r
 <File RelativePath="spandsp/private/t4_tx.h"></File>\r
+<File RelativePath="spandsp/private/t4_t6_decode.h"></File>\r
+<File RelativePath="spandsp/private/t4_t6_encode.h"></File>\r
+<File RelativePath="spandsp/private/t42.h"></File>\r
+<File RelativePath="spandsp/private/t81_t82_arith_coding.h"></File>\r
+<File RelativePath="spandsp/private/t85.h"></File>\r
 <File RelativePath="spandsp/private/time_scale.h"></File>\r
+<File RelativePath="spandsp/private/timezone.h"></File>\r
 <File RelativePath="spandsp/private/tone_detect.h"></File>\r
 <File RelativePath="spandsp/private/tone_generate.h"></File>\r
 <File RelativePath="spandsp/private/v17rx.h"></File>\r
index bd4e236b17e05e3e81f2f94a8411d898617acb98..96af30316762714bb65ca4bb39711de12ef4b571 100644 (file)
                        Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"\r
                        UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"\r
                        >\r
+                       <File\r
+                               RelativePath="ademco_contactid.c"\r
+                               >\r
+                       </File>\r
                        <File\r
                                RelativePath="adsi.c"\r
                                >\r
                <Filter\r
                        Name="Header Files"\r
                        >\r
-                       <File\r
-                               RelativePath=".\spandsp\private\image_translate.h"\r
-                               >\r
                        </File>\r
                        <File\r
-                               RelativePath=".\spandsp\image_translate.h"\r
+                               RelativePath="spandsp.h"\r
                                >\r
                        </File>\r
                        <File\r
-                               RelativePath="spandsp.h"\r
+                               RelativePath="spandsp/ademco_contactid.h"\r
                                >\r
                        </File>\r
                        <File\r
                                RelativePath="spandsp/ima_adpcm.h"\r
                                >\r
                        </File>\r
+                       <File\r
+                               RelativePath="spandsp/image_translate.h"\r
+                               >\r
+                       </File>\r
                        <File\r
                                RelativePath="spandsp/logging.h"\r
                                >\r
                                RelativePath="spandsp/power_meter.h"\r
                                >\r
                        </File>\r
+                       <File\r
+                               RelativePath="spandsp/private/ademco_contactid.h"\r
+                               >\r
+                       </File>\r
                        <File\r
                                RelativePath="spandsp/private/adsi.h"\r
                                >\r
                                RelativePath="spandsp/private/ima_adpcm.h"\r
                                >\r
                        </File>\r
+                       <File\r
+                               RelativePath="spandsp/private/image_translate.h"\r
+                               >\r
+                       </File>\r
                        <File\r
                                RelativePath="spandsp/private/logging.h"\r
                                >\r
index 593f894cbf4fdee590005be372d5c80c53ca2454..8ceac8aab9031fda9120f0e44aad4cea661de27b 100644 (file)
@@ -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;
index 7354aaf96701a618789aec8dded8619914230c3b..39bb1d4a4480954ab48ddf8b8923c2a3fe51e312 100644 (file)
@@ -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. */
index 7e9e4c333f3659ce9ca369451fdb4503d86d11f1..a8ed266f94852f6ba1b7f4c4e4eacce2bbb8b83a 100644 (file)
@@ -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))
index 495ba6f9b19bbf81a27c43da4d682d92295ced3a..e6d157c21ee445141a2e0a562fffca6209bfe9e0 100644 (file)
@@ -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;
     }
index eae361941bec3bc9f9e28e081f5f56298927d716..0d6950e278343853cae6dfc2b95770aa374b0e66 100644 (file)
@@ -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_T85:
+    case COMPRESSION_JPEG:
         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));
+#if defined(SPANDSP_SUPPORT_T43)
+    case COMPRESSION_T43:
+        TIFFSetField(t->tiff_file, TIFFTAG_FAXMODE, FAXMODE_CLASSF);
         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);
+    case COMPRESSION_T85:
+        TIFFSetField(t->tiff_file, TIFFTAG_FAXMODE, FAXMODE_CLASSF);
+        break;
+    }
     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 */
index 8044ad1e323d1197b61d2bc696e8928c25389ddc..5ce8db44c86fce9a399aa752135703fe095bd74e 100644 (file)
@@ -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 ------------------------------------------------------------*/
index 46480ee19bc1c19294ad418cc7c9043d5667e6a3..9aae8bfbf1d5c4c06c91f39a46314972e538d40c 100644 (file)
 #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"
 
index 56d3fa13a0fd3e49b4eacac6ad5607f151c74fd8..fe361d7744661a2f96fd43c56425758e22a834f7 100644 (file)
 #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)
 {
index c4898cf1cd33cedde89be639f7e38547ca634fa1..c00c62b47cf5077555f523d613d5c86ebc8f85ac 100644 (file)
 #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 */
index 8b5068803e836425e8aa7352af4451f2641c9f21..0c43b95a07522d6fb618520858701bfbd0eaa80b 100644 (file)
 
 #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
index ce0537b560a66925ac66bf24b2926d3d175a5c39..7e1fb9929bbe25cefa947469054933e6f7e523fe 100644 (file)
 #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)
     {
index a8779152711c3754bbea224545bf5cfca2353728..f1d7ce263d69d1638c9cfebecd1b8a06352c4d3a 100644 (file)
 
 #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
 
index 33e4d0b16191c3c8c2e143aa347581dde1a5fa96..525532a392e2fc062ddbfc94d267975071dd97d1 100644 (file)
 #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) */
index 7604ae4ac14c656be05daef4646a7e1c0ae44a68..868b9ac3414fdc95b3f4476c6b33994e498f9a1c 100644 (file)
 #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
 
index f141b336bb39b94a40464cd0683beb527e1ceb72..2178ad2ace5d1978f0a4d49cd667f0f3b96185f3 100644 (file)
@@ -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.
  *
  * 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 ------------------------------------------------------------*/
index 224fb5fd62606feac607c2344776a68622068c7f..31aeb5a9528363f614c34a58f5181edc82c51302 100755 (executable)
@@ -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 ]