lib: added Backup parser and Restore builder classes
[barry.git] / src / probe.h
blob02f5ad388dfe0f4f6ad764ee37dd8033a9bb151e
1 ///
2 /// \file probe.h
3 /// USB Blackberry detection routines
4 ///
6 /*
7 Copyright (C) 2005-2010, Net Direct Inc. (http://www.netdirect.ca/)
9 This program is free software; you can redistribute it and/or modify
10 it under the terms of the GNU General Public License as published by
11 the Free Software Foundation; either version 2 of the License, or
12 (at your option) any later version.
14 This program is distributed in the hope that it will be useful,
15 but WITHOUT ANY WARRANTY; without even the implied warranty of
16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
18 See the GNU General Public License in the COPYING file at the
19 root directory of this project for more details.
22 #ifndef __BARRY_PROBE_H__
23 #define __BARRY_PROBE_H__
25 #include "dll.h"
26 #include "usbwrap.h"
27 #include "pin.h"
28 #include <vector>
29 #include <iosfwd>
30 #include <stdint.h>
32 namespace Barry {
34 struct BXEXPORT ProbeResult
36 Usb::DeviceIDType m_dev;
37 unsigned char m_interface;
38 Barry::Pin m_pin;
39 Usb::EndpointPair m_ep;
40 Usb::EndpointPair m_epModem;
41 // Specifies if it's necessary to clear halt on the
42 // endpoints before using them. On some devices such
43 // as the 8830 it's essential to clear halt. On other
44 // devices such as the Curve 8520 calling clear halt
45 // can cause them to get into a state where they drop
46 // packets.
47 bool m_needClearHalt;
48 uint8_t m_zeroSocketSequence;
49 std::string m_description;
51 // data from a possible ConfigFile (filled in automatically by
52 // the probe code if available)
53 std::string m_cfgDeviceName;
55 ProbeResult()
56 : m_dev(0), m_interface(0), m_pin(0)
57 , m_needClearHalt(false), m_zeroSocketSequence(0)
59 void DumpAll(std::ostream &os) const;
60 bool HasIpModem() const { return m_epModem.IsComplete(); }
62 bool operator==(const Barry::Pin &pin) const
64 return m_pin == pin;
68 BXEXPORT std::ostream& operator<< (std::ostream &os, const ProbeResult &pr);
71 class BXEXPORT Probe
73 public:
74 typedef std::vector<ProbeResult> Results;
76 private:
77 Results m_results;
79 std::vector<std::string> m_fail_msgs;
80 int m_fail_count;
82 bool m_epp_override;
83 Usb::EndpointPair m_epp;
85 BXLOCAL bool CheckSize(const Data &data, unsigned int required);
86 BXLOCAL bool ParsePIN(const Data &data, uint32_t &pin);
87 BXLOCAL bool ParseDesc(const Data &data, std::string &desc);
89 protected:
90 void ProbeMatching(int vendor, int product,
91 const char *busname, const char *devname);
92 void ProbeDevice(Usb::DeviceIDType devid);
93 bool ProbePair(Usb::Device &dev, const Usb::EndpointPair &ep,
94 uint32_t &pin, std::string &desc, uint8_t &zeroSocketSequence,
95 bool &needClearHalt);
96 bool ProbeModem(Usb::Device &dev, const Usb::EndpointPair &ep);
98 public:
99 Probe(const char *busname = 0, const char *devname = 0,
100 const Usb::EndpointPair *epp = 0);
102 const Results& GetResults() const { return m_results; }
104 int GetCount() const { return m_results.size(); }
105 int GetFailCount() const { return m_fail_count; }
107 const std::string& GetFailMsg(int index) const { return m_fail_msgs[index]; }
108 const ProbeResult& Get(int index) const { return m_results[index]; }
110 int FindActive(Barry::Pin pin = 0) const; // returns -1 if pin not found
111 // or if no devices
112 static int FindActive(const Results &results, Barry::Pin pin = 0);
113 static int Find(const Results &results, Barry::Pin pin = 0);
117 } // namespace Barry
119 #endif