00001 #include "FCam/F2/ShutterButton.h"
00002
00003 #include "PhidgetDevice.h"
00004 #include "../Debug.h"
00005
00006 namespace FCam { namespace F2 {
00007
00008 class PhidgetShutterButton: public PhidgetDevice {
00009
00010 public:
00011 PhidgetShutterButton(int halfPress, int fullPress):
00012 PhidgetDevice(),
00013 halfPressIndex(halfPress),
00014 fullPressIndex(fullPress)
00015 {
00016
00017 PhidgetDevice::registerInputChangeHandler(halfPressIndex, this);
00018 PhidgetDevice::registerInputChangeHandler(fullPressIndex, this);
00019 }
00020
00021 protected:
00022
00024 int halfPressHandler(CPhidgetInterfaceKitHandle interfaceKit, int index, int state);
00026 int fullPressHandler(CPhidgetInterfaceKitHandle interfaceKit, int index, int state);
00029 virtual int handleInputChange(CPhidgetInterfaceKitHandle interfaceKit, int index, int state);
00030
00031 private:
00033 int halfPressIndex;
00035 int fullPressIndex;
00036
00037 };
00038
00039 int PhidgetShutterButton::handleInputChange(CPhidgetInterfaceKitHandle interfaceKit, int index, int state){
00040 printf("handle input change for shutter button called.\n");
00041 if (index == halfPressIndex) {
00042 return halfPressHandler(interfaceKit, index, state);
00043 }
00044 if (index == fullPressIndex) {
00045 return fullPressHandler(interfaceKit, index, state);
00046 }
00047 return 0;
00048 }
00049
00050 int PhidgetShutterButton::halfPressHandler(CPhidgetInterfaceKitHandle interfaceKit, int index, int state){
00051 if (index == halfPressIndex) {
00052 Event event;
00053 event.time = Time::now();
00054 event.data = 0;
00055 event.creator = this;
00056 switch(state) {
00057 case true:
00058 event.type = Event::FocusPressed;
00059 break;
00060 case false:
00061 default:
00062 event.type = Event::FocusReleased;
00063 break;
00064 }
00065 postEvent(event);
00066 }
00067 return 0;
00068 }
00069 int PhidgetShutterButton::fullPressHandler(CPhidgetInterfaceKitHandle interfaceKit, int index, int state){
00070 if (index == fullPressIndex) {
00071 Event event;
00072 event.time = Time::now();
00073 event.data = 0;
00074 event.creator = this;
00075 switch(state) {
00076 case true:
00077 event.type = Event::ShutterPressed;
00078 break;
00079 case false:
00080 default:
00081 event.type = Event::ShutterReleased;
00082 break;
00083 }
00084 printf("Posting full press\n");
00085 postEvent(event);
00086 }
00087 return 0;
00088 }
00089
00090 ShutterButton::ShutterButton(int halfPress, int fullPress): impl(NULL) {
00091 impl = new PhidgetShutterButton(halfPress,fullPress);
00092
00093 }
00094
00095 ShutterButton::~ShutterButton() {
00096 if (impl) delete impl;
00097 }
00098
00099
00100 std::string ShutterButton::getEventString(const Event & event) const {
00101 switch (event.type) {
00102 case Event::FocusPressed:
00103 return std::string("Shutter button half-depressed.");
00104 break;
00105 case Event::FocusReleased:
00106 return std::string("Shutter button fully released.");
00107 break;
00108 case Event::ShutterPressed:
00109 return std::string("Shutter button fully depressed.");
00110 break;
00111 case Event::ShutterReleased:
00112 return std::string("Shutter button half-released.");
00113 break;
00114 default:
00115 return std::string("Unknown event type for ShutterButton device.");
00116 break;
00117
00118 }
00119 }
00120 }}
00121