3 /// High level BlackBerry API class
7 Copyright (C) 2005-2009, 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_CONTROLLER_H__
23 #define __BARRY_CONTROLLER_H__
30 /// Project namespace, containing all related functions and classes.
31 /// This is the only namespace applications should be concerned with,
35 // forward declarations
36 class SocketRoutingQueue
;
48 /// The main interface class. This class coordinates the communication to
49 /// a single handheld. This class also owns the only Usb::Device object
50 /// the handheld. All other classes reference this one for the low level
51 /// device object. This class owns the only SocketZero object as well,
52 /// which is the object that any SocketRoutingQueue is plugged into
53 /// if constructed that way.
55 /// To use this class, use the following steps:
57 /// - Probe the USB bus for matching devices with the Probe class
58 /// - Create an optional SocketRoutingQueue object and create a
59 /// read thread for it, or use its default read thread.
60 /// - Pass one of the probe results into the Controller constructor
61 /// to connect to the USB device. Pass the routing queue
62 /// to the Controller constructor here too, if needed.
63 /// - Create the Mode object of your choice. See m_desktop.h
64 /// and m_serial.h for these mode classes. You pass
65 /// your controller object into these mode constructors
66 /// to create the mode.
68 class BXEXPORT Controller
70 friend class Barry::Mode::Desktop
;
71 friend class Barry::Mode::IpModem
;
72 friend class Barry::Mode::Serial
;
73 friend class Barry::Mode::JavaLoader
;
76 /// Handheld mode type
78 Unspecified
, //< default on start up (unused)
79 Bypass
, //< unsupported, unknown
80 Desktop
, //< desktop mode required for database
82 JavaLoader
, //< experimental
83 UsbSerData
, //< GPRS modem support over USB
84 UsbSerCtrl
//< internally used behind the scenes
90 Usb::Interface
*m_iface
;
94 SocketRoutingQueue
*m_queue
; //< ptr to external object; no delete
97 void SetupUsb(const ProbeResult
&device
);
100 uint16_t SelectMode(ModeType mode
); // returns mode socket
103 explicit Controller(const ProbeResult
&device
);
104 Controller(const ProbeResult
&device
, SocketRoutingQueue
&queue
);
107 bool HasQueue() const { return m_queue
; }
109 const ProbeResult
& GetProbeResult() const { return m_result
; }