manager.h revision f3d77e5f9fd79d43057d22e95d659cb2ff92e4b3
14b5f04c56a2f13b4ec178ce430ea57ddadf1225fChristopher Wiley// Copyright 2014 The Chromium OS Authors. All rights reserved.
24b5f04c56a2f13b4ec178ce430ea57ddadf1225fChristopher Wiley// Use of this source code is governed by a BSD-style license that can be
34b5f04c56a2f13b4ec178ce430ea57ddadf1225fChristopher Wiley// found in the LICENSE file.
44b5f04c56a2f13b4ec178ce430ea57ddadf1225fChristopher Wiley
54b5f04c56a2f13b4ec178ce430ea57ddadf1225fChristopher Wiley#ifndef BUFFET_MANAGER_H_
64b5f04c56a2f13b4ec178ce430ea57ddadf1225fChristopher Wiley#define BUFFET_MANAGER_H_
74b5f04c56a2f13b4ec178ce430ea57ddadf1225fChristopher Wiley
84b5f04c56a2f13b4ec178ce430ea57ddadf1225fChristopher Wiley#include <base/basictypes.h>
94b5f04c56a2f13b4ec178ce430ea57ddadf1225fChristopher Wiley#include <base/memory/scoped_ptr.h>
10f3d77e5f9fd79d43057d22e95d659cb2ff92e4b3Alex Vakulenko#include <base/values.h>
114b5f04c56a2f13b4ec178ce430ea57ddadf1225fChristopher Wiley#include <dbus/message.h>
1254028f99aaa6917511102fc0572549a966257a8aChristopher Wiley#include <dbus/object_path.h>
13f3d77e5f9fd79d43057d22e95d659cb2ff92e4b3Alex Vakulenko#include <memory>
144b5f04c56a2f13b4ec178ce430ea57ddadf1225fChristopher Wiley
15106686a91f2b7606dc3e3f05355f29d0ba43aee8Christopher Wiley#include "buffet/dbus_constants.h"
16106686a91f2b7606dc3e3f05355f29d0ba43aee8Christopher Wiley#include "buffet/exported_property_set.h"
17f3d77e5f9fd79d43057d22e95d659cb2ff92e4b3Alex Vakulenko#include "buffet/device_registration_info.h"
18106686a91f2b7606dc3e3f05355f29d0ba43aee8Christopher Wiley
194b5f04c56a2f13b4ec178ce430ea57ddadf1225fChristopher Wileynamespace buffet {
204b5f04c56a2f13b4ec178ce430ea57ddadf1225fChristopher Wiley
214b5f04c56a2f13b4ec178ce430ea57ddadf1225fChristopher Wileyclass DBusManager;
224b5f04c56a2f13b4ec178ce430ea57ddadf1225fChristopher Wiley
234b5f04c56a2f13b4ec178ce430ea57ddadf1225fChristopher Wiley// The Manager is responsible for global state of Buffet.  It exposes
244b5f04c56a2f13b4ec178ce430ea57ddadf1225fChristopher Wiley// interfaces which affect the entire device such as device registration and
254b5f04c56a2f13b4ec178ce430ea57ddadf1225fChristopher Wiley// device state.
264b5f04c56a2f13b4ec178ce430ea57ddadf1225fChristopher Wileyclass Manager {
274b5f04c56a2f13b4ec178ce430ea57ddadf1225fChristopher Wiley public:
2854028f99aaa6917511102fc0572549a966257a8aChristopher Wiley  typedef base::Callback<void(bool success)> OnInitFinish;
2954028f99aaa6917511102fc0572549a966257a8aChristopher Wiley
3054028f99aaa6917511102fc0572549a966257a8aChristopher Wiley  Manager(dbus::Bus* bus);
314b5f04c56a2f13b4ec178ce430ea57ddadf1225fChristopher Wiley  ~Manager();
3254028f99aaa6917511102fc0572549a966257a8aChristopher Wiley  void Init(const OnInitFinish& cb);
334b5f04c56a2f13b4ec178ce430ea57ddadf1225fChristopher Wiley
344b5f04c56a2f13b4ec178ce430ea57ddadf1225fChristopher Wiley private:
35106686a91f2b7606dc3e3f05355f29d0ba43aee8Christopher Wiley  struct Properties: public dbus_utils::ExportedPropertySet {
36106686a91f2b7606dc3e3f05355f29d0ba43aee8Christopher Wiley   public:
37106686a91f2b7606dc3e3f05355f29d0ba43aee8Christopher Wiley    dbus_utils::ExportedProperty<std::string> state_;
3854028f99aaa6917511102fc0572549a966257a8aChristopher Wiley    Properties(dbus::Bus* bus)
3954028f99aaa6917511102fc0572549a966257a8aChristopher Wiley        : dbus_utils::ExportedPropertySet(
4054028f99aaa6917511102fc0572549a966257a8aChristopher Wiley              bus, dbus::ObjectPath(dbus_constants::kManagerServicePath)) {
41106686a91f2b7606dc3e3f05355f29d0ba43aee8Christopher Wiley      RegisterProperty(dbus_constants::kManagerInterface, "State", &state_);
42106686a91f2b7606dc3e3f05355f29d0ba43aee8Christopher Wiley    }
43106686a91f2b7606dc3e3f05355f29d0ba43aee8Christopher Wiley    virtual ~Properties() {}
44106686a91f2b7606dc3e3f05355f29d0ba43aee8Christopher Wiley  };
45106686a91f2b7606dc3e3f05355f29d0ba43aee8Christopher Wiley
46f3d77e5f9fd79d43057d22e95d659cb2ff92e4b3Alex Vakulenko  // Handles calls to org.chromium.Buffet.Manager.CheckDeviceRegistered().
47f3d77e5f9fd79d43057d22e95d659cb2ff92e4b3Alex Vakulenko  scoped_ptr<dbus::Response> HandleCheckDeviceRegistered(
48f3d77e5f9fd79d43057d22e95d659cb2ff92e4b3Alex Vakulenko      dbus::MethodCall* method_call);
49f3d77e5f9fd79d43057d22e95d659cb2ff92e4b3Alex Vakulenko  // Handles calls to org.chromium.Buffet.Manager.GetDeviceInfo().
50f3d77e5f9fd79d43057d22e95d659cb2ff92e4b3Alex Vakulenko  scoped_ptr<dbus::Response> HandleGetDeviceInfo(
51f3d77e5f9fd79d43057d22e95d659cb2ff92e4b3Alex Vakulenko      dbus::MethodCall* method_call);
52f3d77e5f9fd79d43057d22e95d659cb2ff92e4b3Alex Vakulenko  // Handles calls to org.chromium.Buffet.Manager.StartRegisterDevice().
53f3d77e5f9fd79d43057d22e95d659cb2ff92e4b3Alex Vakulenko  scoped_ptr<dbus::Response> HandleStartRegisterDevice(
54f3d77e5f9fd79d43057d22e95d659cb2ff92e4b3Alex Vakulenko      dbus::MethodCall* method_call);
55f3d77e5f9fd79d43057d22e95d659cb2ff92e4b3Alex Vakulenko  // Handles calls to org.chromium.Buffet.Manager.FinishRegisterDevice().
56f3d77e5f9fd79d43057d22e95d659cb2ff92e4b3Alex Vakulenko  scoped_ptr<dbus::Response> HandleFinishRegisterDevice(
574b5f04c56a2f13b4ec178ce430ea57ddadf1225fChristopher Wiley      dbus::MethodCall* method_call);
584b5f04c56a2f13b4ec178ce430ea57ddadf1225fChristopher Wiley  // Handles calls to org.chromium.Buffet.Manager.UpdateState().
594b5f04c56a2f13b4ec178ce430ea57ddadf1225fChristopher Wiley  scoped_ptr<dbus::Response> HandleUpdateState(
604b5f04c56a2f13b4ec178ce430ea57ddadf1225fChristopher Wiley      dbus::MethodCall* method_call);
614b5f04c56a2f13b4ec178ce430ea57ddadf1225fChristopher Wiley
6254028f99aaa6917511102fc0572549a966257a8aChristopher Wiley  dbus::Bus* bus_;
6354028f99aaa6917511102fc0572549a966257a8aChristopher Wiley  dbus::ExportedObject* exported_object_;  // weak; owned by the Bus object.
64106686a91f2b7606dc3e3f05355f29d0ba43aee8Christopher Wiley  scoped_ptr<Properties> properties_;
654b5f04c56a2f13b4ec178ce430ea57ddadf1225fChristopher Wiley
66f3d77e5f9fd79d43057d22e95d659cb2ff92e4b3Alex Vakulenko  DeviceRegistrationInfo device_info_;
67f3d77e5f9fd79d43057d22e95d659cb2ff92e4b3Alex Vakulenko
684b5f04c56a2f13b4ec178ce430ea57ddadf1225fChristopher Wiley  DISALLOW_COPY_AND_ASSIGN(Manager);
694b5f04c56a2f13b4ec178ce430ea57ddadf1225fChristopher Wiley};
704b5f04c56a2f13b4ec178ce430ea57ddadf1225fChristopher Wiley
714b5f04c56a2f13b4ec178ce430ea57ddadf1225fChristopher Wiley}  // namespace buffet
724b5f04c56a2f13b4ec178ce430ea57ddadf1225fChristopher Wiley
734b5f04c56a2f13b4ec178ce430ea57ddadf1225fChristopher Wiley#endif  // BUFFET_MANAGER_H_
74