Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: Repair Jira Macros
Page Properties
faxt4.cTarget release6.7.0000-3
Epic
Jira Legacy
serverDialogic System JIRA
columnskey,summary,type,created,updated,due,assignee,reporter,priority,status,resolution
serverId8f70d0a49d998c43-20dab14a-363f37e0-81e294cb-5b2706a93a6ae776ac9fe88f
keyBRKT-258
Document status
Status
colourGreen
titleDRAFTApproved
Document owner

Toshan Lash

Designer
Developers
QA

...

Version

Author

Date

State

Description of Changes

0.1

Toshan Lash

02/10/2015

Working Draft

Initial version.

0.2

Toshan Lash

02/12/2015

Working Draft

Updated features for further study information.

0.3

Toshan Lash

 

 

 

...

Acronym

Description

API

02/23/2015

 Approved

Changes based on feedback and sample application changes.

0.4Toshan Lash04/10/2015 Updated flow diagrams and test diagrams. Added new tag to event to indicate whether a T.4 timeout occurred.
     


 
 
Acronyms

Acronym

Description

API

Application Programming Interface

BFV

Boston Fax and Voice API

SDK

Software Development Kit

...

Overall Feature Description
The current implementation of the Dialogic Brooktrout product provides support for two T4 timer modes. The modes are set via the keyword t4_timer_mode in the user configuration file. Mode 0 is the original mode which will adapt the T4 timer using an algorithm based on the attempt number, the duration to receive the last response or the T4 timeout value if no response is received and the T4 timer value which was used to set the T4 timer after sending a command to the remote fax machine. Mode 1 is a new mode which was implemented recently, which initializes the T4 timer value but doesn't adapt the T4 timer. 
 
For the new mode 2 (t4_timer_mode = 2) there is only one T4 timer value for the different attempts, instead of three. If the fax session is the originator and the keyword t4_xmit_timer is not in the user configuration file or is set to 0 the T4 timer value will be initialized to a value based on the media type and manual or automatic fax operation. For T.38 the initial value will be 5.12 seconds. For G.711/PSTN the initial value will be 4.5 seconds for manual fax operation and 3.4 seconds for automatic fax operation. If the fax session is the originator and the keyword t4_xmit_timer is in the user configuration file and has a value other than 0 then the T4 timer value will be initialized to the t4_xmit_timer value (limited to 3,000 to 15,000 ms). If the fax session is the answerer and the keyword t4_recv_timer is not in the user configuration file or is set to 0 the T4 timer value will be initialized to a value based on the media type and manual or automatic fax operation. For T.38 the initial value will be 5.12 seconds. For G.711/PSTN the initial value will be 4.5 seconds for manual fax operation and 3.4 seconds for automatic fax operation. If the fax session is the answerer and the keyword t4_recv_timer is in the user configuration file and has a value other than 0 then the T4 timer value will be initialized to the t4_recv_timer value (limited to 3,000 to 15,000 ms). In this mode, the firmware does not do any T4 timer adaptation itself. An event is sent to the host application which informs the host application of the attempt number which just took place, the duration to receive the last response or the T4 timeout value if no response is received and , the current value of the T4 timer setting . The host application would then send and whether the event is due to a response received or the T4 timer expiring. The host application could then send an adapted T4 timer value (limited by the firmware to 3,000 to 15,000 ms) for the next command response exchange.
The end user application will need to use the existing macro LINE_SET_INCOMING_CMD_FUNC(lp, t4TimerProcessEvent); where the parameter t4TimerProcessEvent is a function which checks if the received event is from the fax facility and has a command specifier indicating it is a FAX_T4_ADAPT_INFO_EVENT. If it is, then the new API function BfvFaxT4TimerParams(lp, &args_fax) can be called, with the new member args_fax.t4TimerValue equal to 0 which indicates to the function that it should obtain the values of the three the four new members args_fax.t4TimerValue, args_fax.t4Duration, args_fax.t4Attempt and args_fax.t4Attemptt4Timeout. Once these three these four values have been obtained, the t4TimerProcessEvent(BTLINE *lp, struct args_packet *args) function can calculate a new value for the T4 timer and set args_fax.t4TimerValue equal to this value and then call BfvFaxT4TimerParams(lp, &args_fax) which will send a command to the firmware to set the new T4 timer value.

...



Sample Call Flows
Below are a couple call flows depicting the use of the new mode 2.Image RemovedImage RemovedImage RemovedImage Removed

 

 Image Added

Image Added

Image Added

Image Added

Image Added

 

Sample Application Coding

Set the function which will be called when an event is received by the host code:
LINE_SET_INCOMING_CMD_FUNC(lp, t4TimerProcessEvent);
The following is the function which is called when any event is received by the host code. The function will check for the T4 timer event.

...

void

...

t4TimerProcessEvent(BTLINE

...

*lp,

...

struct

...

args_packet

...

*args)

...

{

...

    struct args_fax

...

args_fax;

...

    unsigned t4TimerValue;

...

    unsigned t4Duration;

...

    unsigned t4Attempt;

...


...

    unsigned t4Timeout;

    //

...

Check

...

to

...

see

...

if

...

the

...

event

...

received

...

is

...

from

...

the

...

fax

...

facility

...

and

...

is

...

the

...

    //

...

T4

...

adaptation

...

information

...

event.

...

    if

...

((args->facility

...

==

...

MILL_FACILITY_FAX)

...

&&

...

        (args->cmd_verb

...

==

...

MILL_VERB_EVENT)

...

&&

...

        (args->cmd_specifier

...

==

...

FAX_T4_ADAPT_INFO_EVENT))

...

    {

...

        //

...

Obtain

...

the

...

current

...

T4

...

timer

...

value,

...

the

...

T4

...

duration

...

to

...

receive

...

        //

...

a

...

response

...

or

...

T4

...

time

...

out

...

, the T4 attempt and

...

the

...

T4

...

timeout indication.

...

        BT_ZERO(args_fax);

...

        BfvFaxT4TimerParams(lp,

...

&args_fax);

...

        t4TimerValue

...

=

...

args_fax.t4TimerValue;

...

        t4Duration

...

=

...

args_fax.t4Duration;

...

        t4Attempt

...

=

...

args_fax.t4Attempt

...

;
        t4Timeout = args_fax.t4Timeout;
       
        printf("t4TimerProcessEvent

...

:       attempt %u  duration %u  T4TimerValue %u  timeout %u\n",

...

               args_fax.

...

t4Attempt,

...

               args_fax.t4Duration,

...

               args_fax.t4TimerValue,
               args_fax.

...

t4Timeout
               );

...

...

        //

...

Set

...

the

...

T4

...

timer

...

value

...

to

...

a

...

new

...

value.

...

For

...

example,

...

the

...

following

...

        //

...

checks

...

to

...

see

...

if

...

the

...

attempt

...

just

...

completed

...

is

...

1

...

and

...

if

...

so

...

, it

...

will

...

set

...

the

...

        //

...

T4

...

timer

...

value

...

to

...

the

...

existing

...

T4

...

timer

...

value

...

plus

...

500

...

ms.

...

        //

...

The end user

...

can

...

change

...

the

...

following

...

to

...

set

...

the

...

T4

...

timer

...

value

...

to

...

a

...

new

...

        //

...

value

...

according

...

to

...

some

...

algorithm

...

determined

...

by

...

the

...

end

...

user

...

        if

...

(t4Attempt

...

==

...

1)

...

        {

...

            BT_ZERO(args_fax);

...

            args_fax.t4TimerValue

...

=

...

t4TimerValue

...

+

...

500;

...

...

            printf("t4TimerProcessEvent

...

: Set

...

T4TimerValue

...

%u\n",

...


                   args_fax.t4TimerValue

...


                   );

...

...

            BfvFaxT4TimerParams(lp,

...

&args_fax);

...

        }

...

    }

...

}

Product Areas Affected

  • This feature will affect the T4 timer operation in a fax session if the keyword t4_timer_mode is set to 2.

...

  • The args_fax structure in the BFV API will be modified with 3 with 4 new fields, t4TimerValue, t4Duration, t4Attempt and t4Attemptt4Timeout.
  • A new API function BfvFaxT4TimerParams(MILL_LINE *lp, struct args_fax *args) will be added.

...


Test Scenario(s)
The following testing shall be done at a minimum. The two sample call flows shown above will be tested and it will be confirmed that the results are what is expected. In order to perform the testing, the firmware will need to be modified in several ways. In the firmware function faxSetAdaptiveT4Timer(), faxSendDebug will be called to send to the API debug log the attempt number and the value to be used for setting the T4 timer. In the firmware function faxUpdateAdaptiveT4Timer(), faxSendDebug will be called to send to the API debug log the attempt number, the duration to receive the response or the T4 time out if no response is received and , the current T4 timer value and the T4 timeout indication. In the firmware function faxT4TimerValue(), faxSendDebug will be called to send to the API debug log the new T4 timer value sent to the firmware from the host application.
For the sample call flow number 2, the firmware needs to be modified so that the transmitter ignores the first two CFR responses to the TSI.DCS.TCF sequence. The sample application for this enhancement based on the sample application fax.c will be modified as described above under Sample Application Coding. It will print to the API debug log the attempt number, the duration to receive the response or the T4 time out if no response is received and , the current T4 timer value and the T4 timeout indication. It will also print to the API debug log the new T4 timer value sent to the firmware if it is in fact sent.

...

Filelist will also be run on an SR140 doing 60 channels to 60 channels for 15 minutes using firmware which has not been modified to ignore the first couple CFRs. It will be confirmed that the results are OK.

Results embedded in the API debug log similar to the results shown below in red are expected.


Image Removed Image Added Image Removed

Image Added

Image RemovedImage Added


 
Target Release
SDK 6.7.3

Backward Propagation Release(s)
None

Risks
None