summaryrefslogtreecommitdiffstats
path: root/recipes-qt/qt/qtsystems_%.bbappend
blob: 4fe0f28c4a48b99de0612944ec0bf7ee2a1f394c (plain)
1
require ${@bb.utils.contains('AGL_FEATURES', 'agldemo', 'qtsystems_agldemo.inc', '', d)}
/* Name.Decorator */ .highlight .ne { color: #bb0066; font-weight: bold } /* Name.Exception */ .highlight .nf { color: #0066bb; font-weight: bold } /* Name.Function */ .highlight .nl { color: #336699; font-style: italic } /* Name.Label */ .highlight .nn { color: #bb0066; font-weight: bold } /* Name.Namespace */ .highlight .py { color: #336699; font-weight: bold } /* Name.Property */ .highlight .nt { color: #bb0066; font-weight: bold } /* Name.Tag */ .highlight .nv { color: #336699 } /* Name.Variable */ .highlight .ow { color: #008800 } /* Operator.Word */ .highlight .w { color: #bbbbbb } /* Text.Whitespace */ .highlight .mb { color: #0000DD; font-weight: bold } /* Literal.Number.Bin */ .highlight .mf { color: #0000DD; font-weight: bold } /* Literal.Number.Float */ .highlight .mh { color: #0000DD; font-weight: bold } /* Literal.Number.Hex */ .highlight .mi { color: #0000DD; font-weight: bold } /* Literal.Number.Integer */ .highlight .mo { color: #0000DD; font-weight: bold } /* Literal.Number.Oct */ .highlight .sa { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Affix */ .highlight .sb { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Backtick */ .highlight .sc { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Char */ .highlight .dl { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Delimiter */ .highlight .sd { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Doc */ .highlight .s2 { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Double */ .highlight .se { color: #0044dd; background-color: #fff0f0 } /* Literal.String.Escape */ .highlight .sh { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Heredoc */ .highlight .si { color: #3333bb; background-color: #fff0f0 } /* Literal.String.Interpol */ .highlight .sx { color: #22bb22; background-color: #f0fff0 } /* Literal.String.Other */ .highlight .sr { color: #008800; background-color: #fff0ff } /* Literal.String.Regex */ .highlight .s1 { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Single */ .highlight .ss { color: #aa6600; background-color: #fff0f0 } /* Literal.String.Symbol */ .highlight .bp { color: #003388 } /* Name.Builtin.Pseudo */ .highlight .fm { color: #0066bb; font-weight: bold } /* Name.Function.Magic */ .highlight .vc { color: #336699 } /* Name.Variable.Class */ .highlight .vg { color: #dd7700 } /* Name.Variable.Global */ .highlight .vi { color: #3333bb } /* Name.Variable.Instance */ .highlight .vm { color: #336699 } /* Name.Variable.Magic */ .highlight .il { color: #0000DD; font-weight: bold } /* Literal.Number.Integer.Long */ }
/*
 * Copyright (C) 2015, 2016 "IoT.bzh"
 * Author "Romain Forlot" <romain.forlot@iot.bzh>
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *	 http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

#pragma once

#include <vector>
#include <string>
#include <cstdint>
#include <iostream>
#include <memory>
#include <linux/can.h>
#include <linux/can/bcm.h>
#include "../../utils/timer.hpp"

#define CAN_MESSAGE_SIZE 8

#define MAX_BCM_CAN_FRAMES 257
#define MAX_ISOTP_FRAMES 4096


/**
 * FLAGS
 */

#define INVALID_FLAG 0x0001
#define CAN_PROTOCOL 0x0002
#define J1939_PROTOCOL 0x0004
#define J1939_ADDR_CLAIM_PROTOCOL 0x0008
#define ISOTP_PROTOCOL 0x0010
#define ISOTP_SEND 0x0020
#define ISOTP_RECEIVE 0x0040
#define CAN_PROTOCOL_WITH_FD_FRAME 0x0080
#define FRAME_LAYOUT_IS_LE 0x0100 // LE stand for Little Endian

/// @class message_t
///
/// @brief A compact representation of a single CAN message, meant to be used in in/out
/// buffers. It is a wrapper of a can_frame struct with some sugar around it for binding purposes.
class message_t {
protected:
	uint32_t maxdlen_; ///< maxdlen_ - Max data length deduce from number of bytes read from the socket.*/
	uint32_t length_; ///< length_ - the length of the data array. */
	uint32_t flags_; ///< format_ - the format mask of the message that control which socketcan will used*/
	std::vector<uint8_t> data_; ///< data_ - The message's data field with a size of 8 which is the standard about CAN bus messages.*/
	uint64_t timestamp_; ///< timestamp_ - timestamp of the received message*/
	int sub_id_; ///< sub_id_ - Subscription index. */

public:
	message_t();
	message_t(uint32_t maxdlen, uint32_t length, uint32_t flags, std::vector<uint8_t>& data, uint64_t timestamp);
	virtual ~message_t() = default;

	int get_sub_id() const;
	const uint8_t* get_data() const;
	const std::vector<uint8_t> get_data_vector() const;
	const std::vector<uint8_t> get_data_vector(int start, int end) const;
	uint32_t get_length() const;
	uint64_t get_timestamp() const;

	void set_data(std::vector<uint8_t> data);
	void set_sub_id(int sub_id);
	void set_timestamp(uint64_t timestamp);
	virtual bool is_set() = 0;
	virtual std::string get_debug_message() = 0;
	virtual uint32_t get_id() const = 0;
	virtual void set_id(canid_t id) = 0;
	uint32_t get_flags();
	void set_flags(uint32_t flags);
	void erase_flags();
	uint32_t get_maxdlen();
	void set_maxdlen(uint32_t maxdlen);
	void set_length(uint32_t length);
	void frame_swap();
};