3 * Copyright (C) 2007, Harbour, All rights reserved.
6 #ifndef _F_INPUT_DEVICE_H_
7 #define _F_INPUT_DEVICE_H_
11 #include <cc++/thread.h>
15 class F_Input_Device {
20 std::vector <F_Event_t> pending_events;
21 bool good_; // state of this input subsystem
25 virtual bool check_for_events(F_Event_t *event) = 0;
26 void add_event(F_Event_t &ev) {
27 device_l.enterMutex();
28 pending_events.push_back(ev);
29 device_l.leaveMutex();
34 F_Input_Device() { enabled_ = good_ = false; }
35 virtual ~F_Input_Device() { device_l.enterMutex(); }
36 virtual void sigstop() { }
37 virtual void sigcont() { }
38 bool good() { return good_; }
39 void disable() { enabled_ = false; }
40 void enable() { enabled_ = true; }
41 bool enabled() { return enabled_; }
42 bool check_for_events() {
45 device_l.enterMutex();
47 if (!pending_events.empty())
50 if (check_for_events(&event)) { // got one
51 pending_events.push_back(event);
54 device_l.leaveMutex();
57 // get last event, false = no pending event
58 bool get_event(F_Event_t *event) {
61 device_l.enterMutex();
63 if (pending_events.empty())
66 *event = pending_events[0];
67 pending_events.erase(pending_events.begin());
71 device_l.leaveMutex();
74 // set event type mask
75 bool event_type_mask(std::vector <F_Event_Type_t> &mask);