1 /*
2  * Copyright (C) 2015 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 #define LOG_TAG "VehicleNetworkAudioHelper-C"
18 
19 #include <VehicleNetwork.h>
20 #include <vehicle-internal.h>
21 #include <utils/SystemClock.h>
22 #include "VehicleNetworkAudioHelper.h"
23 #include "vehicle-network-audio-helper-for-c.h"
24 
25 extern "C" {
26 
vehicle_network_audio_helper_create(nsecs_t timeout)27 vehicle_network_audio_helper_t* vehicle_network_audio_helper_create(nsecs_t timeout) {
28     android::status_t r;
29     android::VehicleNetworkAudioHelper* helperObj = new android::VehicleNetworkAudioHelper(timeout);
30     if (helperObj == NULL) {
31         return NULL;
32     }
33     vehicle_network_audio_helper_t *helper = new vehicle_network_audio_helper_t();
34     if (helper == NULL) {
35         goto error;
36     }
37     r = helperObj->init();
38     if (r != android::NO_ERROR) {
39         goto error;
40     }
41     helper->obj = helperObj;
42     return helper;
43 
44 error:
45     delete helperObj;
46     return NULL;
47 }
48 
vehicle_network_audio_helper_create_with_default_timeout()49 vehicle_network_audio_helper_t* vehicle_network_audio_helper_create_with_default_timeout() {
50     return vehicle_network_audio_helper_create(FOCUS_WAIT_DEFAULT_TIMEOUT_NS);
51 }
52 
vehicle_network_audio_helper_destroy(vehicle_network_audio_helper_t * helper)53 void vehicle_network_audio_helper_destroy(vehicle_network_audio_helper_t* helper) {
54     android::VehicleNetworkAudioHelper* helperObj =
55             (android::VehicleNetworkAudioHelper*) helper->obj;
56     helperObj->release();
57     delete helperObj;
58     delete helper;
59 }
60 
vehicle_network_audio_helper_notify_stream_started(vehicle_network_audio_helper_t * helper,int32_t stream)61 void vehicle_network_audio_helper_notify_stream_started(vehicle_network_audio_helper_t* helper,
62         int32_t stream) {
63     android::VehicleNetworkAudioHelper* helperObj =
64             (android::VehicleNetworkAudioHelper*) helper->obj;
65     helperObj->notifyStreamStarted(stream);
66 }
67 
vehicle_network_audio_helper_notify_stream_stopped(vehicle_network_audio_helper_t * helper,int32_t stream)68 void vehicle_network_audio_helper_notify_stream_stopped(vehicle_network_audio_helper_t* helper,
69         int32_t stream) {
70     android::VehicleNetworkAudioHelper* helperObj =
71             (android::VehicleNetworkAudioHelper*) helper->obj;
72     helperObj->notifyStreamStopped(stream);
73 }
74 
vehicle_network_audio_helper_get_stream_focus_state(vehicle_network_audio_helper_t * helper,int32_t stream)75 int vehicle_network_audio_helper_get_stream_focus_state(
76         vehicle_network_audio_helper_t* helper, int32_t stream) {
77     android::VehicleNetworkAudioHelper* helperObj =
78             (android::VehicleNetworkAudioHelper*) helper->obj;
79     return helperObj->getStreamFocusState(stream);
80 }
81 
vehicle_network_audio_helper_wait_for_stream_focus(vehicle_network_audio_helper_t * helper,int32_t stream,nsecs_t waitTimeNs)82 int vehicle_network_audio_helper_wait_for_stream_focus(vehicle_network_audio_helper_t* helper,
83         int32_t stream, nsecs_t waitTimeNs) {
84     android::VehicleNetworkAudioHelper* helperObj =
85             (android::VehicleNetworkAudioHelper*) helper->obj;
86     if (helperObj->waitForStreamFocus(stream, waitTimeNs)) {
87         return 1;
88     }
89     return 0;
90 }
91 
92 }
93