OPENZAP-74 thx Raul see you at ClueCon
git-svn-id: http://svn.openzap.org/svn/openzap/trunk@736 a93c3328-9c30-0410-af19-c9cd2b2d52af
This commit is contained in:
parent
8036f3839c
commit
385fa17732
|
@ -3,3 +3,6 @@ codec_ms => 20
|
|||
wink_ms => 150
|
||||
flash_ms => 750
|
||||
echo_cancel_level => 64
|
||||
rxgain => 0.0
|
||||
txgain => 0.0
|
||||
|
||||
|
|
|
@ -275,6 +275,10 @@ typedef enum {
|
|||
ZAP_COMMAND_DISABLE_ECHOTRAIN,
|
||||
ZAP_COMMAND_SET_CAS_BITS,
|
||||
ZAP_COMMAND_GET_CAS_BITS,
|
||||
ZAP_COMMAND_SET_RX_GAIN,
|
||||
ZAP_COMMAND_GET_RX_GAIN,
|
||||
ZAP_COMMAND_SET_TX_GAIN,
|
||||
ZAP_COMMAND_GET_TX_GAIN,
|
||||
ZAP_COMMAND_COUNT
|
||||
} zap_command_t;
|
||||
|
||||
|
|
|
@ -42,6 +42,8 @@ static struct {
|
|||
uint32_t flash_ms;
|
||||
uint32_t eclevel;
|
||||
uint32_t etlevel;
|
||||
float rxgain;
|
||||
float txgain;
|
||||
} zt_globals;
|
||||
|
||||
struct ioctl_codes {
|
||||
|
@ -165,6 +167,57 @@ static zap_socket_t CONTROL_FD = ZT_INVALID_SOCKET;
|
|||
ZIO_SPAN_NEXT_EVENT_FUNCTION(zt_next_event);
|
||||
ZIO_SPAN_POLL_EVENT_FUNCTION(zt_poll_event);
|
||||
|
||||
static void zt_build_gains(struct zt_gains *g, float rxgain, float txgain, int codec)
|
||||
{
|
||||
int j;
|
||||
int k;
|
||||
float linear_rxgain = pow(10.0, rxgain / 20.0);
|
||||
float linear_txgain = pow(10.0, txgain / 20.0);
|
||||
|
||||
switch (codec) {
|
||||
case ZAP_CODEC_ALAW:
|
||||
for (j = 0; j < (sizeof(g->receive_gain) / sizeof(g->receive_gain[0])); j++) {
|
||||
if (rxgain) {
|
||||
k = (int) (((float) alaw_to_linear(j)) * linear_rxgain);
|
||||
if (k > 32767) k = 32767;
|
||||
if (k < -32767) k = -32767;
|
||||
g->receive_gain[j] = linear_to_alaw(k);
|
||||
} else {
|
||||
g->receive_gain[j] = j;
|
||||
}
|
||||
if (txgain) {
|
||||
k = (int) (((float) alaw_to_linear(j)) * linear_txgain);
|
||||
if (k > 32767) k = 32767;
|
||||
if (k < -32767) k = -32767;
|
||||
g->transmit_gain[j] = linear_to_alaw(k);
|
||||
} else {
|
||||
g->transmit_gain[j] = j;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case ZAP_CODEC_ULAW:
|
||||
for (j = 0; j < (sizeof(g->receive_gain) / sizeof(g->receive_gain[0])); j++) {
|
||||
if (rxgain) {
|
||||
k = (int) (((float) ulaw_to_linear(j)) * linear_rxgain);
|
||||
if (k > 32767) k = 32767;
|
||||
if (k < -32767) k = -32767;
|
||||
g->receive_gain[j] = linear_to_ulaw(k);
|
||||
} else {
|
||||
g->receive_gain[j] = j;
|
||||
}
|
||||
if (txgain) {
|
||||
k = (int) (((float) ulaw_to_linear(j)) * linear_txgain);
|
||||
if (k > 32767) k = 32767;
|
||||
if (k < -32767) k = -32767;
|
||||
g->transmit_gain[j] = linear_to_ulaw(k);
|
||||
} else {
|
||||
g->transmit_gain[j] = j;
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static unsigned zt_open_range(zap_span_t *span, unsigned start, unsigned end, zap_chan_type_t type, char *name, char *number, unsigned char cas_bits)
|
||||
{
|
||||
unsigned configured = 0, x;
|
||||
|
@ -319,8 +372,26 @@ static unsigned zt_open_range(zap_span_t *span, unsigned start, unsigned end, za
|
|||
zchan->native_codec = zchan->effective_codec = type;
|
||||
|
||||
}
|
||||
if(zt_globals.rxgain || zt_globals.txgain) {
|
||||
struct zt_gains gains;
|
||||
memset(&gains, 0, sizeof(gains));
|
||||
|
||||
gains.chan_no = ztp.chan_no;
|
||||
zt_build_gains(&gains, zt_globals.rxgain, zt_globals.txgain, zchan->native_codec);
|
||||
|
||||
if(zt_globals.rxgain)
|
||||
zap_log(ZAP_LOG_INFO, "Setting rxgain to %f on channel %d\n", zt_globals.rxgain, gains.chan_no);
|
||||
|
||||
if(zt_globals.txgain)
|
||||
zap_log(ZAP_LOG_INFO, "Setting txgain to %f on channel %d\n", zt_globals.txgain, gains.chan_no);
|
||||
|
||||
if (ioctl(sockfd, codes.SETGAINS, &gains) < 0) {
|
||||
zap_log(ZAP_LOG_ERROR, "failure configuring device %s as OpenZAP device %d:%d fd:%d\n", chanpath, zchan->span_id, zchan->chan_id, sockfd);
|
||||
close(sockfd);
|
||||
continue;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
ztp.wink_time = zt_globals.wink_ms;
|
||||
ztp.flash_time = zt_globals.flash_ms;
|
||||
|
@ -330,7 +401,6 @@ static unsigned zt_open_range(zap_span_t *span, unsigned start, unsigned end, za
|
|||
close(sockfd);
|
||||
continue;
|
||||
}
|
||||
|
||||
|
||||
if (!zap_strlen_zero(name)) {
|
||||
zap_copy_string(zchan->chan_name, name, sizeof(zchan->chan_name));
|
||||
|
@ -414,6 +484,7 @@ static ZIO_CONFIGURE_FUNCTION(zt_configure)
|
|||
{
|
||||
|
||||
int num;
|
||||
float fnum;
|
||||
|
||||
if (!strcasecmp(category, "defaults")) {
|
||||
if (!strcasecmp(var, "codec_ms")) {
|
||||
|
@ -445,6 +516,24 @@ static ZIO_CONFIGURE_FUNCTION(zt_configure)
|
|||
zt_globals.eclevel = num;
|
||||
}
|
||||
|
||||
} else if (!strcasecmp(var, "rxgain")) {
|
||||
fnum = (float)atof(val);
|
||||
if (fnum < -100.0 || fnum > 100.0) {
|
||||
zap_log(ZAP_LOG_WARNING, "invalid rxgain val at line %d\n", lineno);
|
||||
} else {
|
||||
zt_globals.rxgain = fnum;
|
||||
zap_log(ZAP_LOG_INFO, "Setting rxgain val to %f\n", fnum);
|
||||
}
|
||||
|
||||
} else if (!strcasecmp(var, "txgain")) {
|
||||
fnum = (float)atof(val);
|
||||
if (fnum < -100.0 || fnum > 100.0) {
|
||||
zap_log(ZAP_LOG_WARNING, "invalid txgain val at line %d\n", lineno);
|
||||
} else {
|
||||
zt_globals.txgain = fnum;
|
||||
zap_log(ZAP_LOG_INFO, "Setting txgain val to %f\n", fnum);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue