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