package uk.co.mmscomputing.device.capi.facility;
import uk.co.mmscomputing.device.capi.*;
// Eicon SDK: eicon/sdk/Doc/CxEcho.pdf
public class EchoCancellerConf extends FacilityConf{
protected int function;
public EchoCancellerConf(Rider r){
super(r);
function=r.readWord(); // function
r.structBegin(); // function-specific parameter
}
static public MsgIn create(Rider r){
int function=r.readWord(); // function
r.structBegin(); // function-specific parameter
switch(function){
case 0: return new GetSupportedServicesConf(r);
case 1: return new EnableConf(r);
case 2: return new DisableConf(r);
}
return new EchoCancellerConf(r);
}
public int getFunctionNo(){ return function;}
public String toString(){
String s=super.toString();
s+="function : "+function+"\n\t";
return s;
}
static public class GetSupportedServicesConf extends EchoCancellerConf{
private int options;
private int maxTailLength,maxPreDelay; // in [ms]
public GetSupportedServicesConf(Rider r){
super(r);
if(info==0){
info=r.readWord();
if(info==0){
options = r.readWord();
maxTailLength = r.readWord();
maxPreDelay = r.readWord();
}
}
}
public int getOptions(){return options;}
public int getMaxTailLength(){return maxTailLength;}
public int getMaxPreDelay(){return maxPreDelay;}
public String toString(){
String s=super.toString();
s+="options : 0"+Integer.toBinaryString(options)+"b\n\t";
s+="maxTailLength : "+maxTailLength+"\n\t";
s+="maxPreDelay : "+maxPreDelay+"\n\t";
return s;
}
}
static public class EnableConf extends EchoCancellerConf{
public EnableConf(Rider r){
super(r);
if(info==0){
info=r.readWord();
}
}
}
static public class DisableConf extends EchoCancellerConf{
public DisableConf(Rider r){
super(r);
if(info==0){
info=r.readWord();
}
}
}
}