evarobot_eio.cpp
Go to the documentation of this file.
00001 #include "evarobot_eio/evarobot_eio.h"
00002 
00003 int i_error_code = 0;
00004 
00005 
00006 void ProduceDiagnostics(diagnostic_updater::DiagnosticStatusWrapper &stat)
00007 {
00008     if(i_error_code<0)
00009     {
00010         stat.summaryf(diagnostic_msgs::DiagnosticStatus::ERROR, "%s", GetErrorDescription(i_error_code).c_str());
00011         i_error_code = 0;
00012     }
00013     else
00014     {
00015                 stat.summary(diagnostic_msgs::DiagnosticStatus::OK, "EvarobotEIO: No problem.");
00016     }
00017 }
00018 
00019 
00020 int main(int argc, char **argv)
00021 {
00022         
00023         key_t key;
00024         sem_t *mutex;
00025         FILE * fd;
00026 
00027         key = 1005;
00028 
00029         mutex = sem_open(SEM_NAME,O_CREAT,0644,1);
00030         if(mutex == SEM_FAILED)
00031         {
00032                 ROS_INFO(GetErrorDescription(-98).c_str());
00033         i_error_code = -98;
00034                 sem_unlink(SEM_NAME);
00035 
00036                 return(-1);
00037         }
00038 
00039 
00040         // ROS PARAMS
00041         double d_frequency;
00042         
00043         string str_i2c_path;
00044         // rosparams end
00045         
00046         
00047         
00048         
00049                 
00050         ros::init(argc, argv, "evarobot_eio");
00051         ros::NodeHandle n;
00052         
00053         n.param<string>("evarobot_eio/i2c_path", str_i2c_path, "/dev/i2c-1");
00054         
00055         if(!n.getParam("evarobot_eio/frequency", d_frequency))
00056         {
00057                 ROS_INFO(GetErrorDescription(-99).c_str());
00058         i_error_code = -99;
00059         } 
00060 
00061                 
00062 
00063         // Define frequency
00064         ros::Rate loop_rate(d_frequency);
00065         
00066         IMEIO * eio ;
00067         try{
00068                 eio = new IMEIO(0b00100000, string("/dev/i2c-1"),  mutex);
00069                 
00070                 eio->SetPinBDirection(IMEIO::EIO0, IMEIO::OUTPUT);
00071                 eio->SetPinBDirection(IMEIO::EIO1, IMEIO::OUTPUT);
00072                 eio->SetPinBDirection(IMEIO::EIO2, IMEIO::OUTPUT);
00073                 eio->SetPinBDirection(IMEIO::EIO3, IMEIO::OUTPUT);
00074                 eio->SetPinBDirection(IMEIO::EIO4, IMEIO::OUTPUT);
00075                 eio->SetPinBDirection(IMEIO::EIO5, IMEIO::OUTPUT);
00076                 eio->SetPinBDirection(IMEIO::EIO6, IMEIO::OUTPUT);
00077                 eio->SetPinBDirection(IMEIO::SWR_RESET, IMEIO::OUTPUT);
00078 
00079                 eio->SetPinADirection(IMEIO::RGB_LED1, IMEIO::OUTPUT);
00080                 eio->SetPinADirection(IMEIO::RGB_LED2, IMEIO::OUTPUT);
00081                 eio->SetPinADirection(IMEIO::RGB_LED3, IMEIO::OUTPUT);
00082                 eio->SetPinADirection(IMEIO::BUZZER, IMEIO::OUTPUT);
00083                 eio->SetPinADirection(IMEIO::USER_LED, IMEIO::OUTPUT);
00084         }catch(int e){
00085                 ROS_INFO(GetErrorDescription(e).c_str());
00086         i_error_code = e;
00087         }
00088      
00089         bool b_data = false;
00090         
00091         
00092         // ROS PARAMS
00093     double d_min_freq = 0.2;
00094         double d_max_freq = 10.0;
00095 
00096         // Diagnostics
00097         diagnostic_updater::Updater updater;
00098         updater.setHardwareID("EvarobotEIO");
00099         updater.add("eio", &ProduceDiagnostics);
00100 
00101         diagnostic_updater::HeaderlessTopicDiagnostic pub_freq("eio", updater,
00102             diagnostic_updater::FrequencyStatusParam(&d_min_freq, &d_max_freq, 0.1, 10));
00103             
00104         while(ros::ok())
00105         {               
00106                 
00107 
00108                                                 
00109                         b_data = !b_data;
00110                         ROS_DEBUG("EvarobotEIO: value: %x \n", b_data);
00111                         try{
00112                                 eio->SetPinBValue(IMEIO::EIO0, b_data);
00113                                 eio->SetPinBValue(IMEIO::EIO1, b_data);
00114                                 eio->SetPinBValue(IMEIO::EIO2, b_data);
00115                                 eio->SetPinBValue(IMEIO::EIO3, b_data);
00116                                 eio->SetPinBValue(IMEIO::EIO4, b_data);
00117                                 eio->SetPinBValue(IMEIO::EIO5, b_data);
00118                                 eio->SetPinBValue(IMEIO::EIO6, b_data);
00119                                 eio->SetPinBValue(IMEIO::SWR_RESET, b_data);
00120 
00121                                 //eio->SetPinAValue(IMEIO::RGB_LED1, b_data);
00122                                 eio->SetPinAValue(IMEIO::RGB_LED2, b_data);
00123                                 //eio->SetPinAValue(IMEIO::RGB_LED3, b_data);
00124                                 eio->SetPinAValue(IMEIO::USER_LED, b_data);
00125                                 eio->SetPinAValue(IMEIO::BUZZER, b_data);
00126                         }catch(int e){
00127                                 ROS_INFO(GetErrorDescription(e).c_str());
00128                                 i_error_code = e;
00129                         }
00130 
00131                         updater.update();
00132                         loop_rate.sleep();      
00133         
00134         }
00135         
00136         
00137         return 0;
00138 }


evarobot_eio
Author(s): Mehmet Akcakoca
autogenerated on Fri Feb 12 2016 01:15:21