1b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org/* 2b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. 3b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * 4b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * Use of this source code is governed by a BSD-style license 5b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * that can be found in the LICENSE file in the root of the source 6b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * tree. An additional intellectual property rights grant can be found 7b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * in the file PATENTS. All contributing project authors may 8b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * be found in the AUTHORS file in the root of the source tree. 9b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org */ 10b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 113f45c2e0ac4cb280f941efa3a3476895795e3dd6pbos@webrtc.org#include <assert.h> 12b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 13bc669ace8f09d73e95f923253ecdadd366f9b7f1pbos@webrtc.org#include "webrtc/modules/audio_device/audio_device_utility.h" 14b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 15b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#if defined(_WIN32) 16b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 17b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// ============================================================================ 18b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// Windows 19b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// ============================================================================ 20b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 21b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#include <windows.h> 22b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#include <conio.h> 23b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#include <ctype.h> 24b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#include <stdio.h> 25b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#include <mmsystem.h> 26b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 27b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgnamespace webrtc 28b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 29b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 30b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgvoid AudioDeviceUtility::WaitForKey() 31b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 32b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org _getch(); 33b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 34b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 3564a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.orguint32_t AudioDeviceUtility::GetTimeInMS() 36b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 37b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return timeGetTime(); 38b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 39b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 40b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgbool AudioDeviceUtility::StringCompare( 41b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org const char* str1 , const char* str2, 4264a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.org const uint32_t length) 43b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 44b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return ((_strnicmp(str1, str2, length) == 0) ? true : false); 45b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 46b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 47b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} // namespace webrtc 48b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 49b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#elif defined(WEBRTC_LINUX) || defined(WEBRTC_MAC) 50b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 51b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// ============================================================================ 52b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// Linux & Mac 53b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// ============================================================================ 54b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 55b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#include <stdio.h> // getchar 56bc669ace8f09d73e95f923253ecdadd366f9b7f1pbos@webrtc.org#include <string.h> // strncasecmp 57bc669ace8f09d73e95f923253ecdadd366f9b7f1pbos@webrtc.org#include <sys/time.h> // gettimeofday 58b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#include <termios.h> // tcgetattr 59bc669ace8f09d73e95f923253ecdadd366f9b7f1pbos@webrtc.org#include <time.h> // gettimeofday 60b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 61b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#include <unistd.h> 62b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 63b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgnamespace webrtc 64b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 65b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 66b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgvoid AudioDeviceUtility::WaitForKey() 67b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 68b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 69b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org struct termios oldt, newt; 70b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 71b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org tcgetattr( STDIN_FILENO, &oldt ); 72b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 73b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // we don't want getchar to echo! 74b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 75b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org newt = oldt; 76b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org newt.c_lflag &= ~( ICANON | ECHO ); 77b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org tcsetattr( STDIN_FILENO, TCSANOW, &newt ); 78b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 79b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // catch any newline that's hanging around... 80b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 81b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // you'll have to hit enter twice if you 82b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 83b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org // choose enter out of all available keys 84b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 85b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org if (getchar() == '\n') 86b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org { 87b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org getchar(); 88b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org } 89b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 90b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org tcsetattr( STDIN_FILENO, TCSANOW, &oldt ); 91b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 92b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 9364a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.orguint32_t AudioDeviceUtility::GetTimeInMS() 94b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 95b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org struct timeval tv; 96b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org struct timezone tz; 9764a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.org uint32_t val; 98b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 99b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org gettimeofday(&tv, &tz); 10064a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.org val = (uint32_t)(tv.tv_sec*1000 + tv.tv_usec/1000); 101b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return val; 102b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 103b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 104b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgbool AudioDeviceUtility::StringCompare( 10564a144ff1bf67bc85942721aab04c98757b83e3bpbos@webrtc.org const char* str1 , const char* str2, const uint32_t length) 106b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org{ 107b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org return (strncasecmp(str1, str2, length) == 0)?true: false; 108b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} 109b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 110b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org} // namespace webrtc 111b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org 112b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#endif // defined(WEBRTC_LINUX) || defined(WEBRTC_MAC) 113