summaryrefslogtreecommitdiffstats
path: root/low-can-binding
diff options
context:
space:
mode:
Diffstat (limited to 'low-can-binding')
-rw-r--r--low-can-binding/binding/application.hpp1
-rw-r--r--low-can-binding/binding/low-can-apidef.json392
-rw-r--r--low-can-binding/binding/low-can-cb.cpp34
-rw-r--r--low-can-binding/can/message/can-message.cpp12
-rw-r--r--low-can-binding/can/message/j1939-message.cpp194
-rw-r--r--low-can-binding/can/message/j1939-message.hpp90
-rw-r--r--low-can-binding/can/signals.hpp8
-rw-r--r--low-can-binding/diagnostic/diagnostic-message.hpp18
-rw-r--r--low-can-binding/utils/socketcan-j1939/socketcan-j1939-addressclaiming.hpp44
-rw-r--r--low-can-binding/utils/socketcan-j1939/socketcan-j1939-data.cpp84
-rw-r--r--low-can-binding/utils/socketcan-j1939/socketcan-j1939.cpp2
-rw-r--r--low-can-binding/utils/socketcan-j1939/socketcan-j1939.hpp19
12 files changed, 448 insertions, 450 deletions
diff --git a/low-can-binding/binding/application.hpp b/low-can-binding/binding/application.hpp
index a5d2285c..5045ddab 100644
--- a/low-can-binding/binding/application.hpp
+++ b/low-can-binding/binding/application.hpp
@@ -117,4 +117,3 @@ class application_t
bool isBusActive(can_bus_dev_t* bus);
*/
};
-
diff --git a/low-can-binding/binding/low-can-apidef.json b/low-can-binding/binding/low-can-apidef.json
index e647bd24..5f528377 100644
--- a/low-can-binding/binding/low-can-apidef.json
+++ b/low-can-binding/binding/low-can-apidef.json
@@ -1,183 +1,183 @@
{
- "openapi": "3.0.0",
- "$schema": "http:iot.bzh/download/openapi/schema-3.0/default-schema.json",
- "info": {
- "description": "",
- "title": "low-can",
- "version": "4.0",
- "x-binding-c-generator": {
- "api": "low-can",
- "version": 2,
- "prefix": "",
- "postfix": "",
- "start": null ,
- "onevent": null,
- "init": "init_binding",
- "scope": "",
- "private": false
- }
- },
- "servers": [
- {
- "url": "ws://{host}:{port}/api/monitor",
- "description": "Low level CAN API.",
- "variables": {
- "host": {
- "default": "localhost"
- },
- "port": {
- "default": "1234"
- }
- },
- "x-afb-events": [
- {
- "$ref": "#/components/schemas/afb-event"
- }
- ]
- }
- ],
- "components": {
- "schemas": {
- "afb-reply": {
- "$ref": "#/components/schemas/afb-reply-v2"
- },
- "afb-event": {
- "$ref": "#/components/schemas/afb-event-v2"
- },
- "afb-reply-v2": {
- "title": "Generic response.",
- "type": "object",
- "required": [ "jtype", "request" ],
- "properties": {
- "jtype": {
- "type": "string",
- "const": "afb-reply"
- },
- "request": {
- "type": "object",
- "required": [ "status" ],
- "properties": {
- "status": { "type": "string" },
- "info": { "type": "string" },
- "token": { "type": "string" },
- "uuid": { "type": "string" },
- "reqid": { "type": "string" }
- }
- },
- "response": { "type": "object" }
- }
- },
- "afb-event-v2": {
- "type": "object",
- "required": [ "jtype", "event" ],
- "properties": {
- "jtype": {
- "type": "string",
- "const": "afb-event"
- },
- "event": { "type": "string" },
- "data": { "type": "object" }
- }
- }
- },
- "x-permissions": {
- "monitor": {
- "permission": "urn:AGL:permission:low-can:public:monitor"
- },
- "write": {
- "permission": "urn:AGL:permission::platform:can:write "
- }
- },
- "responses": {
- "200": {
- "description": "A complex object array response",
- "content": {
- "application/json": {
- "schema": {
- "$ref": "#/components/schemas/afb-reply"
- }
- }
- }
- }
- }
- },
- "paths": {
- "/subscribe": {
- "description": "Subscribe to CAN signals events",
- "parameters": [
- {
- "in": "query",
- "name": "event",
- "required": false,
- "schema": { "type": "string" }
- }
- ],
- "responses": {
- "200": {"$ref": "#/components/responses/200"}
- }
- },
- "/unsubscribe": {
- "description": "Unsubscribe previously subscribed signals.",
- "parameters": [
- {
- "in": "query",
- "name": "event",
- "required": false,
- "schema": { "type": "string" }
- }
- ],
- "responses": {
- "200": {"$ref": "#/components/responses/200"}
- }
- },
- "/get": {
- "description": "get a current value of CAN message",
- "parameters": [
- {
- "in": "query",
- "name": "event",
- "required": false,
- "schema": { "type": "string" }
- }
- ],
- "responses": {
- "200": {"$ref": "#/components/responses/200"}
- }
- },
- "/list": {
- "description": "get a supported CAN message list",
- "responses": {
- "200": {"$ref": "#/components/responses/200"}
- }
- },
- "/auth": {
- "description": "Authenticate session to be raise Level Of Assurance.",
- "get": {
- "x-permissions": {
- "$ref": "#/components/x-permissions/write"
- },
- "responses": {
- "200": {"$ref": "#/components/responses/200"}
- }
- }
- },
- "/write": {
- "description": "Write a CAN messages to the CAN bus.",
- "get": {
- "x-permissions": {
- "LOA": 1
- },
- "parameters": [
- {
- "in": "query",
- "name": "bus_name",
- "required": false,
- "schema": { "type": "string" }
- },
- {
- "in": "query",
- "name": "frame",
- "required": false,
+ "openapi": "3.0.0",
+ "$schema": "http:iot.bzh/download/openapi/schema-3.0/default-schema.json",
+ "info": {
+ "description": "",
+ "title": "low-can",
+ "version": "4.0",
+ "x-binding-c-generator": {
+ "api": "low-can",
+ "version": 2,
+ "prefix": "",
+ "postfix": "",
+ "start": null ,
+ "onevent": null,
+ "init": "init_binding",
+ "scope": "",
+ "private": false
+ }
+ },
+ "servers": [
+ {
+ "url": "ws://{host}:{port}/api/monitor",
+ "description": "Low level CAN API.",
+ "variables": {
+ "host": {
+ "default": "localhost"
+ },
+ "port": {
+ "default": "1234"
+ }
+ },
+ "x-afb-events": [
+ {
+ "$ref": "#/components/schemas/afb-event"
+ }
+ ]
+ }
+ ],
+ "components": {
+ "schemas": {
+ "afb-reply": {
+ "$ref": "#/components/schemas/afb-reply-v2"
+ },
+ "afb-event": {
+ "$ref": "#/components/schemas/afb-event-v2"
+ },
+ "afb-reply-v2": {
+ "title": "Generic response.",
+ "type": "object",
+ "required": [ "jtype", "request" ],
+ "properties": {
+ "jtype": {
+ "type": "string",
+ "const": "afb-reply"
+ },
+ "request": {
+ "type": "object",
+ "required": [ "status" ],
+ "properties": {
+ "status": { "type": "string" },
+ "info": { "type": "string" },
+ "token": { "type": "string" },
+ "uuid": { "type": "string" },
+ "reqid": { "type": "string" }
+ }
+ },
+ "response": { "type": "object" }
+ }
+ },
+ "afb-event-v2": {
+ "type": "object",
+ "required": [ "jtype", "event" ],
+ "properties": {
+ "jtype": {
+ "type": "string",
+ "const": "afb-event"
+ },
+ "event": { "type": "string" },
+ "data": { "type": "object" }
+ }
+ }
+ },
+ "x-permissions": {
+ "monitor": {
+ "permission": "urn:AGL:permission:low-can:public:monitor"
+ },
+ "write": {
+ "permission": "urn:AGL:permission::platform:can:write "
+ }
+ },
+ "responses": {
+ "200": {
+ "description": "A complex object array response",
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/afb-reply"
+ }
+ }
+ }
+ }
+ }
+ },
+ "paths": {
+ "/subscribe": {
+ "description": "Subscribe to CAN signals events",
+ "parameters": [
+ {
+ "in": "query",
+ "name": "event",
+ "required": false,
+ "schema": { "type": "string" }
+ }
+ ],
+ "responses": {
+ "200": {"$ref": "#/components/responses/200"}
+ }
+ },
+ "/unsubscribe": {
+ "description": "Unsubscribe previously subscribed signals.",
+ "parameters": [
+ {
+ "in": "query",
+ "name": "event",
+ "required": false,
+ "schema": { "type": "string" }
+ }
+ ],
+ "responses": {
+ "200": {"$ref": "#/components/responses/200"}
+ }
+ },
+ "/get": {
+ "description": "get a current value of CAN message",
+ "parameters": [
+ {
+ "in": "query",
+ "name": "event",
+ "required": false,
+ "schema": { "type": "string" }
+ }
+ ],
+ "responses": {
+ "200": {"$ref": "#/components/responses/200"}
+ }
+ },
+ "/list": {
+ "description": "get a supported CAN message list",
+ "responses": {
+ "200": {"$ref": "#/components/responses/200"}
+ }
+ },
+ "/auth": {
+ "description": "Authenticate session to be raise Level Of Assurance.",
+ "get": {
+ "x-permissions": {
+ "$ref": "#/components/x-permissions/write"
+ },
+ "responses": {
+ "200": {"$ref": "#/components/responses/200"}
+ }
+ }
+ },
+ "/write": {
+ "description": "Write a CAN messages to the CAN bus.",
+ "get": {
+ "x-permissions": {
+ "LOA": 1
+ },
+ "parameters": [
+ {
+ "in": "query",
+ "name": "bus_name",
+ "required": false,
+ "schema": { "type": "string" }
+ },
+ {
+ "in": "query",
+ "name": "frame",
+ "required": false,
"schema": { "type": "array" },
"parameters": [
{
@@ -199,24 +199,24 @@
"schema": { "type": "string" }
}
]
- },
+ },
{
- "in": "query",
- "name": "signal_name",
- "required": false,
- "schema": { "type": "string" }
+ "in": "query",
+ "name": "signal_name",
+ "required": false,
+ "schema": { "type": "string" }
},
{
- "in": "query",
- "name": "signal_value",
- "required": false,
- "schema": { "type": "integer" }
- }
- ],
- "responses": {
- "200": {"$ref": "#/components/responses/200"}
- }
- }
- }
- }
+ "in": "query",
+ "name": "signal_value",
+ "required": false,
+ "schema": { "type": "integer" }
+ }
+ ],
+ "responses": {
+ "200": {"$ref": "#/components/responses/200"}
+ }
+ }
+ }
+ }
}
diff --git a/low-can-binding/binding/low-can-cb.cpp b/low-can-binding/binding/low-can-cb.cpp
index 2b630845..ad9543d9 100644
--- a/low-can-binding/binding/low-can-cb.cpp
+++ b/low-can-binding/binding/low-can-cb.cpp
@@ -192,11 +192,11 @@ static int add_to_event_loop(std::shared_ptr<low_can_subscription_t>& can_subscr
}
static int subscribe_unsubscribe_diagnostic_messages(afb_req_t request,
- bool subscribe,
- std::vector<std::shared_ptr<diagnostic_message_t> > diagnostic_messages,
- struct event_filter_t& event_filter,
- std::map<int, std::shared_ptr<low_can_subscription_t> >& s,
- bool perm_rec_diag_req)
+ bool subscribe,
+ std::vector<std::shared_ptr<diagnostic_message_t> > diagnostic_messages,
+ struct event_filter_t& event_filter,
+ std::map<int, std::shared_ptr<low_can_subscription_t> >& s,
+ bool perm_rec_diag_req)
{
int rets = 0;
application_t& app = application_t::instance();
@@ -257,10 +257,10 @@ static int subscribe_unsubscribe_diagnostic_messages(afb_req_t request,
}
static int subscribe_unsubscribe_signals(afb_req_t request,
- bool subscribe,
- std::vector<std::shared_ptr<signal_t> > signals,
- struct event_filter_t& event_filter,
- std::map<int, std::shared_ptr<low_can_subscription_t> >& s)
+ bool subscribe,
+ std::vector<std::shared_ptr<signal_t> > signals,
+ struct event_filter_t& event_filter,
+ std::map<int, std::shared_ptr<low_can_subscription_t> >& s)
{
int rets = 0;
for(const auto& sig: signals)
@@ -602,18 +602,18 @@ static void write_frame(afb_req_t request, const std::string& bus_name, json_obj
AFB_DEBUG("JSON content %s",json_object_get_string(json_value));
if(!wrap_json_unpack(json_value, "{si, si, so !}",
- "can_id", &id,
- "can_dlc", &length,
- "can_data", &can_data))
+ "can_id", &id,
+ "can_dlc", &length,
+ "can_data", &can_data))
{
message = new can_message_t(CANFD_MAX_DLEN,(uint32_t)id,(uint32_t)length,message_format_t::STANDARD,false,0,data,0);
write_raw_frame(request,bus_name,message,can_data,socket_type::BCM);
}
#ifdef USE_FEATURE_J1939
else if(!wrap_json_unpack(json_value, "{si, si, so !}",
- "pgn", &id,
- "length", &length,
- "data", &can_data))
+ "pgn", &id,
+ "length", &length,
+ "data", &can_data))
{
message = new j1939_message_t(J1939_MAX_DLEN,(uint32_t)length,message_format_t::J1939,data,0,J1939_NO_NAME,(pgn_t)id,J1939_NO_ADDR);
write_raw_frame(request,bus_name,message,can_data,socket_type::J1939);
@@ -701,8 +701,8 @@ void write(afb_req_t request)
// Process about Raw CAN message on CAN bus directly
if (args != NULL && ! wrap_json_unpack(args, "{ss, so !}",
- "bus_name", &name,
- "frame", &json_value))
+ "bus_name", &name,
+ "frame", &json_value))
write_frame(request, name, json_value);
// Search signal then encode value.
diff --git a/low-can-binding/can/message/can-message.cpp b/low-can-binding/can/message/can-message.cpp
index 945c0ba7..90bade53 100644
--- a/low-can-binding/can/message/can-message.cpp
+++ b/low-can-binding/can/message/can-message.cpp
@@ -213,13 +213,13 @@ bool can_message_t::is_set()
std::string can_message_t::get_debug_message()
{
std::string ret = "";
- ret = ret + "Here is the next can message : id " + std::to_string(id_) + " length " + std::to_string(length_) + ", data ";
- for (size_t i = 0; i < data_.size(); i++)
- {
- ret = ret + std::to_string(data_[i]);
- }
+ ret = ret + "Here is the next can message : id " + std::to_string(id_) + " length " + std::to_string(length_) + ", data ";
+ for (size_t i = 0; i < data_.size(); i++)
+ {
+ ret = ret + std::to_string(data_[i]);
+ }
- return ret;
+ return ret;
}
struct bcm_msg can_message_t::get_bcm_msg()
diff --git a/low-can-binding/can/message/j1939-message.cpp b/low-can-binding/can/message/j1939-message.cpp
index 0d2320dc..a0ca4b2a 100644
--- a/low-can-binding/can/message/j1939-message.cpp
+++ b/low-can-binding/can/message/j1939-message.cpp
@@ -27,10 +27,10 @@
*
*/
j1939_message_t::j1939_message_t():
- message_t(),
- name_{0},
- pgn_{0},
- addr_{0}
+ message_t(),
+ name_{0},
+ pgn_{0},
+ addr_{0}
{}
/**
@@ -46,17 +46,17 @@ j1939_message_t::j1939_message_t():
* @param addr The address of the message
*/
j1939_message_t::j1939_message_t(uint32_t maxdlen,
- uint32_t length,
- message_format_t format,
- std::vector<uint8_t>& data,
- uint64_t timestamp,
- name_t name,
- pgn_t pgn,
- uint8_t addr):
- message_t(maxdlen,length, format, data, timestamp),
- name_{name},
- pgn_{pgn},
- addr_{addr}
+ uint32_t length,
+ message_format_t format,
+ std::vector<uint8_t>& data,
+ uint64_t timestamp,
+ name_t name,
+ pgn_t pgn,
+ uint8_t addr):
+ message_t(maxdlen,length, format, data, timestamp),
+ name_{name},
+ pgn_{pgn},
+ addr_{addr}
{}
///
@@ -65,7 +65,7 @@ j1939_message_t::j1939_message_t(uint32_t maxdlen,
/// @return name_ class member
///
uint64_t j1939_message_t::get_name() const {
- return name_;
+ return name_;
}
///
@@ -74,7 +74,7 @@ uint64_t j1939_message_t::get_name() const {
/// @return pgn_ class member
///
uint32_t j1939_message_t::get_pgn() const{
- return pgn_;
+ return pgn_;
}
///
@@ -83,7 +83,7 @@ uint32_t j1939_message_t::get_pgn() const{
/// @return addr_ class member
///
uint8_t j1939_message_t::get_addr() const{
- return addr_;
+ return addr_;
}
/**
@@ -95,13 +95,13 @@ uint8_t j1939_message_t::get_addr() const{
*/
std::string to_hex( uint8_t data[], const size_t length)
{
- std::stringstream stream;
- stream << std::hex << std::setfill('0');
- for(int i = 0; i < length; i++)
- {
- stream << std::hex << ((int) data[i]);
- }
- return stream.str();
+ std::stringstream stream;
+ stream << std::hex << std::setfill('0');
+ for(int i = 0; i < length; i++)
+ {
+ stream << std::hex << ((int) data[i]);
+ }
+ return stream.str();
}
/// @brief Take a sockaddr_can struct and array of data to initialize class members
@@ -116,39 +116,39 @@ std::string to_hex( uint8_t data[], const size_t length)
/// @return A j1939_message_t object fully initialized with sockaddr_can and data values.
std::shared_ptr<j1939_message_t> j1939_message_t::convert_from_addr(struct sockaddr_can& addr, uint8_t (&data)[128],size_t nbytes, uint64_t timestamp)
{
- int i;
- uint32_t length = 0;
- message_format_t format;
- std::vector<uint8_t> data_vector;
-
- if(nbytes > J1939_MAX_DLEN)
- {
- AFB_DEBUG("Unsupported j1939 frame");
- format = message_format_t::INVALID;
- }
- else
- {
- //AFB_DEBUG("Got a j1939 frame");
- format = message_format_t::J1939;
- }
-
- length = (uint32_t) nbytes;
- data_vector.reserve(length);
-
- data_vector.clear();
-
- std::string data_string;
- data_string = to_hex(data,length);
-
- for(i=0;i<length;i++)
- {
- data_vector.push_back(data[i]);
- };
-
- AFB_DEBUG("Found pgn: %X, format: %X, length: %X, data %s",
- addr.can_addr.j1939.pgn, (uint8_t)format, length, data_string.c_str());
-
- return std::make_shared<j1939_message_t>(j1939_message_t(J1939_MAX_DLEN,length, format, data_vector, timestamp,addr.can_addr.j1939.name,addr.can_addr.j1939.pgn,addr.can_addr.j1939.addr));
+ int i;
+ uint32_t length = 0;
+ message_format_t format;
+ std::vector<uint8_t> data_vector;
+
+ if(nbytes > J1939_MAX_DLEN)
+ {
+ AFB_DEBUG("Unsupported j1939 frame");
+ format = message_format_t::INVALID;
+ }
+ else
+ {
+ //AFB_DEBUG("Got a j1939 frame");
+ format = message_format_t::J1939;
+ }
+
+ length = (uint32_t) nbytes;
+ data_vector.reserve(length);
+
+ data_vector.clear();
+
+ std::string data_string;
+ data_string = to_hex(data,length);
+
+ for(i=0;i<length;i++)
+ {
+ data_vector.push_back(data[i]);
+ };
+
+ AFB_DEBUG("Found pgn: %X, format: %X, length: %X, data %s",
+ addr.can_addr.j1939.pgn, (uint8_t)format, length, data_string.c_str());
+
+ return std::make_shared<j1939_message_t>(j1939_message_t(J1939_MAX_DLEN,length, format, data_vector, timestamp,addr.can_addr.j1939.name,addr.can_addr.j1939.pgn,addr.can_addr.j1939.addr));
}
/// @brief Test if members pgn_ and length are set.
@@ -165,12 +165,12 @@ bool j1939_message_t::is_set()
std::string j1939_message_t::get_debug_message()
{
std::string ret = "";
- ret = ret + "Here is the next j1939 message : pgn " + std::to_string(pgn_) + " length " + std::to_string(length_) + ", data ";
- for (size_t i = 0; i < data_.size(); i++)
- {
- ret = ret + std::to_string(data_[i]);
- }
- return ret;
+ ret = ret + "Here is the next j1939 message : pgn " + std::to_string(pgn_) + " length " + std::to_string(length_) + ", data ";
+ for (size_t i = 0; i < data_.size(); i++)
+ {
+ ret = ret + std::to_string(data_[i]);
+ }
+ return ret;
}
///
@@ -180,7 +180,7 @@ std::string j1939_message_t::get_debug_message()
///
uint32_t j1939_message_t::get_id() const
{
- AFB_DEBUG("Prefer method get_pgn() for j1939 messages");
+ AFB_DEBUG("Prefer method get_pgn() for j1939 messages");
return get_pgn();
}
@@ -191,7 +191,7 @@ uint32_t j1939_message_t::get_id() const
*/
struct sockaddr_can j1939_message_t::get_sockname()
{
- return sockname_;
+ return sockname_;
}
/**
@@ -201,7 +201,7 @@ struct sockaddr_can j1939_message_t::get_sockname()
*/
void j1939_message_t::set_sockname(struct sockaddr_can sockname)
{
- sockname_ = sockname;
+ sockname_ = sockname;
}
/**
@@ -213,34 +213,34 @@ void j1939_message_t::set_sockname(struct sockaddr_can sockname)
*/
void j1939_message_t::set_sockname(pgn_t pgn, name_t name, uint8_t addr)
{
- memset(&sockname_, 0, sizeof(sockname_));
- sockname_.can_family = AF_CAN;
- sockname_.can_ifindex = 0;
-
- if(addr <= 0 || addr >= UINT8_MAX )
- {
- sockname_.can_addr.j1939.addr = J1939_NO_ADDR;
- }
- else
- {
- sockname_.can_addr.j1939.addr = addr;
- }
-
- if(name <= 0 || name >= UINT64_MAX )
- {
- sockname_.can_addr.j1939.name = J1939_NO_NAME;
- }
- else
- {
- sockname_.can_addr.j1939.name = name;
- }
-
- if(pgn <= 0 || pgn > J1939_PGN_MAX)
- {
- sockname_.can_addr.j1939.pgn = J1939_NO_PGN;
- }
- else
- {
- sockname_.can_addr.j1939.pgn = pgn;
- }
+ memset(&sockname_, 0, sizeof(sockname_));
+ sockname_.can_family = AF_CAN;
+ sockname_.can_ifindex = 0;
+
+ if(addr <= 0 || addr >= UINT8_MAX )
+ {
+ sockname_.can_addr.j1939.addr = J1939_NO_ADDR;
+ }
+ else
+ {
+ sockname_.can_addr.j1939.addr = addr;
+ }
+
+ if(name <= 0 || name >= UINT64_MAX )
+ {
+ sockname_.can_addr.j1939.name = J1939_NO_NAME;
+ }
+ else
+ {
+ sockname_.can_addr.j1939.name = name;
+ }
+
+ if(pgn <= 0 || pgn > J1939_PGN_MAX)
+ {
+ sockname_.can_addr.j1939.pgn = J1939_NO_PGN;
+ }
+ else
+ {
+ sockname_.can_addr.j1939.pgn = pgn;
+ }
} \ No newline at end of file
diff --git a/low-can-binding/can/message/j1939-message.hpp b/low-can-binding/can/message/j1939-message.hpp
index 929c8232..0d3736f1 100644
--- a/low-can-binding/can/message/j1939-message.hpp
+++ b/low-can-binding/can/message/j1939-message.hpp
@@ -27,55 +27,55 @@
class j1939_message_t : public message_t
{
- private:
- /* J1939 NAME
- *
- * bit 0-20 : Identity Number
- * bit 21-31 : Manufacturer Code
- * bit 32-34 : ECU Instance
- * bit 35-39 : Function Instance
- * bit 40-47 : Function
- * bit 48 : Reserved
- * bit 49-55 : Vehicle System
- * bit 56-59 : Vehicle System Instance
- * bit 60-62 : Industry Group
- * bit 63 : Arbitrary Address Capable
- */
- name_t name_;
+ private:
+ /* J1939 NAME
+ *
+ * bit 0-20 : Identity Number
+ * bit 21-31 : Manufacturer Code
+ * bit 32-34 : ECU Instance
+ * bit 35-39 : Function Instance
+ * bit 40-47 : Function
+ * bit 48 : Reserved
+ * bit 49-55 : Vehicle System
+ * bit 56-59 : Vehicle System Instance
+ * bit 60-62 : Industry Group
+ * bit 63 : Arbitrary Address Capable
+ */
+ name_t name_;
- /* J1939 Parameter Group Number
- *
- * bit 0-7 : PDU Specific (PS)
- * bit 8-15 : PDU Format (PF)
- * bit 16 : Data Page (DP)
- * bit 17 : Reserved (R)
- * bit 19-31 : set to zero
- */
- pgn_t pgn_;
+ /* J1939 Parameter Group Number
+ *
+ * bit 0-7 : PDU Specific (PS)
+ * bit 8-15 : PDU Format (PF)
+ * bit 16 : Data Page (DP)
+ * bit 17 : Reserved (R)
+ * bit 19-31 : set to zero
+ */
+ pgn_t pgn_;
- /* J1939 Address
- 0-255
- */
- uint8_t addr_;
+ /* J1939 Address
+ 0-255
+ */
+ uint8_t addr_;
- /**
- * @brief The sockanme to send a message to
- * an other ECU
- */
- struct sockaddr_can sockname_;
+ /**
+ * @brief The sockanme to send a message to
+ * an other ECU
+ */
+ struct sockaddr_can sockname_;
- public:
- j1939_message_t();
- j1939_message_t(uint32_t maxdlen, uint32_t length, message_format_t format, std::vector<uint8_t>& data, uint64_t timestamp, name_t name, pgn_t pgn, uint8_t addr);
- uint64_t get_name() const;
- uint32_t get_pgn() const;
- uint8_t get_addr() const;
- static std::shared_ptr<j1939_message_t> convert_from_addr(struct sockaddr_can& addr, uint8_t (&data)[128], size_t nbytes, uint64_t timestamp);
- bool is_set();
- std::string get_debug_message();
- uint32_t get_id() const;
- struct sockaddr_can get_sockname();
+ public:
+ j1939_message_t();
+ j1939_message_t(uint32_t maxdlen, uint32_t length, message_format_t format, std::vector<uint8_t>& data, uint64_t timestamp, name_t name, pgn_t pgn, uint8_t addr);
+ uint64_t get_name() const;
+ uint32_t get_pgn() const;
+ uint8_t get_addr() const;
+ static std::shared_ptr<j1939_message_t> convert_from_addr(struct sockaddr_can& addr, uint8_t (&data)[128], size_t nbytes, uint64_t timestamp);
+ bool is_set();
+ std::string get_debug_message();
+ uint32_t get_id() const;
+ struct sockaddr_can get_sockname();
void set_sockname(struct sockaddr_can sockname);
- void set_sockname(pgn_t pgn, name_t name, uint8_t addr);
+ void set_sockname(pgn_t pgn, name_t name, uint8_t addr);
};
diff --git a/low-can-binding/can/signals.hpp b/low-can-binding/can/signals.hpp
index cefd8b81..9a8572c9 100644
--- a/low-can-binding/can/signals.hpp
+++ b/low-can-binding/can/signals.hpp
@@ -68,7 +68,7 @@ private:
std::shared_ptr<message_definition_t> parent_; /*!< parent_ - pointer to the parent message definition holding this signal*/
std::string generic_name_; /*!< generic_name_ - The name of the signal to be output.*/
static std::string prefix_; /*!< prefix_ - generic_name_ will be prefixed with it. It has to reflect the used protocol.
- * which make easier to sort message when the come in.*/
+ * which make easier to sort message when the come in.*/
uint8_t bit_position_; /*!< bitPosition_ - The starting bit of the signal in its CAN message (assuming
* non-inverted bit numbering, i.e. the most significant bit of
* each byte is 0) */
@@ -80,8 +80,8 @@ private:
float min_value_; /*!< min_value_ - The minimum value for the processed signal.*/
float max_value_; /*!< max_value_ - The maximum value for the processed signal. */
frequency_clock_t frequency_; /*!< frequency_ - A frequency_clock_t struct to control the maximum frequency to
- * process and send this signal. To process every value, set the
- * clock's frequency to 0. */
+ * process and send this signal. To process every value, set the
+ * clock's frequency to 0. */
bool send_same_; /*!< send_same_ - If true, will re-send even if the value hasn't changed.*/
bool force_send_changed_; /*!< force_send_changed_ - If true, regardless of the frequency, it will send the
* value if it has changed. */
@@ -96,7 +96,7 @@ private:
* is used. */
bool received_; /*!< received_ - True if this signal has ever been received.*/
float last_value_; /*!< lastValue_ - The last received value of the signal. If 'received' is false,
- * this value is undefined. */
+ * this value is undefined. */
std::pair<bool,int> multiplex_; /*!< multiplex_ - If bool is false and int is 0 is not a multiplex signal
If bool is true, that indicate that is a multiplexor
If int is different of 0, that indicate the link with a multiplexor */
diff --git a/low-can-binding/diagnostic/diagnostic-message.hpp b/low-can-binding/diagnostic/diagnostic-message.hpp
index e7877d6e..eb527aa5 100644
--- a/low-can-binding/diagnostic/diagnostic-message.hpp
+++ b/low-can-binding/diagnostic/diagnostic-message.hpp
@@ -70,15 +70,15 @@ class diagnostic_message_t
public:
const char* generic_name = generic_name_.c_str();
diagnostic_message_t(uint8_t pid,
- const std::string& generic_name,
- const int min,
- const int max,
- enum UNIT unit,
- float frequency,
- DiagnosticResponseDecoder decoder,
- DiagnosticResponseCallback callback,
- bool supported,
- bool received);
+ const std::string& generic_name,
+ const int min,
+ const int max,
+ enum UNIT unit,
+ float frequency,
+ DiagnosticResponseDecoder decoder,
+ DiagnosticResponseCallback callback,
+ bool supported,
+ bool received);
uint32_t get_pid();
const std::string get_generic_name() const;
diff --git a/low-can-binding/utils/socketcan-j1939/socketcan-j1939-addressclaiming.hpp b/low-can-binding/utils/socketcan-j1939/socketcan-j1939-addressclaiming.hpp
index 92c44c8c..5a950572 100644
--- a/low-can-binding/utils/socketcan-j1939/socketcan-j1939-addressclaiming.hpp
+++ b/low-can-binding/utils/socketcan-j1939/socketcan-j1939-addressclaiming.hpp
@@ -24,29 +24,29 @@ namespace utils
{
class socketcan_j1939_addressclaiming_t : public socketcan_j1939_t
{
- public:
- socketcan_j1939_addressclaiming_t();
- virtual std::shared_ptr<message_t> read_message();
- virtual int open(std::string device_name, pgn_t pgn);
- virtual claiming_state get_state();
- TimerHandleT *timer_handle_;
- std::pair<uint64_t, bool> table_j1939_address_[J1939_IDLE_ADDR];
+ public:
+ socketcan_j1939_addressclaiming_t();
+ virtual std::shared_ptr<message_t> read_message();
+ virtual int open(std::string device_name, pgn_t pgn);
+ virtual claiming_state get_state();
+ TimerHandleT *timer_handle_;
+ std::pair<uint64_t, bool> table_j1939_address_[J1939_IDLE_ADDR];
- private:
- int claim_address(bool first_claim,bool new_address);
- int pgn_request();
- void initialize_table_j1939_address();
- int save_addr_name(uint8_t addr,name_t name);
- uint8_t choose_new_address();
- uint8_t get_addr_table(name_t name);
- void change_state(claiming_state new_state);
- void launch_timer();
- static int no_response_claiming(TimerHandleT *timerhandle);
- static int free_timer_handle(void *timer_context);
+ private:
+ int claim_address(bool first_claim,bool new_address);
+ int pgn_request();
+ void initialize_table_j1939_address();
+ int save_addr_name(uint8_t addr,name_t name);
+ uint8_t choose_new_address();
+ uint8_t get_addr_table(name_t name);
+ void change_state(claiming_state new_state);
+ void launch_timer();
+ static int no_response_claiming(TimerHandleT *timerhandle);
+ static int free_timer_handle(void *timer_context);
- uint8_t current_address_;
- bool signal_stop_;
- claiming_state claiming_state_;
- std::string device_name_;
+ uint8_t current_address_;
+ bool signal_stop_;
+ claiming_state claiming_state_;
+ std::string device_name_;
};
}
diff --git a/low-can-binding/utils/socketcan-j1939/socketcan-j1939-data.cpp b/low-can-binding/utils/socketcan-j1939/socketcan-j1939-data.cpp
index c9d3e0a6..b2f17c6e 100644
--- a/low-can-binding/utils/socketcan-j1939/socketcan-j1939-data.cpp
+++ b/low-can-binding/utils/socketcan-j1939/socketcan-j1939-data.cpp
@@ -22,47 +22,47 @@
namespace utils
{
- /**
- * @brief Open a socket for receive or send data
- *
- * @param device_name The device name to open the socket
- * @param pgn The pgn to receive only him
- * @return int Return the number of the socket
- */
- int socketcan_j1939_data_t::open(std::string device_name, pgn_t pgn)
- {
- int ret = socketcan_j1939_t::open(device_name,htole64(J1939_NAME_ECU),pgn,J1939_NO_ADDR);
- if(ret >= 0)
- {
- if(tx_address_.can_addr.j1939.pgn != J1939_NO_PGN)
- {
- add_filter(J1939_NO_NAME,tx_address_.can_addr.j1939.pgn,J1939_NO_ADDR,J1939_NO_NAME,J1939_NO_PGN,J1939_NO_ADDR);
- }
- define_opt();
- }
- return ret;
- }
+ /**
+ * @brief Open a socket for receive or send data
+ *
+ * @param device_name The device name to open the socket
+ * @param pgn The pgn to receive only him
+ * @return int Return the number of the socket
+ */
+ int socketcan_j1939_data_t::open(std::string device_name, pgn_t pgn)
+ {
+ int ret = socketcan_j1939_t::open(device_name,htole64(J1939_NAME_ECU),pgn,J1939_NO_ADDR);
+ if(ret >= 0)
+ {
+ if(tx_address_.can_addr.j1939.pgn != J1939_NO_PGN)
+ {
+ add_filter(J1939_NO_NAME,tx_address_.can_addr.j1939.pgn,J1939_NO_ADDR,J1939_NO_NAME,J1939_NO_PGN,J1939_NO_ADDR);
+ }
+ define_opt();
+ }
+ return ret;
+ }
- /**
- * @brief Write a message but check if the address claiming is operation before
- *
- * @param obj A j1939 message
- * @return int 0 if the write is ok
- */
- int socketcan_j1939_data_t::write_message(message_t& obj)
- {
- std::unique_lock<std::mutex> lock(mutex_claiming_);
- application_t &application = application_t::instance();
- socketcan_j1939_addressclaiming_t *socket_addr_claimed = static_cast<socketcan_j1939_addressclaiming_t*>(application.get_socket_address_claiming().get());
- while(socket_addr_claimed->get_state() != claiming_state::OPERATIONAL)
- {
- socketcan_j1939_t::signal_address_claiming_.wait(lock);
- if(socket_addr_claimed->get_state() == claiming_state::INVALID)
- {
- AFB_ERROR("Invalid state");
- return -1;
- }
- }
- return socketcan_j1939_t::write_message(obj);
- }
+ /**
+ * @brief Write a message but check if the address claiming is operation before
+ *
+ * @param obj A j1939 message
+ * @return int 0 if the write is ok
+ */
+ int socketcan_j1939_data_t::write_message(message_t& obj)
+ {
+ std::unique_lock<std::mutex> lock(mutex_claiming_);
+ application_t &application = application_t::instance();
+ socketcan_j1939_addressclaiming_t *socket_addr_claimed = static_cast<socketcan_j1939_addressclaiming_t*>(application.get_socket_address_claiming().get());
+ while(socket_addr_claimed->get_state() != claiming_state::OPERATIONAL)
+ {
+ socketcan_j1939_t::signal_address_claiming_.wait(lock);
+ if(socket_addr_claimed->get_state() == claiming_state::INVALID)
+ {
+ AFB_ERROR("Invalid state");
+ return -1;
+ }
+ }
+ return socketcan_j1939_t::write_message(obj);
+ }
}
diff --git a/low-can-binding/utils/socketcan-j1939/socketcan-j1939.cpp b/low-can-binding/utils/socketcan-j1939/socketcan-j1939.cpp
index 25d0f76e..bb74c766 100644
--- a/low-can-binding/utils/socketcan-j1939/socketcan-j1939.cpp
+++ b/low-can-binding/utils/socketcan-j1939/socketcan-j1939.cpp
@@ -96,7 +96,7 @@ namespace utils
* @param recv_own_msgs - Allows you to receive your own packets
* @param broadcast - Allows to write message with address brodcast (255)
*/
- void socketcan_j1939_t::define_opt(bool promisc, bool recv_own_msgs, bool broadcast)
+ void socketcan_j1939_t::define_opt(bool promisc, bool recv_own_msgs, bool broadcast)
{
int promisc_i = 0;
int recv_own_msgs_i = 0;
diff --git a/low-can-binding/utils/socketcan-j1939/socketcan-j1939.hpp b/low-can-binding/utils/socketcan-j1939/socketcan-j1939.hpp
index 6c2ea696..f9132972 100644
--- a/low-can-binding/utils/socketcan-j1939/socketcan-j1939.hpp
+++ b/low-can-binding/utils/socketcan-j1939/socketcan-j1939.hpp
@@ -33,15 +33,15 @@ namespace utils
{
/**
- * @enum state
- * @brief The state of the address claiming
- */
- enum class claiming_state {
- INITIAL, ///< INITIAL - INITIAL state
- CLAIMING, ///< CLAIMING - CLAIMING state
- OPERATIONAL, ///< OPERATIONAL - OPERATIONAL state
- INVALID
- };
+ * @enum state
+ * @brief The state of the address claiming
+ */
+ enum class claiming_state {
+ INITIAL, ///< INITIAL - INITIAL state
+ CLAIMING, ///< CLAIMING - CLAIMING state
+ OPERATIONAL, ///< OPERATIONAL - OPERATIONAL state
+ INVALID
+ };
class socketcan_j1939_addressclaiming_t;
class socketcan_j1939_t : public socketcan_t
@@ -65,4 +65,3 @@ namespace utils
};
}
-