KaCanOpen
 All Classes Functions Variables Typedefs Enumerations Pages
dictionary_error.cpp
1 /*
2  * Copyright (c) 2015-2016, Thomas Keh
3  * All rights reserved.
4  *
5  * Redistribution and use in source and binary forms, with or without
6  * modification, are permitted provided that the following conditions are met:
7  *
8  * 1. Redistributions of source code must retain the above copyright
9  * notice, this list of conditions and the following disclaimer.
10  *
11  * 2. Redistributions in binary form must reproduce the above copyright
12  * notice, this list of conditions and the following disclaimer in the
13  * documentation and/or other materials provided with the distribution.
14  *
15  * 3. Neither the name of the copyright holder nor the names of its
16  * contributors may be used to endorse or promote products derived from
17  * this software without specific prior written permission.
18  *
19  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
20  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
21  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
22  * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
23  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
24  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
25  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
26  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
27  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
28  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
29  * POSSIBILITY OF SUCH DAMAGE.
30  */
31 
32 #include "dictionary_error.h"
33 
34 namespace kaco {
35 
36  dictionary_error::dictionary_error(type error_type, const std::string& entry_name, const std::string& additional_information)
37  : canopen_error("")
38  {
39 
40  switch (error_type) {
41 
42  case type::unknown_entry:
43  m_message = "Dictionary entry \""+entry_name+"\" not available.";
44  break;
45  case type::read_only:
46  m_message = "Attempt to write the read-only dictionary entry \""+entry_name+"\".";
47  break;
48  case type::write_only:
49  m_message = "Attempt to read the write-only dictionary entry \""+entry_name+"\".";
50  break;
51  case type::wrong_type:
52  m_message = "Data type does not match to the dictionary entry \""+entry_name+"\".";
53  break;
54  case type::mapping_size:
55  m_message = "Invalid mapping size.";
56  break;
57  case type::mapping_overlap:
58  m_message = "Mappings overlap for this PDO.";
59  break;
60  case type::unknown_operation:
61  m_message = "Operation \""+entry_name+"\" not available.";
62  break;
63  case type::unknown_constant:
64  m_message = "Constant \""+entry_name+"\" not available.";
65  break;
66 
67  // no default -> compiler should warn if a type is missing.
68 
69  }
70 
71  m_type = error_type;
72  m_entry_name = entry_name;
73  m_message = "Dictionary error: " + m_message + (additional_information.empty()?"":" "+additional_information);
74 
75  }
76 
77  const char* dictionary_error::what() const noexcept {
78  return m_message.c_str();
79  }
80 
82  return m_type;
83  }
84 
85  std::string dictionary_error::get_entry_name() const noexcept {
86  return m_entry_name;
87  }
88 
89 }
dictionary_error(type error_type, const std::string &entry_name, const std::string &additional_information="")
Constructor.
This is the base class of all types of exceptions thrown by the KaCanOpen library. It can be used directly like std::runtime_error if there isn't any more specific error class.
Definition: canopen_error.h:43
std::string get_entry_name() const noexcept
Returns the name of the dictionary entry.
type
Exact type of the error.
virtual const char * what() const noexceptoverride
Returns error description.
type get_type() const noexcept
Returns type of the error.