1c54d32cb0b20308a0ecea7864016a2a5dc512f71Yifan Hong/*
2c54d32cb0b20308a0ecea7864016a2a5dc512f71Yifan Hong * Copyright (C) 2017 The Android Open Source Project
3c54d32cb0b20308a0ecea7864016a2a5dc512f71Yifan Hong *
4c54d32cb0b20308a0ecea7864016a2a5dc512f71Yifan Hong * Licensed under the Apache License, Version 2.0 (the "License");
5c54d32cb0b20308a0ecea7864016a2a5dc512f71Yifan Hong * you may not use this file except in compliance with the License.
6c54d32cb0b20308a0ecea7864016a2a5dc512f71Yifan Hong * You may obtain a copy of the License at
7c54d32cb0b20308a0ecea7864016a2a5dc512f71Yifan Hong *
8c54d32cb0b20308a0ecea7864016a2a5dc512f71Yifan Hong *      http://www.apache.org/licenses/LICENSE-2.0
9c54d32cb0b20308a0ecea7864016a2a5dc512f71Yifan Hong *
10c54d32cb0b20308a0ecea7864016a2a5dc512f71Yifan Hong * Unless required by applicable law or agreed to in writing, software
11c54d32cb0b20308a0ecea7864016a2a5dc512f71Yifan Hong * distributed under the License is distributed on an "AS IS" BASIS,
12c54d32cb0b20308a0ecea7864016a2a5dc512f71Yifan Hong * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13c54d32cb0b20308a0ecea7864016a2a5dc512f71Yifan Hong * See the License for the specific language governing permissions and
14c54d32cb0b20308a0ecea7864016a2a5dc512f71Yifan Hong * limitations under the License.
15c54d32cb0b20308a0ecea7864016a2a5dc512f71Yifan Hong */
16c54d32cb0b20308a0ecea7864016a2a5dc512f71Yifan Hong
17c54d32cb0b20308a0ecea7864016a2a5dc512f71Yifan Hong
18c54d32cb0b20308a0ecea7864016a2a5dc512f71Yifan Hong#ifndef ANDROID_VINTF_TRANSPORT_ARCH_H
19c54d32cb0b20308a0ecea7864016a2a5dc512f71Yifan Hong#define ANDROID_VINTF_TRANSPORT_ARCH_H
20c54d32cb0b20308a0ecea7864016a2a5dc512f71Yifan Hong
21c54d32cb0b20308a0ecea7864016a2a5dc512f71Yifan Hong#include "Arch.h"
22c54d32cb0b20308a0ecea7864016a2a5dc512f71Yifan Hong#include "Transport.h"
23c54d32cb0b20308a0ecea7864016a2a5dc512f71Yifan Hong
24c54d32cb0b20308a0ecea7864016a2a5dc512f71Yifan Hongnamespace android {
25c54d32cb0b20308a0ecea7864016a2a5dc512f71Yifan Hongnamespace vintf {
26c54d32cb0b20308a0ecea7864016a2a5dc512f71Yifan Hong
27c54d32cb0b20308a0ecea7864016a2a5dc512f71Yifan Hongstruct TransportArch {
28c54d32cb0b20308a0ecea7864016a2a5dc512f71Yifan Hong    Transport transport = Transport::EMPTY;
29c54d32cb0b20308a0ecea7864016a2a5dc512f71Yifan Hong    Arch arch = Arch::ARCH_EMPTY;
30c54d32cb0b20308a0ecea7864016a2a5dc512f71Yifan Hong
31c54d32cb0b20308a0ecea7864016a2a5dc512f71Yifan Hongprivate:
32c54d32cb0b20308a0ecea7864016a2a5dc512f71Yifan Hong    friend struct TransportArchConverter;
33c54d32cb0b20308a0ecea7864016a2a5dc512f71Yifan Hong    friend struct ManifestHalConverter;
34c54d32cb0b20308a0ecea7864016a2a5dc512f71Yifan Hong    friend struct ManifestHal;
35c54d32cb0b20308a0ecea7864016a2a5dc512f71Yifan Hong    friend bool parse(const std::string &s, TransportArch *ta);
36c54d32cb0b20308a0ecea7864016a2a5dc512f71Yifan Hong    bool empty() const;
37c54d32cb0b20308a0ecea7864016a2a5dc512f71Yifan Hong    // Valid combinations:
38c54d32cb0b20308a0ecea7864016a2a5dc512f71Yifan Hong    // <transport arch="32">passthrough</transport>
39c54d32cb0b20308a0ecea7864016a2a5dc512f71Yifan Hong    // <transport arch="64">passthrough</transport>
40c54d32cb0b20308a0ecea7864016a2a5dc512f71Yifan Hong    // <transport arch="32+64">passthrough</transport>
41c54d32cb0b20308a0ecea7864016a2a5dc512f71Yifan Hong    // <transport>hwbinder</transport>
42c54d32cb0b20308a0ecea7864016a2a5dc512f71Yifan Hong    // Element doesn't exist
43c54d32cb0b20308a0ecea7864016a2a5dc512f71Yifan Hong    bool isValid() const;
44c54d32cb0b20308a0ecea7864016a2a5dc512f71Yifan Hong};
45c54d32cb0b20308a0ecea7864016a2a5dc512f71Yifan Hong
46c54d32cb0b20308a0ecea7864016a2a5dc512f71Yifan Hong
47c54d32cb0b20308a0ecea7864016a2a5dc512f71Yifan Hong} // namespace vintf
48c54d32cb0b20308a0ecea7864016a2a5dc512f71Yifan Hong} // namespace android
49c54d32cb0b20308a0ecea7864016a2a5dc512f71Yifan Hong
50c54d32cb0b20308a0ecea7864016a2a5dc512f71Yifan Hong#endif // ANDROID_VINTF_TRANSPORT_ARCH_H
51