Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Diff: ait_link.h
- Revision:
- 3:bfc4928cd279
- Parent:
- 0:8e8dfc870cb2
diff -r 502d1a5f79a0 -r bfc4928cd279 ait_link.h
--- a/ait_link.h Wed Apr 06 08:11:43 2016 +0000
+++ b/ait_link.h Wed Apr 06 08:27:25 2016 +0000
@@ -1,75 +1,62 @@
-// Adapted by Benjamin Hepp from ArduHDLC library
-
-/*
-Arduhdlc is Arduino HDLC library, which can be used over any interface.
-Copyright (C) 2015 Jarkko Hautakorpi et al. see LICENSE.txt
-This program is free software; you can redistribute it and/or
-modify it under the terms of the GNU General Public License
-as published by the Free Software Foundation; either version 2
-of the License, or (at your option) any later version.
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-You should have received a copy of the GNU General Public License
-along with this program; if not, write to the Free Software
-Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-*/
-
-
-#pragma once
-
-#include <stdint.h>
-#include <stdbool.h>
-#include <stddef.h>
-
-namespace ait {
-
- class AITLink {
- public:
- /* HDLC Asynchronous framing */
- /* The frame boundary octet is 01111110, (7E in hexadecimal notation) */
- const static uint8_t FRAME_BOUNDARY_OCTET = 0x7E;
-
- /* A "control escape octet", has the bit sequence '01111101', (7D hexadecimal) */
- const static uint8_t CONTROL_ESCAPE_OCTET = 0x7D;
-
- /* If either of these two octets appears in the transmitted data, an escape octet is sent, */
- /* followed by the original data octet with bit 5 inverted */
- const static uint8_t INVERT_OCTET = 0x20;
-
- /* The frame check sequence (FCS) is a 16-bit CRC-CCITT */
- /* AVR Libc CRC function is _crc_ccitt_update() */
- /* Corresponding CRC function in Qt (www.qt.io) is qChecksum() */
- const static uint16_t CRC16_CCITT_INIT_VAL = 0xFFFF;
-
- AITLink(size_t max_frame_length = 1024);
- virtual ~AITLink();
-
- bool sendFrame(const uint8_t* frame_buffer, size_t frame_length);
- void inputReceivedChar(uint8_t data);
-
- /* User must define a function, that will process the valid received frame */
- /* This function can act like a command router/dispatcher */
- void registerFrameHandler(void (*callback)(void* user_data, const uint8_t* frame_buffer, size_t frame_length), void* user_data);
-
- protected:
- virtual void handleFrame(const uint8_t* frame_buffer, size_t frame_length);
- /* User must define a function to send a byte throug USART, I2C, SPI etc.*/
- virtual void sendChar(uint8_t data) = 0;
-
- private:
- uint16_t crcCcittUpdate(uint16_t crc, uint8_t data);
-
- bool escape_character;
- size_t frame_position;
- // 16bit CRC sum for crcCcittUpdate
- uint16_t frame_checksum;
- size_t max_frame_length;
- uint8_t* receive_frame_buffer;
- void (*handle_frame_callback)(void* user_data, const uint8_t* frame_buffer, size_t frame_length);
- void* callback_user_data;
- };
-
-}
+//
+// HDLC based serial communication class.
+//
+// Adapted by Benjamin Hepp from ArduHDLC library (see LICENSE.txt)
+// Original work Copyright (c) 2015 Jarkko Hautakorpi et al.
+// Modified work Copyright (c) 2016 Benjamin Hepp.
+
+#pragma once
+
+#include <stdint.h>
+#include <stdbool.h>
+#include <stddef.h>
+
+namespace ait {
+
+ class AITLink {
+ public:
+ /* HDLC Asynchronous framing */
+ /* The frame boundary octet is 01111110, (7E in hexadecimal notation) */
+ const static uint8_t FRAME_BOUNDARY_OCTET = 0x7E;
+
+ /* A "control escape octet", has the bit sequence '01111101', (7D hexadecimal) */
+ const static uint8_t CONTROL_ESCAPE_OCTET = 0x7D;
+
+ /* If either of these two octets appears in the transmitted data, an escape octet is sent, */
+ /* followed by the original data octet with bit 5 inverted */
+ const static uint8_t INVERT_OCTET = 0x20;
+ /* The frame check sequence (FCS) is a 16-bit CRC-CCITT */
+ /* AVR Libc CRC function is _crc_ccitt_update() */
+ /* Corresponding CRC function in Qt (www.qt.io) is qChecksum() */
+ const static uint16_t CRC16_CCITT_INIT_VAL = 0xFFFF;
+
+ AITLink(size_t max_frame_length = 1024);
+ virtual ~AITLink();
+
+ bool sendFrame(const uint8_t* frame_buffer, size_t frame_length);
+ void inputReceivedChar(uint8_t data);
+
+ /* User must define a function, that will process the valid received frame */
+ /* This function can act like a command router/dispatcher */
+ void registerFrameHandler(void (*callback)(void* user_data, const uint8_t* frame_buffer, size_t frame_length), void* user_data);
+
+ protected:
+ virtual void handleFrame(const uint8_t* frame_buffer, size_t frame_length);
+ /* User must define a function to send a byte throug USART, I2C, SPI etc.*/
+ virtual void sendChar(uint8_t data) = 0;
+
+ private:
+ uint16_t crcCcittUpdate(uint16_t crc, uint8_t data);
+
+ bool escape_character;
+ size_t frame_position;
+ // 16bit CRC sum for crcCcittUpdate
+ uint16_t frame_checksum;
+ size_t max_frame_length;
+ uint8_t* receive_frame_buffer;
+ void (*handle_frame_callback)(void* user_data, const uint8_t* frame_buffer, size_t frame_length);
+ void* callback_user_data;
+ };
+
+}