📄 tone.c
字号:
/* Play a tone on a timeslot */
Result = ToneResPlayTone
(
in_hLib,
in_hAdapter,
Digit,
un32OnTime,
un32OffTime,
un32TimeSlotPlay
);
} while( TBX_RESULT_SUCCESS( Result ) );
} break;
case 4: /* Play All Tone */
{
un32TimeSlotPlay = PromptUserWithDefault_TBX_INT32( "Tdm timeslot play tone to? ", un32TimeSlotPlay );
un32ToneStringIdx = g_un32ToneStringCnt;
while( un32ToneStringIdx-- )
{
if( strcmp( TONE_STRING(un32ToneStringIdx), "UNK" ) )
fprintf( stdout, "Playing %d, %s\n", un32ToneStringIdx, TONE_STRING(un32ToneStringIdx) );
else
continue;
Digit = un32ToneStringIdx;
/* Play a tone on a timeslot */
Result = ToneResPlayTone
(
in_hLib,
in_hAdapter,
Digit,
80,
0,
un32TimeSlotPlay
);
if( TBX_RESULT_FAILURE( Result ) )
break;
/* Wait between tones */
TBX_SLEEP_MS (100);
}
} break;
case 5: /* Dial a number */
{
PromptUserWithDefault_TBX_CHAR( "Phone number (0-9*#) ? ", "514-555-1212", sizeof(szPhoneNumber), szPhoneNumber );
un32TimeSlotPlay = PromptUserWithDefault_TBX_INT32( "Tdm timeslot to dial on? ", un32TimeSlotPlay );
/* Play a tone on a timeslot */
Result = ToneDialNumber
(
in_hLib,
in_hAdapter,
szPhoneNumber,
un32TimeSlotPlay
);
} break;
case 6: /* Play multi-segment Tone */
{
un32TimeSlotPlay = PromptUserWithDefault_TBX_INT32( "Tdm timeslot play tone to? ", un32TimeSlotPlay );
un32SegmentCnt = PromptUserWithDefault_TBX_INT32( "How many segments? ", un32SegmentCnt );
if( un32SegmentCnt == 0 )
break;
pMsToneReq = malloc( sizeof(*pMsToneReq) + (un32SegmentCnt - 1) * sizeof(pMsToneReq->aTone) );
pToneIdx = pMsToneReq->aTone;
for( un32SegmentIdx = 0; un32SegmentIdx < un32SegmentCnt; un32SegmentIdx++, pToneIdx++ )
{
Digit = (TB640_VP_DIGIT_TYPE)PromptUserWithDefault_TBX_INT32( "What digit? (99 to End, 200 Custum)", Digit );
if( Digit == 99 )
break;
if( Digit == TB640_VP_DIGIT_TYPE_CUSTOM )
{
un32Freq1 = PromptUserWithDefault_TBX_INT32( "Freq 1 (Hz)? ", un32Freq1 );
un32Freq2 = PromptUserWithDefault_TBX_INT32( "Freq 2 (Hz)? ", un32Freq2 );
n32Level = PromptUserWithDefault_TBX_INT32( "Level (Dbm)? ", n32Level );
}
un32OnTime = PromptUserWithDefault_TBX_INT32( "On Time (ms)? ", un32OnTime );
if(un32OnTime != ~0 )
un32OffTime = PromptUserWithDefault_TBX_INT32( "Off Time (ms)? ", un32OffTime );
pToneIdx->Digit = Digit;
pToneIdx->Level = n32Level;
pToneIdx->un32OnTimeMs = un32OnTime;
pToneIdx->un32OffTimeMs = un32OffTime;
pToneIdx->aun32CustomFreq[0] = un32Freq1;
pToneIdx->aun32CustomFreq[1] = un32Freq2;
}
pMsToneReq->un32SegmentCount = un32SegmentIdx;
if( pMsToneReq->un32SegmentCount != 0 )
{
/* Play a tone on a timeslot */
Result = ToneResPlayMsTone
(
in_hLib,
in_hAdapter,
pMsToneReq,
un32TimeSlotPlay
);
}
free( pMsToneReq );
} break;
case 7:
{
un32TimeSlotPlay = PromptUserWithDefault_TBX_INT32( "Tdm timeslot stop tone ? ", un32TimeSlotPlay );
Result = ToneResStopTone
(
in_hLib,
in_hAdapter,
un32TimeSlotPlay
);
} break;
case 10: /* Define a multi-segment Tone */
{
un32SegmentCnt = PromptUserWithDefault_TBX_INT32( "How many segments? ", un32SegmentCnt );
if( un32SegmentCnt == 0 )
break;
pMsToneReq = malloc( sizeof(*pMsToneReq) + (un32SegmentCnt - 1) * sizeof(pMsToneReq->aTone) );
pToneIdx = pMsToneReq->aTone;
for( un32SegmentIdx = 0; un32SegmentIdx < un32SegmentCnt; un32SegmentIdx++, pToneIdx++ )
{
Digit = (TB640_VP_DIGIT_TYPE)PromptUserWithDefault_TBX_INT32( "What digit? (99 to End, 200 Custum)", Digit );
if( Digit == 99 )
{
break;
}
if( Digit == TB640_VP_DIGIT_TYPE_CUSTOM )
{
un32Freq1 = PromptUserWithDefault_TBX_INT32( "Freq 1 (Hz)? ", un32Freq1 );
un32Freq2 = PromptUserWithDefault_TBX_INT32( "Freq 2 (Hz)? ", un32Freq2 );
n32Level = PromptUserWithDefault_TBX_INT32( "Level (Dbm)? ", n32Level );
}
un32OnTime = PromptUserWithDefault_TBX_INT32( "On Time (ms)? ", un32OnTime );
if(un32OnTime != ~0 )
un32OffTime = PromptUserWithDefault_TBX_INT32( "Off Time (ms)? ", un32OffTime );
pToneIdx->Digit = Digit;
pToneIdx->Level = n32Level;
pToneIdx->un32OnTimeMs = un32OnTime;
pToneIdx->un32OffTimeMs = un32OffTime;
pToneIdx->aun32CustomFreq[0] = un32Freq1;
pToneIdx->aun32CustomFreq[1] = un32Freq2;
}
pMsToneReq->un32SegmentCount = un32SegmentIdx;
TBX_FIFO_PUT( &msToneFifo, &pMsToneReq );
} break;
case 11: /* list Defined multi-segment Tone */
{
un32ToneCnt = TBX_FIFO_COUNT( &msToneFifo );
for( un32ToneIdx = 0; un32ToneIdx < un32ToneCnt; un32ToneIdx++ )
{
TBX_FIFO_GET( &msToneFifo, &pMsToneReq );
fprintf( stdout, "msTone %02d: segCnt:%d \n", un32ToneIdx, pMsToneReq->un32SegmentCount );
pToneIdx = pMsToneReq->aTone;
for( un32SegmentIdx = 0; un32SegmentIdx < pMsToneReq->un32SegmentCount; un32SegmentIdx++, pToneIdx++ )
{
if( pToneIdx->Digit == TB640_VP_DIGIT_TYPE_CUSTOM )
{
fprintf( stdout, " segment %02d: f0=%d f1=%d lvl=%i on=%d off=%d\n",
un32SegmentIdx, pToneIdx->aun32CustomFreq[0], pToneIdx->aun32CustomFreq[1], pToneIdx->Level,
pToneIdx->un32OnTimeMs, pToneIdx->un32OffTimeMs );
}
else
{
fprintf( stdout, " segment %02d: %s on=%d off=%d\n",
un32SegmentIdx, TONE_STRING(pToneIdx->Digit),
pToneIdx->un32OnTimeMs, pToneIdx->un32OffTimeMs );
}
}
TBX_FIFO_PUT( &msToneFifo, &pMsToneReq );
}
}
break;
case 12: /* play a previously Defined multi-segment Tone */
{
un32TimeSlotPlay = PromptUserWithDefault_TBX_INT32( "Tdm timeslot play tone to? ", un32TimeSlotPlay );
un32Tone = PromptUserWithDefault_TBX_INT32( "What ms-tone ? ", un32Tone );
un32ToneCnt = TBX_FIFO_COUNT( &msToneFifo );
for( un32ToneIdx = 0; un32ToneIdx < un32ToneCnt; un32ToneIdx++ )
{
TBX_FIFO_GET( &msToneFifo, &pMsToneReq );
if( un32Tone == un32ToneIdx )
{
Result = ToneResPlayMsTone
(
in_hLib,
in_hAdapter,
pMsToneReq,
un32TimeSlotPlay
);
}
TBX_FIFO_PUT( &msToneFifo, &pMsToneReq );
}
}
break;
case 13: /* Start collecting tones on a resource */
{
un32TimeSlotPlay = PromptUserWithDefault_TBX_INT32( "Tdm timeslot to collect digits from? ", un32TimeSlotPlay );
un32SegmentCnt = PromptUserWithDefault_TBX_INT32( "How many digits ? ", un32SegmentCnt );
un32FirstDigitTimeout = PromptUserWithDefault_TBX_INT32( "First digits Timeout (ms)? ", un32FirstDigitTimeout );
un32InterDigitTimeout = PromptUserWithDefault_TBX_INT32( "Inter digits Timeout (ms)? ", un32InterDigitTimeout );
cDigit = szDigit[0];
PromptUserWithDefault_TBX_CHAR( "Last DTMF digit (0-9*#) (N for none)? ", szDigit, 2, szDigit );
if( !szDigit[0] ) /* If No input, Use default default */
szDigit[0] = cDigit;
cDigit = szDigit[0];
if( cDigit >= '0' && cDigit <= '9' )
{
cDigit -= '0';
Digit = g_abyDigitToDtmf[(TBX_UINT8)cDigit];
}
else if( cDigit == '#' )
{
Digit = TB640_VP_DIGIT_TYPE_DTMF_DIGITPND;
}
else if( cDigit == '*' )
{
Digit = TB640_VP_DIGIT_TYPE_DTMF_DIGITST;
}
else
{
Digit = TB640_VP_DIGIT_TYPE_NO_TONE;
}
if( g_ahVpRes [un32TimeSlotPlay] == -1 )
{
fprintf( stderr, "No Resource allocated for Timeslot %d\n", un32TimeSlotPlay );
break;
}
Result = ToneCollectAllocate
(
in_hLib,
Digit,
un32FirstDigitTimeout,
un32InterDigitTimeout,
un32SegmentCnt,
g_ahVpRes [un32TimeSlotPlay]
);
}
break;
case 20: /* DaisyChain test */
{
un32Count = PromptUserWithDefault_TBX_INT32( "How many ? ", 256 );
EventsThreadCtx.fDaisyChain = TBX_TRUE;
Result = ToneResDaisyChain
(
in_hLib,
in_hAdapter,
un32Count
);
} break;
case 21: /* Burst test */
{
un32Count = PromptUserWithDefault_TBX_INT32( "How many ? ", 256 );
un32Duration = PromptUserWithDefault_TBX_INT32( "Tone duration? ", 200 );
EventsThreadCtx.fBurstTest = TBX_TRUE;
Result = ToneResBurstTest
(
in_hLib,
in_hAdapter,
un32Duration,
un32Count
);
} break;
case 22: /* Short Dtmf test */
{
EventsThreadCtx.fShortDtmfTest = TBX_TRUE;
Result = ToneResShortDtmfTest
(
in_hLib,
in_hAdapter
);
printf( "\n\n\n"
"ShortDtmfTest Result:\n"
"---------------------\n" );
} break;
case 30: /* Free Allocated Resource/connections */
{
EventsThreadCtx.fBurstTest = TBX_FALSE;
EventsThreadCtx.fDaisyChain= TBX_FALSE;
Result = ToneFreeAllResAndConnection
(
in_hLib,
in_hAdapter
);
} break;
case 0:
{
fAgain = TBX_FALSE;
} break;
default:
{
fPrintMenu = TBX_TRUE;
} break;
}
}
/* End of the code (skip to cleanup) */
TBX_EXIT_SUCCESS (TBX_RESULT_OK);
}
/*---------------------------------------------------------------------------------------------------------------------------
| Error handling section
*--------------------------------------------------------------------------------------------------------------------------*/
ERROR_HANDLING
{
/* Print the error to the user */
fprintf (stderr, "%s\n", TBX_ERROR_DESCRIPTION);
}
/*---------------------------------------------------------------------------------------------------------------------------
| Cleanup section
*--------------------------------------------------------------------------------------------------------------------------*/
CLEANUP
{
/* Close the threads */
if( TimerThreadCtx.fRunning )
{
TimerThreadCtx.fContinue = TBX_FALSE;
TBXWakeMsgFilter( in_hLib, TimerThreadCtx.hEventsFilter );
while( TimerThreadCtx.fRunning )
{
TBX_SLEEP_MS (100);
}
}
if( CollectorThreadCtx.fRunning )
{
CollectorThreadCtx.fContinue = TBX_FALSE;
TBXWakeMsgFilter( in_hLib, CollectorThreadCtx.hEventsFilter );
while( CollectorThreadCtx.fRunning )
{
TBX_SLEEP_MS (100);
}
}
if( EventsThreadCtx.fRunning )
{
EventsThreadCtx.fContinue = TBX_FALSE;
TBXWakeMsgFilter( in_hLib, EventsThreadCtx.hEventsFilter );
while( EventsThreadCtx.fRunning )
{
TBX_SLEEP_MS (100);
}
}
ToneFreeAllResAndConnection( in_hLib, in_hAdapter );
un32ToneCnt = TBX_FIFO_COUNT( &msToneFifo );
for( un32ToneIdx = 0; un32ToneIdx < un32ToneCnt; un32ToneIdx++ )
{
TBX_FIFO_GET( &msToneFifo, &pMsToneReq );
if( pMsToneReq )
free( pMsToneReq );
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -