提交 9edbbd9c authored 作者: Steve Underwood's avatar Steve Underwood

Tweaks to FAX modem handling. These do NOT fix the occassional crashes people

see, but they are working towards a clean and complete fix.
上级 7d6b0e48
...@@ -163,7 +163,7 @@ ...@@ -163,7 +163,7 @@
<step dir="T" type="POSTAMBLE"/> <step dir="T" type="POSTAMBLE"/>
<step type="WAIT" value="75"/> <step type="WAIT" value="75"/>
<step dir="T" type="PREAMBLE" modem="V.21"/> <step dir="T" type="PREAMBLE" modem="V.21"/>
<step dir="T" type="HDLC" tag="PPS-MPS" value="FF C8 7D 72 80 00 08"/> <step dir="T" type="HDLC" tag="PPS-EOP" value="FF C8 7D 74 80 00 10"/>
<step dir="T" type="POSTAMBLE"/> <step dir="T" type="POSTAMBLE"/>
<possible-step> <possible-step>
......
...@@ -423,7 +423,7 @@ ...@@ -423,7 +423,7 @@
<step dir="T" type="HDLC" tag="DCS" value="FF C8 41 00 50 00"/> <step dir="T" type="HDLC" tag="DCS" value="FF C8 41 00 50 00"/>
<step dir="T" type="POSTAMBLE"/> <step dir="T" type="POSTAMBLE"/>
<step type="WAIT" value="75"/> <step type="WAIT" value="75"/>
<step dir="T" type="TCF" modem="V.27ter/4800" value="900" pattern="7"/> <!-- 01010 for 50 bits, and then zero for the test of the TCF --> <step dir="T" type="TCF" modem="V.27ter/4800" value="900" pattern="7"/> <!-- 01010 for 50 bits, and then zero for the rest of the TCF -->
<step dir="R" type="HDLC" modem="V.21" tag="CFR" value="FF C8 21"/> <step dir="R" type="HDLC" modem="V.21" tag="CFR" value="FF C8 21"/>
<step dir="R" type="SILENCE"/> <step dir="R" type="SILENCE"/>
......
...@@ -77,6 +77,10 @@ ...@@ -77,6 +77,10 @@
#include "spandsp/v27ter_rx.h" #include "spandsp/v27ter_rx.h"
#include "spandsp/v17tx.h" #include "spandsp/v17tx.h"
#include "spandsp/v17rx.h" #include "spandsp/v17rx.h"
#if defined(SPANDSP_SUPPORT_V34)
#include "spandsp/bitstream.h"
#include "spandsp/v34.h"
#endif
#include "spandsp/timezone.h" #include "spandsp/timezone.h"
#include "spandsp/t4_rx.h" #include "spandsp/t4_rx.h"
#include "spandsp/t4_tx.h" #include "spandsp/t4_tx.h"
...@@ -103,6 +107,10 @@ ...@@ -103,6 +107,10 @@
#include "spandsp/private/fsk.h" #include "spandsp/private/fsk.h"
#include "spandsp/private/modem_connect_tones.h" #include "spandsp/private/modem_connect_tones.h"
#include "spandsp/private/v8.h" #include "spandsp/private/v8.h"
#if defined(SPANDSP_SUPPORT_V34)
#include "spandsp/private/bitstream.h"
#include "spandsp/private/v34.h"
#endif
#include "spandsp/private/v17tx.h" #include "spandsp/private/v17tx.h"
#include "spandsp/private/v17rx.h" #include "spandsp/private/v17rx.h"
#include "spandsp/private/v27ter_tx.h" #include "spandsp/private/v27ter_tx.h"
......
...@@ -5,7 +5,7 @@ ...@@ -5,7 +5,7 @@
* *
* Written by Steve Underwood <steveu@coppice.org> * Written by Steve Underwood <steveu@coppice.org>
* *
* Copyright (C) 2003, 2005, 2006, 2008 Steve Underwood * Copyright (C) 2003, 2005, 2006, 2008, 2013 Steve Underwood
* *
* All rights reserved. * All rights reserved.
* *
...@@ -139,6 +139,12 @@ SPAN_DECLARE(const char *) fax_modem_to_str(int modem) ...@@ -139,6 +139,12 @@ SPAN_DECLARE(const char *) fax_modem_to_str(int modem)
return "V.27ter Rx"; return "V.27ter Rx";
case FAX_MODEM_V29_RX: case FAX_MODEM_V29_RX:
return "V.29 Rx"; return "V.29 Rx";
#if defined(SPANDSP_SUPPORT_V34)
case FAX_MODEM_V34_TX:
return "V.34 HDX Tx";
case FAX_MODEM_V34_RX:
return "V.34 HDX Rx";
#endif
} }
/*endswitch*/ /*endswitch*/
return "???"; return "???";
...@@ -150,8 +156,8 @@ static void fax_modems_hdlc_accept(void *user_data, const uint8_t *msg, int len, ...@@ -150,8 +156,8 @@ static void fax_modems_hdlc_accept(void *user_data, const uint8_t *msg, int len,
fax_modems_state_t *s; fax_modems_state_t *s;
s = (fax_modems_state_t *) user_data; s = (fax_modems_state_t *) user_data;
if (ok) if (len >= 0 && ok)
s->rx_frame_received = false; s->rx_frame_received = true;
if (s->hdlc_accept) if (s->hdlc_accept)
s->hdlc_accept(s->hdlc_accept_user_data, msg, len, ok); s->hdlc_accept(s->hdlc_accept_user_data, msg, len, ok);
} }
...@@ -322,7 +328,7 @@ SPAN_DECLARE(void) fax_modems_start_slow_modem(fax_modems_state_t *s, int which) ...@@ -322,7 +328,7 @@ SPAN_DECLARE(void) fax_modems_start_slow_modem(fax_modems_state_t *s, int which)
fsk_rx_init(&s->v21_rx, &preset_fsk_specs[FSK_V21CH2], FSK_FRAME_MODE_SYNC, (put_bit_func_t) hdlc_rx_put_bit, &s->hdlc_rx); fsk_rx_init(&s->v21_rx, &preset_fsk_specs[FSK_V21CH2], FSK_FRAME_MODE_SYNC, (put_bit_func_t) hdlc_rx_put_bit, &s->hdlc_rx);
fax_modems_set_rx_handler(s, (span_rx_handler_t) &fsk_rx, &s->v21_rx, (span_rx_fillin_handler_t) &fsk_rx_fillin, &s->v21_rx); fax_modems_set_rx_handler(s, (span_rx_handler_t) &fsk_rx, &s->v21_rx, (span_rx_fillin_handler_t) &fsk_rx_fillin, &s->v21_rx);
fsk_rx_signal_cutoff(&s->v21_rx, -39.09f); fsk_rx_signal_cutoff(&s->v21_rx, -39.09f);
s->rx_frame_received = false; //hdlc_rx_init(&s->hdlc_rx, false, true, HDLC_FRAMING_OK_THRESHOLD, fax_modems_hdlc_accept, s);
break; break;
case FAX_MODEM_CED_TONE_RX: case FAX_MODEM_CED_TONE_RX:
modem_connect_tones_rx_init(&s->connect_rx, MODEM_CONNECT_TONES_FAX_CED, s->tone_callback, s->tone_callback_user_data); modem_connect_tones_rx_init(&s->connect_rx, MODEM_CONNECT_TONES_FAX_CED, s->tone_callback, s->tone_callback_user_data);
...@@ -348,6 +354,8 @@ SPAN_DECLARE(void) fax_modems_start_slow_modem(fax_modems_state_t *s, int which) ...@@ -348,6 +354,8 @@ SPAN_DECLARE(void) fax_modems_start_slow_modem(fax_modems_state_t *s, int which)
fax_modems_set_next_tx_handler(s, (span_tx_handler_t) NULL, NULL); fax_modems_set_next_tx_handler(s, (span_tx_handler_t) NULL, NULL);
break; break;
} }
/*endswitch*/
s->rx_frame_received = false;
} }
/*- End of function --------------------------------------------------------*/ /*- End of function --------------------------------------------------------*/
...@@ -365,6 +373,7 @@ SPAN_DECLARE(void) fax_modems_start_fast_modem(fax_modems_state_t *s, int which, ...@@ -365,6 +373,7 @@ SPAN_DECLARE(void) fax_modems_start_fast_modem(fax_modems_state_t *s, int which,
get_bit_user_data = (void *) &s->hdlc_tx; get_bit_user_data = (void *) &s->hdlc_tx;
put_bit = (put_bit_func_t) hdlc_rx_put_bit; put_bit = (put_bit_func_t) hdlc_rx_put_bit;
put_bit_user_data = (void *) &s->hdlc_rx; put_bit_user_data = (void *) &s->hdlc_rx;
//hdlc_rx_init(&s->hdlc_rx, false, true, HDLC_FRAMING_OK_THRESHOLD, fax_modems_hdlc_accept, s);
} }
else else
{ {
...@@ -382,8 +391,6 @@ SPAN_DECLARE(void) fax_modems_start_fast_modem(fax_modems_state_t *s, int which, ...@@ -382,8 +391,6 @@ SPAN_DECLARE(void) fax_modems_start_fast_modem(fax_modems_state_t *s, int which,
s->current_rx_type = which; s->current_rx_type = which;
s->short_train = false; s->short_train = false;
s->fast_modem = which; s->fast_modem = which;
if (hdlc_mode)
s->rx_frame_received = false;
switch (s->fast_modem) switch (s->fast_modem)
{ {
case FAX_MODEM_V27TER_RX: case FAX_MODEM_V27TER_RX:
...@@ -417,6 +424,14 @@ SPAN_DECLARE(void) fax_modems_start_fast_modem(fax_modems_state_t *s, int which, ...@@ -417,6 +424,14 @@ SPAN_DECLARE(void) fax_modems_start_fast_modem(fax_modems_state_t *s, int which,
fax_modems_set_tx_handler(s, (span_tx_handler_t) &v17_tx, &s->fast_modems.v17_tx); fax_modems_set_tx_handler(s, (span_tx_handler_t) &v17_tx, &s->fast_modems.v17_tx);
fax_modems_set_next_tx_handler(s, (span_tx_handler_t) NULL, NULL); fax_modems_set_next_tx_handler(s, (span_tx_handler_t) NULL, NULL);
break; break;
#if defined(SPANDSP_SUPPORT_V34)
case FAX_MODEM_V34_RX:
v34_init(&s->fast_modems.v34, 2400, s->bit_rate, true, false, NULL, NULL, put_bit, put_bit_user_data);
break;
case FAX_MODEM_V34_TX:
v34_init(&s->fast_modems.v34, 2400, s->bit_rate, true, false, get_bit, get_bit_user_data, NULL, NULL);
break;
#endif
} }
/*endswitch*/ /*endswitch*/
} }
...@@ -465,6 +480,7 @@ SPAN_DECLARE(void) fax_modems_start_fast_modem(fax_modems_state_t *s, int which, ...@@ -465,6 +480,7 @@ SPAN_DECLARE(void) fax_modems_start_fast_modem(fax_modems_state_t *s, int which,
/*endswitch*/ /*endswitch*/
} }
/*endif*/ /*endif*/
s->rx_frame_received = false;
} }
/*- End of function --------------------------------------------------------*/ /*- End of function --------------------------------------------------------*/
......

Microsoft Visual Studio Solution File, Format Version 9.00
# Visual Studio 2005
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "make_at_dictionary", "msvc\make_at_dictionary.2005.vcproj", "{DEE932AB-5911-4700-9EEB-8C7090A0A330}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "make_modem_filter", "msvc\make_modem_filter.2005.vcproj", "{329A6FA0-0FCC-4435-A950-E670AEFA9838}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libspandsp", "libspandsp.2005.vcproj", "{1CBB0077-18C5-455F-801C-0A0CE7B0BBF5}"
ProjectSection(ProjectDependencies) = postProject
{329A6FA0-0FCC-4435-A950-E670AEFA9838} = {329A6FA0-0FCC-4435-A950-E670AEFA9838}
{DEE932AB-5911-4700-9EEB-8C7090A0A330} = {DEE932AB-5911-4700-9EEB-8C7090A0A330}
{401A40CD-5DB4-4E34-AC68-FA99E9FAC014} = {401A40CD-5DB4-4E34-AC68-FA99E9FAC014}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libspandsp_sim", "..\spandsp-sim\libspandsp_sim.2005.vcproj", "{1CBB0077-18C5-455F-801C-0A0CE7B0BBF5}"
ProjectSection(ProjectDependencies) = postProject
{329A6FA0-0FCC-4435-A950-E670AEFA9838} = {329A6FA0-0FCC-4435-A950-E670AEFA9838}
{DEE932AB-5911-4700-9EEB-8C7090A0A330} = {DEE932AB-5911-4700-9EEB-8C7090A0A330}
{401A40CD-5DB4-4E34-AC68-FA99E9FAC014} = {401A40CD-5DB4-4E34-AC68-FA99E9FAC014}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libtiff", "libtiff.2005.vcproj", "{401A40CD-5DB4-4E34-AC68-FA99E9FAC014}"
ProjectSection(ProjectDependencies) = postProject
{2B8A45C9-FEB4-4734-AB37-8DB9DB899917} = {2B8A45C9-FEB4-4734-AB37-8DB9DB899917}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Download TIFF", "msvc\Download_TIFF.2005.vcproj", "{2B8A45C9-FEB4-4734-AB37-8DB9DB899917}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
All|Win32 = All|Win32
Debug|Win32 = Debug|Win32
Release|Win32 = Release|Win32
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{DEE932AB-5911-4700-9EEB-8C7090A0A330}.All|Win32.ActiveCfg = All|Win32
{DEE932AB-5911-4700-9EEB-8C7090A0A330}.All|Win32.Build.0 = All|Win32
{DEE932AB-5911-4700-9EEB-8C7090A0A330}.Debug|Win32.ActiveCfg = All|Win32
{DEE932AB-5911-4700-9EEB-8C7090A0A330}.Debug|Win32.Build.0 = All|Win32
{DEE932AB-5911-4700-9EEB-8C7090A0A330}.Release|Win32.ActiveCfg = All|Win32
{329A6FA0-0FCC-4435-A950-E670AEFA9838}.All|Win32.ActiveCfg = All|Win32
{329A6FA0-0FCC-4435-A950-E670AEFA9838}.All|Win32.Build.0 = All|Win32
{329A6FA0-0FCC-4435-A950-E670AEFA9838}.Debug|Win32.ActiveCfg = All|Win32
{329A6FA0-0FCC-4435-A950-E670AEFA9838}.Debug|Win32.Build.0 = All|Win32
{329A6FA0-0FCC-4435-A950-E670AEFA9838}.Release|Win32.ActiveCfg = All|Win32
{1CBB0077-18C5-455F-801C-0A0CE7B0BBF5}.All|Win32.ActiveCfg = Release|Win32
{1CBB0077-18C5-455F-801C-0A0CE7B0BBF5}.All|Win32.Build.0 = Release|Win32
{1CBB0077-18C5-455F-801C-0A0CE7B0BBF5}.Debug|Win32.ActiveCfg = Debug|Win32
{1CBB0077-18C5-455F-801C-0A0CE7B0BBF5}.Debug|Win32.Build.0 = Debug|Win32
{1CBB0077-18C5-455F-801C-0A0CE7B0BBF5}.Release|Win32.ActiveCfg = Release|Win32
{1CBB0077-18C5-455F-801C-0A0CE7B0BBF5}.Release|Win32.Build.0 = Release|Win32
{401A40CD-5DB4-4E34-AC68-FA99E9FAC014}.All|Win32.ActiveCfg = Release|Win32
{401A40CD-5DB4-4E34-AC68-FA99E9FAC014}.All|Win32.Build.0 = Release|Win32
{401A40CD-5DB4-4E34-AC68-FA99E9FAC014}.Debug|Win32.ActiveCfg = Debug|Win32
{401A40CD-5DB4-4E34-AC68-FA99E9FAC014}.Debug|Win32.Build.0 = Debug|Win32
{401A40CD-5DB4-4E34-AC68-FA99E9FAC014}.Release|Win32.ActiveCfg = Release|Win32
{401A40CD-5DB4-4E34-AC68-FA99E9FAC014}.Release|Win32.Build.0 = Release|Win32
{2B8A45C9-FEB4-4734-AB37-8DB9DB899917}.All|Win32.ActiveCfg = All|Win32
{2B8A45C9-FEB4-4734-AB37-8DB9DB899917}.All|Win32.Build.0 = All|Win32
{2B8A45C9-FEB4-4734-AB37-8DB9DB899917}.Debug|Win32.ActiveCfg = All|Win32
{2B8A45C9-FEB4-4734-AB37-8DB9DB899917}.Debug|Win32.Build.0 = All|Win32
{2B8A45C9-FEB4-4734-AB37-8DB9DB899917}.Release|Win32.ActiveCfg = All|Win32
{2B8A45C9-FEB4-4734-AB37-8DB9DB899917}.Release|Win32.Build.0 = All|Win32
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
EndGlobal
差异被折叠。
...@@ -28,7 +28,7 @@ run_tsb85_test() ...@@ -28,7 +28,7 @@ run_tsb85_test()
fi fi
} }
for TEST in PPS-MPS-lost-PPS for TEST in PPS-MPS-lost-PPS V17-12000-V29-9600
do do
run_tsb85_test run_tsb85_test
done done
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论