// Copyright (c) 2010 The Chromium OS Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef CROMO_MODEM_HANDLER_H_
#define CROMO_MODEM_HANDLER_H_

#include <map>
#include <string>
#include <vector>

#include <base/macros.h>
#include <dbus-c++/dbus.h>

typedef std::map<DBus::Path, DBus::ObjectAdaptor*> ModemMap;

class CromoServer;

class ModemHandler {
 public:
  // Constructor. |tag| is a vendor-specific tag supplied
  // by each sub-class to identify each class of modem
  // uniquely. The tag becomes part of the dbus path
  // used externally to name each modem object.
  ModemHandler(CromoServer& server, const std::string& tag);  // NOLINT - refs.
  virtual ~ModemHandler() {}
  virtual bool Initialize() = 0;

  virtual std::vector<DBus::Path> EnumerateDevices(
      DBus::Error& error) = 0;  // NOLINT - refs.

  const std::string& vendor_tag() const { return vendor_tag_; }
  CromoServer& server() const { return server_; }  // NOLINT - refs.

 protected:
  // RegisterSelf() must be called by all subclasses to complete
  // initialization and make the modem handler known to cromo.
  void RegisterSelf();
  std::string MakePath();

 private:
  CromoServer& server_;
  // Per-vendor tag used to construct unique DBus paths
  // for modem objects.
  std::string vendor_tag_;
  unsigned int instance_number_;

  DISALLOW_COPY_AND_ASSIGN(ModemHandler);
};

#endif  // CROMO_MODEM_HANDLER_H_
