Go to the documentation of this file.00001 #include "corobot_diagnostics/diagnostic.h"
00002
00003 Diagnostic::Diagnostic()
00004 {
00005 errorIndex = -1;
00006 }
00007
00008 Diagnostic::~Diagnostic()
00009 {
00010 }
00011
00012 void Diagnostic::timerCallback(const ros::TimerEvent&)
00013
00014 {
00015 if (errorList.size() > 0)
00016 {
00017 if ((++errorIndex) >= errorList.size())
00018 {
00019
00020 errorIndex = 0;
00021 }
00022
00023
00024 }
00025
00026
00027 }
00028
00029 void Diagnostic::newError(const std_msgs::String &message)
00030
00031 {
00032
00033 bool equal = false;
00034 for (unsigned int l = 0; l < errorList.size(); l++)
00035 {
00036 if (errorList.at(l).compare(message.data) == 0)
00037 {
00038 equal = true;
00039 }
00040 }
00041
00042 if(equal == false)
00043 {
00044 errorList.push_back(message.data);
00045 }
00046
00047 }
00048
00049 void Diagnostic::removeError(const std_msgs::String &message)
00050
00051 {
00052
00053 for (unsigned int l = 0; l < errorList.size(); ++l)
00054 {
00055 if (errorList.at(l).compare(message.data) == 0)
00056 {
00057 errorList.erase(errorList.begin() + l);
00058 break;
00059 }
00060 }
00061 }
00062
00063 int main(int argc, char* argv[])
00064 {
00065 Diagnostic diagnostic;
00066 ros::init(argc, argv, "diagnosticLCD");
00067 ros::NodeHandle n;
00068
00069 ros::Timer timer = n.createTimer(ros::Duration(4), &Diagnostic::timerCallback, &diagnostic);
00070
00071
00072 ros::Subscriber newError= n.subscribe("new_diagnostic_error", 1000, &Diagnostic::newError, &diagnostic);
00073 ros::Subscriber removeError= n.subscribe("remove_diagnostic_error", 1000, &Diagnostic::removeError, &diagnostic);
00074
00075 ros::spin();
00076
00077 return 0;
00078
00079 }