|
|
@ -54,14 +54,14 @@ CDTMF::~CDTMF()
|
|
|
|
{
|
|
|
|
{
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
WX_STATUS CDTMF::decodeVW(const unsigned char* payload)
|
|
|
|
WX_STATUS CDTMF::decodeVoiceFRMode(const unsigned char* payload)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
assert(payload != NULL);
|
|
|
|
assert(payload != NULL);
|
|
|
|
|
|
|
|
|
|
|
|
payload += YSF_SYNC_LENGTH_BYTES + YSF_FICH_LENGTH_BYTES;
|
|
|
|
payload += YSF_SYNC_LENGTH_BYTES + YSF_FICH_LENGTH_BYTES;
|
|
|
|
|
|
|
|
|
|
|
|
for (unsigned int offset = 0U; offset < 90U; offset += 18U) {
|
|
|
|
for (unsigned int offset = 0U; offset < 90U; offset += 18U) {
|
|
|
|
WX_STATUS status = decodeVWSlice(payload + offset);
|
|
|
|
WX_STATUS status = decodeVoiceFRModeSlice(payload + offset);
|
|
|
|
if (status != WXS_NONE)
|
|
|
|
if (status != WXS_NONE)
|
|
|
|
return status;
|
|
|
|
return status;
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -69,14 +69,14 @@ WX_STATUS CDTMF::decodeVW(const unsigned char* payload)
|
|
|
|
return WXS_NONE;
|
|
|
|
return WXS_NONE;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
WX_STATUS CDTMF::decodeDN1(const unsigned char* payload)
|
|
|
|
WX_STATUS CDTMF::decodeVDMode1(const unsigned char* payload)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
assert(payload != NULL);
|
|
|
|
assert(payload != NULL);
|
|
|
|
|
|
|
|
|
|
|
|
payload += YSF_SYNC_LENGTH_BYTES + YSF_FICH_LENGTH_BYTES;
|
|
|
|
payload += YSF_SYNC_LENGTH_BYTES + YSF_FICH_LENGTH_BYTES;
|
|
|
|
|
|
|
|
|
|
|
|
for (unsigned int offset = 5U; offset < 90U; offset += 18U) {
|
|
|
|
for (unsigned int offset = 9U; offset < 90U; offset += 18U) {
|
|
|
|
WX_STATUS status = decodeDN1Slice(payload + offset);
|
|
|
|
WX_STATUS status = decodeVDMode1Slice(payload + offset);
|
|
|
|
if (status != WXS_NONE)
|
|
|
|
if (status != WXS_NONE)
|
|
|
|
return status;
|
|
|
|
return status;
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -84,14 +84,14 @@ WX_STATUS CDTMF::decodeDN1(const unsigned char* payload)
|
|
|
|
return WXS_NONE;
|
|
|
|
return WXS_NONE;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
WX_STATUS CDTMF::decodeDN2(const unsigned char* payload)
|
|
|
|
WX_STATUS CDTMF::decodeVDMode2(const unsigned char* payload)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
assert(payload != NULL);
|
|
|
|
assert(payload != NULL);
|
|
|
|
|
|
|
|
|
|
|
|
payload += YSF_SYNC_LENGTH_BYTES + YSF_FICH_LENGTH_BYTES;
|
|
|
|
payload += YSF_SYNC_LENGTH_BYTES + YSF_FICH_LENGTH_BYTES;
|
|
|
|
|
|
|
|
|
|
|
|
for (unsigned int offset = 9U; offset < 90U; offset += 18U) {
|
|
|
|
for (unsigned int offset = 5U; offset < 90U; offset += 18U) {
|
|
|
|
WX_STATUS status = decodeDN2Slice(payload + offset);
|
|
|
|
WX_STATUS status = decodeVDMode2Slice(payload + offset);
|
|
|
|
if (status != WXS_NONE)
|
|
|
|
if (status != WXS_NONE)
|
|
|
|
return status;
|
|
|
|
return status;
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -99,7 +99,7 @@ WX_STATUS CDTMF::decodeDN2(const unsigned char* payload)
|
|
|
|
return WXS_NONE;
|
|
|
|
return WXS_NONE;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
WX_STATUS CDTMF::decodeVWSlice(const unsigned char* ambe)
|
|
|
|
WX_STATUS CDTMF::decodeVoiceFRModeSlice(const unsigned char* ambe)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
// DTMF begins with these byte values
|
|
|
|
// DTMF begins with these byte values
|
|
|
|
if ((ambe[0] & DTMF_MASK[0]) == DTMF_SIG[0] && (ambe[1] & DTMF_MASK[1]) == DTMF_SIG[1] &&
|
|
|
|
if ((ambe[0] & DTMF_MASK[0]) == DTMF_SIG[0] && (ambe[1] & DTMF_MASK[1]) == DTMF_SIG[1] &&
|
|
|
@ -177,7 +177,7 @@ WX_STATUS CDTMF::decodeVWSlice(const unsigned char* ambe)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
WX_STATUS CDTMF::decodeDN1Slice(const unsigned char* ambe)
|
|
|
|
WX_STATUS CDTMF::decodeVDMode1Slice(const unsigned char* ambe)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
// DTMF begins with these byte values
|
|
|
|
// DTMF begins with these byte values
|
|
|
|
if ((ambe[0] & DTMF_MASK[0]) == DTMF_SIG[0] && (ambe[1] & DTMF_MASK[1]) == DTMF_SIG[1] &&
|
|
|
|
if ((ambe[0] & DTMF_MASK[0]) == DTMF_SIG[0] && (ambe[1] & DTMF_MASK[1]) == DTMF_SIG[1] &&
|
|
|
@ -255,7 +255,7 @@ WX_STATUS CDTMF::decodeDN1Slice(const unsigned char* ambe)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
WX_STATUS CDTMF::decodeDN2Slice(const unsigned char* ambe)
|
|
|
|
WX_STATUS CDTMF::decodeVDMode2Slice(const unsigned char* ambe)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
// DTMF begins with these byte values
|
|
|
|
// DTMF begins with these byte values
|
|
|
|
if ((ambe[0] & DTMF_MASK[0]) == DTMF_SIG[0] && (ambe[1] & DTMF_MASK[1]) == DTMF_SIG[1] &&
|
|
|
|
if ((ambe[0] & DTMF_MASK[0]) == DTMF_SIG[0] && (ambe[1] & DTMF_MASK[1]) == DTMF_SIG[1] &&
|
|
|
|