1204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk/*
2204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk * Copyright 2016 The Android Open Source Project
3204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk *
4204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk * Licensed under the Apache License, Version 2.0 (the "License");
5204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk * you may not use this file except in compliance with the License.
6204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk * You may obtain a copy of the License at
7204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk *
8204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk *      http://www.apache.org/licenses/LICENSE-2.0
9204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk *
10204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk * Unless required by applicable law or agreed to in writing, software
11204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk * distributed under the License is distributed on an "AS IS" BASIS,
12204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk * See the License for the specific language governing permissions and
14204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk * limitations under the License.
15204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk */
16204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk
17204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk#include <stdint.h>
18204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk
19204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk#include <sys/mman.h>
20a4eb0d86a29be2763be5fac51727858d5095794bPhil Burk#include <aaudio/AAudio.h>
21a4eb0d86a29be2763be5fac51727858d5095794bPhil Burk
22204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk#include <binder/Parcel.h>
23204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk#include <binder/Parcelable.h>
24204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk
255ed503c7a66c90f93759c90237a9b432dbd93f9fPhil Burk#include "binding/AAudioStreamConfiguration.h"
26204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk
27204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burkusing android::NO_ERROR;
28204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burkusing android::status_t;
29204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burkusing android::Parcel;
30204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burkusing android::Parcelable;
31204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk
325ed503c7a66c90f93759c90237a9b432dbd93f9fPhil Burkusing namespace aaudio;
33204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk
345ed503c7a66c90f93759c90237a9b432dbd93f9fPhil BurkAAudioStreamConfiguration::AAudioStreamConfiguration() {}
355ed503c7a66c90f93759c90237a9b432dbd93f9fPhil BurkAAudioStreamConfiguration::~AAudioStreamConfiguration() {}
36204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk
375ed503c7a66c90f93759c90237a9b432dbd93f9fPhil Burkstatus_t AAudioStreamConfiguration::writeToParcel(Parcel* parcel) const {
38c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk    status_t status;
39901f65deb49786f4dffd39ac965c0bb681392c0bjiabin    status = parcel->writeInt32(getDeviceId());
40c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk    if (status != NO_ERROR) goto error;
41901f65deb49786f4dffd39ac965c0bb681392c0bjiabin    status = parcel->writeInt32(getSampleRate());
42c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk    if (status != NO_ERROR) goto error;
43901f65deb49786f4dffd39ac965c0bb681392c0bjiabin    status = parcel->writeInt32(getSamplesPerFrame());
44c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk    if (status != NO_ERROR) goto error;
45901f65deb49786f4dffd39ac965c0bb681392c0bjiabin    status = parcel->writeInt32((int32_t) getSharingMode());
46c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk    if (status != NO_ERROR) goto error;
47901f65deb49786f4dffd39ac965c0bb681392c0bjiabin    status = parcel->writeInt32((int32_t) getFormat());
48c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk    if (status != NO_ERROR) goto error;
4915f7cab18eb12870545734588b12d873d0fe5d84Phil Burk    status = parcel->writeInt32((int32_t) getDirection());
5015f7cab18eb12870545734588b12d873d0fe5d84Phil Burk    if (status != NO_ERROR) goto error;
51901f65deb49786f4dffd39ac965c0bb681392c0bjiabin    status = parcel->writeInt32(getBufferCapacity());
52c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk    if (status != NO_ERROR) goto error;
53d4ccc624201d5c74ff6e14db1b68743b41fe795cPhil Burk    status = parcel->writeInt32((int32_t) getUsage());
54d4ccc624201d5c74ff6e14db1b68743b41fe795cPhil Burk    if (status != NO_ERROR) goto error;
55d4ccc624201d5c74ff6e14db1b68743b41fe795cPhil Burk    status = parcel->writeInt32((int32_t) getContentType());
56d4ccc624201d5c74ff6e14db1b68743b41fe795cPhil Burk    if (status != NO_ERROR) goto error;
57d4ccc624201d5c74ff6e14db1b68743b41fe795cPhil Burk    status = parcel->writeInt32((int32_t) getInputPreset());
58d4ccc624201d5c74ff6e14db1b68743b41fe795cPhil Burk    if (status != NO_ERROR) goto error;
594e1af9fc9c1108d4514e92774f750bcd434dbbccPhil Burk    status = parcel->writeInt32(getSessionId());
604e1af9fc9c1108d4514e92774f750bcd434dbbccPhil Burk    if (status != NO_ERROR) goto error;
61c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk    return NO_ERROR;
62c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burkerror:
63c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk    ALOGE("AAudioStreamConfiguration.writeToParcel(): write failed = %d", status);
64c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk    return status;
65204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk}
66204a163c86f357a878873fe7d4c4164f3d55c9b6Phil Burk
675ed503c7a66c90f93759c90237a9b432dbd93f9fPhil Burkstatus_t AAudioStreamConfiguration::readFromParcel(const Parcel* parcel) {
68901f65deb49786f4dffd39ac965c0bb681392c0bjiabin    int32_t value;
69901f65deb49786f4dffd39ac965c0bb681392c0bjiabin    status_t status = parcel->readInt32(&value);
70c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk    if (status != NO_ERROR) goto error;
71901f65deb49786f4dffd39ac965c0bb681392c0bjiabin    setDeviceId(value);
72901f65deb49786f4dffd39ac965c0bb681392c0bjiabin    status = parcel->readInt32(&value);
73c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk    if (status != NO_ERROR) goto error;
74901f65deb49786f4dffd39ac965c0bb681392c0bjiabin    setSampleRate(value);
75901f65deb49786f4dffd39ac965c0bb681392c0bjiabin    status = parcel->readInt32(&value);
76c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk    if (status != NO_ERROR) goto error;
77901f65deb49786f4dffd39ac965c0bb681392c0bjiabin    setSamplesPerFrame(value);
78901f65deb49786f4dffd39ac965c0bb681392c0bjiabin    status = parcel->readInt32(&value);
79c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk    if (status != NO_ERROR) goto error;
80d4ccc624201d5c74ff6e14db1b68743b41fe795cPhil Burk    setSharingMode((aaudio_sharing_mode_t) value);
81901f65deb49786f4dffd39ac965c0bb681392c0bjiabin    status = parcel->readInt32(&value);
82c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk    if (status != NO_ERROR) goto error;
83d4ccc624201d5c74ff6e14db1b68743b41fe795cPhil Burk    setFormat((aaudio_format_t) value);
84901f65deb49786f4dffd39ac965c0bb681392c0bjiabin    status = parcel->readInt32(&value);
85c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk    if (status != NO_ERROR) goto error;
8615f7cab18eb12870545734588b12d873d0fe5d84Phil Burk    setDirection((aaudio_direction_t) value);
8715f7cab18eb12870545734588b12d873d0fe5d84Phil Burk    status = parcel->readInt32(&value);
8815f7cab18eb12870545734588b12d873d0fe5d84Phil Burk    if (status != NO_ERROR) goto error;
89901f65deb49786f4dffd39ac965c0bb681392c0bjiabin    setBufferCapacity(value);
90d4ccc624201d5c74ff6e14db1b68743b41fe795cPhil Burk    status = parcel->readInt32(&value);
91d4ccc624201d5c74ff6e14db1b68743b41fe795cPhil Burk    if (status != NO_ERROR) goto error;
92d4ccc624201d5c74ff6e14db1b68743b41fe795cPhil Burk    setUsage((aaudio_usage_t) value);
93d4ccc624201d5c74ff6e14db1b68743b41fe795cPhil Burk    status = parcel->readInt32(&value);
94d4ccc624201d5c74ff6e14db1b68743b41fe795cPhil Burk    if (status != NO_ERROR) goto error;
95d4ccc624201d5c74ff6e14db1b68743b41fe795cPhil Burk    setContentType((aaudio_content_type_t) value);
96d4ccc624201d5c74ff6e14db1b68743b41fe795cPhil Burk    status = parcel->readInt32(&value);
97d4ccc624201d5c74ff6e14db1b68743b41fe795cPhil Burk    if (status != NO_ERROR) goto error;
98d4ccc624201d5c74ff6e14db1b68743b41fe795cPhil Burk    setInputPreset((aaudio_input_preset_t) value);
994e1af9fc9c1108d4514e92774f750bcd434dbbccPhil Burk    status = parcel->readInt32(&value);
1004e1af9fc9c1108d4514e92774f750bcd434dbbccPhil Burk    if (status != NO_ERROR) goto error;
1014e1af9fc9c1108d4514e92774f750bcd434dbbccPhil Burk    setSessionId(value);
102c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk    return NO_ERROR;
103c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burkerror:
104c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk    ALOGE("AAudioStreamConfiguration.readFromParcel(): read failed = %d", status);
105c0c70e3c7dd10bc2c0caffcab1f3f5fb406b35fbPhil Burk    return status;
10615f7cab18eb12870545734588b12d873d0fe5d84Phil Burk}
107