A fax session is controlled by the T.30 protocol.  This protocol contains a set of messages that are passed back and forth during a fax to perform tasks such as negotiate the parameters the two sides will use (resolution, compression, etc.) and to inform that a page had been sent and whether that page had been received correctly. 

Your Brooktrout board handles all these protocol messages for you automatically.  However, there may be times when you want to temporarily pause the protocol, to “hold it up” for a time.  The Brooktrout API allows you to do just that with a function called BfvFaxT30Holdup.  This function allows you to set up a callback function in your application which will be called right in the middle of a T.30 protocol message exchange.  This gives you access to execute some functionality that you wouldn’t ordinarily get a chance to do.

I just mentioned the two main parts of the T.30 protocol, namely the part in the beginning where the fax parameters get negotiated and the part after each page is sent.  BfvFaxT30Holdup gives you options to perform tasks during each of those phases separately.

Let’s look at the fax negotiation part first.  Fax negotiation takes place at the beginning of the fax session with the receiving end sending a message called a DIS (Digital Information Signal).  The DIS tells what the receiver CAN handle for fax settings, like what resolutions it supports and if it can use Error Correction Mode.  The sending side then responds with a DCS (Digital Command Signal) which says what parameters WILL be used for the fax.  The DIS/DCS exchange happens under the covers, but you might want to know the capabilities of the remote side in order to make a decision on what to do next.  One good example of that is sending color fax.  It’s a smart idea to see if the receiving side can handle color fax before you try sending to it since many fax devices do not support this.  You can use T.30 Holdup to check the receiver’s DIS capabilities from within the callback function before sending out your own DCS.  If the receiver supports color fax, you’d queue up a color fax document, and if not, just send a normal black and white fax, and your DCS will be go out reflecting if you’re sending color fax or not.

It can also be quite useful to pause the T.30 protocol for the part after each page, especially for faxes sent not using Error Correction Mode (ECM).  After a the sending side sends a fax page it then sends an MPS (MultiPage Signal) or EOP (End Of Procedure) message, depending on whether there are more pages to send.  At this point the callback function will be invoked and can be used to check items like the number of bad fax lines received and what the confirmation value will be.  (The confirmation value is the fax message back from the receiver that indicates if the fax was received correctly or if it had errors.)  You can even decide to terminate the call early from the callback function if you think too many bad lines have been received and you don’t wish to continue with the fax.

Are there any drawbacks to using T30 Holdup?  There really aren’t, but I’d caution you to return from the callback function as quickly as possible.  Just because you’re holding up the protocol for a bit doesn’t mean the other side’s fax device is too.  It won’t know what you’re doing and so it still expects to receive T.30 protocol messages within a certain amount of time.  As long as you return from the callback function right away there won’t be a problem.

I hope that you find T.30 Holdup a useful feature for your Brooktrout fax application.