⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tone.c

📁 telcobridges tone develop
💻 C
📖 第 1 页 / 共 5 页
字号:
						/* 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 + -