C++程序  |  62行  |  1.82 KB

/*
 * Copyright (C) 2017 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
#pragma once

#include <array>
#include <memory>

#include "common/vsoc/lib/typed_region_view.h"
#include "common/vsoc/shm/wifi_exchange_layout.h"
#include "uapi/vsoc_shm.h"

namespace vsoc {
namespace wifi {

class WifiExchangeView
    : public vsoc::TypedRegionView<
        WifiExchangeView,
        vsoc::layout::wifi::WifiExchangeLayout> {
 public:
  using MacAddress = std::array<
      uint8_t,
      sizeof(vsoc::layout::wifi::WifiExchangeLayout::guest_mac_address)>;

  // Send netlink packet to peer.
  // returns true, if operation was successful.
  intptr_t Send(const void* buffer, intptr_t length);

  // Receive netlink packet from peer.
  // Returns number of bytes read, or negative value, if failed.
  intptr_t Recv(void* buffer, intptr_t max_length);

  // Set guest MAC address.
  void SetGuestMACAddress(const MacAddress& mac_address);
  MacAddress GetGuestMACAddress();

  // Set host MAC address.
  void SetHostMACAddress(const MacAddress& mac_address);
  MacAddress GetHostMACAddress();

  void SetConfigReady();
  void WaitConfigReady();

  static bool ParseMACAddress(const std::string &s, MacAddress *mac);
  static std::string MacAddressToString(const MacAddress& mac);
};

}  // namespace wifi
}  // namespace vsoc