package uk.co.mmscomputing.device.capi;
import java.io.*;
public class CapiFaxDetector extends Thread{
CapiChannel channel;
public CapiFaxDetector(CapiChannel channel){
this.channel=channel;
}
public void run(){
Thread.currentThread().setName(getClass().getName()+".0x"+Integer.toHexString(channel.getLineID()));
try{
// if we receive 3 fax cng-tones then assume analogue group 3 fax
CapiController ctrl=CapiEnumerator.getController(channel);
if(ctrl.isSupportingDTMF()){
// cng tone = 1100Hz 0.5s long every 3 sec, capi sends 'X'.
// assume it is a fax if we have received at least 3 cngs within timeToWaitForCNGs [30] secs
channel.startDTMF();
String dtmf=channel.getDTMFDigits(3,30000); // try for 30 secs to collet 3 Xs
channel.stopDTMF();
// System.out.println("DTMF = "+dtmf);
if(dtmf.startsWith("XXX")){
if(ctrl.isSupportingGroup3Fax()){
((CapiNCC)channel).selectFaxProtocol(); // switch protocol from speech to fax
// System.out.println(getClass().getName()+".run\n\tSwitched to FAX Protocol.");
// this will switch protocol of physical line
// the logical ncc (here: channel) will be torn down
// and a new ncc channel will wait at server.accept
}else{
System.out.println("3\bController "+ctrl.getName()+" does not support Group 3 FAX. Handle as sound data.");
}
}
}else{
System.out.println("3\bController "+ctrl.getName()+" does not support DTMF detection. Handle as sound data.");
}
}catch(Exception e){
e.printStackTrace();
}
}
}