test-BeoJoyStick.C
Go to the documentation of this file.00001 
00002 
00003 
00004 
00005 
00006 
00007 
00008 
00009 
00010 
00011 
00012 
00013 
00014 
00015 
00016 
00017 
00018 
00019 
00020 
00021 
00022 
00023 
00024 
00025 
00026 
00027 
00028 
00029 
00030 
00031 
00032 
00033 
00034 
00035 
00036 
00037 #include "Beowulf/Beowulf.H"
00038 #include "Beowulf/BeowulfOpts.H"
00039 #include "Component/ModelManager.H"
00040 #include "Devices/JoyStick.H"
00041 #include "Image/Image.H"
00042 
00043 
00044 class TestJoyStickListener : public JoyStickListener
00045 {
00046 public:
00047   TestJoyStickListener(const nub::soft_ref<Beowulf> b) :
00048     data(6, 1, ZEROS), beo(b)
00049   { }
00050 
00051   virtual ~TestJoyStickListener() { }
00052 
00053   virtual void axis(const uint num, const int16 val)
00054   {
00055     LINFO("Axis[%d] = %d", num, val);
00056 
00057     bool changed = false;
00058 
00059     switch(num)
00060       {
00061       case 0:
00062         
00063         data.setVal(1, val);
00064         changed = true;
00065         break;
00066 
00067       case 1:
00068         
00069         data.setVal(0, val);
00070         changed = true;
00071         break;
00072 
00073       case 2:
00074         
00075         break;
00076 
00077       case 3:
00078         
00079         data.setVal(2, val);
00080         changed = true;
00081         break;
00082       }
00083 
00084     if (changed) sendData();
00085   }
00086 
00087   virtual void button(const uint num, const bool state)
00088   {
00089     LINFO("Button[%d] = %s", num, state?"pressed":"released");
00090 
00091     bool changed = false;
00092 
00093     switch(num)
00094       {
00095       case 5:
00096         
00097         data.setVal(3, state ? 1.0F : 0.0F);
00098         changed = true;
00099         break;
00100       case 6:
00101         
00102         data.setVal(4, state ? 1.0F : 0.0F);
00103         changed = true;
00104         break;
00105 
00106       case 7:
00107         
00108         data.setVal(5, state ? 1.0F : 0.0F);
00109         changed = true;
00110         break;
00111       }
00112 
00113     if (changed) sendData();
00114   }
00115 
00116 virtual void sendData()
00117 {
00118   TCPmessage smsg(0, 0);
00119   smsg.addImage(data);
00120   beo->send(0, smsg);
00121 }
00122 
00123 Image<float> data;
00124 nub::soft_ref<Beowulf> beo;
00125 };
00126 
00127 
00128 
00129 int main(const int argc, const char **argv)
00130 {
00131 #ifndef HAVE_LINUX_JOYSTICK_H
00132 
00133   LFATAL("<linux/joystick.h> must be installed to use this program");
00134 
00135 #else
00136 
00137   
00138   ModelManager manager("JoyStick Manager");
00139 
00140   
00141   nub::soft_ref<JoyStick> js(new JoyStick(manager));
00142   manager.addSubComponent(js);
00143 
00144   nub::soft_ref<Beowulf> beow(new Beowulf(manager, "Beowulf Master",
00145                                           "BeowulfMaster", true));
00146   manager.addSubComponent(beow);
00147 
00148   manager.setOptionValString(&OPT_BeowulfSlaveNames, "192.168.0.215");
00149 
00150   
00151   if (manager.parseCommandLine(argc, argv, "[device]", 0, 1) == false)
00152     return(1);
00153 
00154   
00155   if (manager.numExtraArgs() > 0)
00156     js->setModelParamVal("JoyStickDevName",
00157                          manager.getExtraArg(0), MC_RECURSE);
00158 
00159   
00160   manager.start();
00161 
00162   
00163   rutz::shared_ptr<TestJoyStickListener> lis(new TestJoyStickListener(beow));
00164   rutz::shared_ptr<JoyStickListener> lis2; lis2.dynCastFrom(lis); 
00165   js->setListener(lis2);
00166 
00167   
00168   while(1) sleep(100);
00169 
00170   
00171   manager.stop();
00172 
00173   return 0;
00174 
00175 #endif // HAVE_LINUX_JOYSTICK_H
00176 
00177 }
00178 
00179 
00180 
00181 
00182 
00183