iCub-main
Loading...
Searching...
No Matches
SkinDiagnostics.h
Go to the documentation of this file.
1// -*- mode:C++; tab-width:4; c-basic-offset:4; indent-tabs-mode:nil -*-
2
3
4/*
5 * Copyright (C) 2014 Francesco Giovannini, iCub Facility - Istituto Italiano di Tecnologia
6 * Authors: Francesco Giovannini
7 * email: francesco.giovannini@iit.it
8 * website: www.robotcub.org
9 * Permission is granted to copy, distribute, and/or modify this program
10 * under the terms of the GNU General Public License, version 2 or any
11 * later version published by the Free Software Foundation.
12 *
13 * A copy of the license can be found at
14 * http://www.robotcub.org/icub/license/gpl.txt
15 *
16 * This program is distributed in the hope that it will be useful, but
17 * WITHOUT ANY WARRANTY; without even the implied warranty of
18 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
19 * Public License for more details
20 */
21
22#ifndef SKIN_DIAGNOSTIC_DEFINITIONS
23#define SKIN_DIAGNOSTIC_DEFINITIONS
24
25#include <string>
26#include <stdint.h>
27#include <sstream>
28
29
30namespace iCub {
31 namespace skin {
32 namespace diagnostics {
33
43 short net;
44 short board;
45 short sensor;
46 int error;
47 };
48
53 public:
54 enum ErrorCode {
55 // Error flags
56 // Stuck taxels - (Value < 0) || (Value > 255)
57 TaxelStuck11 = 0x8000,
58 TaxelStuck10 = 0x4000,
59 TaxelStuck09 = 0x2000,
60 TaxelStuck08 = 0x1000,
61 TaxelStuck07 = 0x0800,
62 TaxelStuck06 = 0x0400,
63 TaxelStuck05 = 0x0200,
64 TaxelStuck04 = 0x0100,
65 TaxelStuck03 = 0x0080,
66 TaxelStuck02 = 0x0040,
67 TaxelStuck01 = 0x0020,
68 TaxelStuck00 = 0x0010,
69
70 // Error codes
71 StatusOK = 0x0000,
73 ErrorACK4C = 0x0002
74 };
75
78 operator ErrorCode () const {return t_;}
79
80 private:
81 // Prevent automatic conversion for any other built-in types such as bool, int, etc
82 template<typename T>
83 operator T () const;
84 };
85
86 /* inline std::string printErrorCode(int code)
87 {
88 std::string s;
89
90 if (code & (1<<0)) {s+="1";} else {s+="0";}
91 if (code & (1<<1)) {s+="1";} else {s+="0";}
92 s+="R";
93 s+="R";
94 s+=".";
95 for (int i=4; i<16; i++)
96 {
97 if (code & (1<<i)) {s+="1";} else {s+="0";}
98 if (i%4==3 && i!=15) s+=".";
99 }
100 return s;
101 }
102 */
103
104 inline std::string printErrorCode(int code)
105 {
106 std::string errortype_str;
107
108 uint8_t error_type = code & 0x000f;
109 uint16_t outofrange_error = (code & 0xfff0)>>4;
110 //printf("sono nella print error code %d", code);
111 switch(error_type)
112 {
113 case 0: //no_ack see mtb code
114 {
115 errortype_str+="";
116 break;
117 }
118 case 1: //no_ack see mtb code
119 {
120 errortype_str+="no ack";
121 break;
122 }
123 case 2: //no_ack see mtb code
124 {
125 errortype_str+="not connected";
126 break;
127 }
128 default:
129 {
130 errortype_str+="unknown error";
131 break;
132 }
133 }
134
135 std::stringstream ss;
136 int numoftaxel_in_error = 0;
137 for(int i=0; i<12; i++)
138 {
139 if(outofrange_error & (1<<i))
140 {
141 numoftaxel_in_error++;
142 ss << i <<", ";
143 }
144 }
145
146 std::stringstream outs;
147 if(numoftaxel_in_error>0)
148 {
149 outs << numoftaxel_in_error <<" taxels are out of range:"<< ss.str();
150 }
151 else
152 {
153 outs << "None taxels are out of range";
154 }
155
156 if(error_type!=0)
157 outs << ". Triangle error is "<< errortype_str;
158 else
159 outs << ". Triangle has not error ";
160
161 return outs.str();
162 }
163 }
164 }
165}
166
167#endif // SKIN_DIAGNOSTIC_DEFINITIONS
std::string printErrorCode(int code)
This file contains the definition of unique IDs for the body parts and the skin parts of the robot.