-
Notifications
You must be signed in to change notification settings - Fork 0
/
serial.h
119 lines (109 loc) · 3.61 KB
/
serial.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
/**
* Copyright (C) 2018 Dario Dorando (Faseroptik Henning GmbH)
*
* Permission is hereby granted, free of charge, to any person obtaining a copy of this software
* and associated documentation files (the "Software"), to deal in the Software without restriction,
* including without limitation the rights to use, copy, modify, merge, publish, distribute,
* sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included
* in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
* INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
* PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE
* FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT
* OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
* USE OR OTHER DEALINGS IN THE SOFTWARE.
*
*
* @file serial.h
* @brief Header for dealing with serial communication.
* @author Dario Dorando (Faseroptik Henning GmbH)
* @date 06/09/2018
*
*/
#include <sys/types.h>
#include <fcntl.h>
#include <termios.h>
#include <iostream>
/**
* @brief Class for defining a serial port in software
*/
class FOHSerial {
public:
/**
* @brief Main constructor
*
* @param port Block device @ /dev
* @param speed Desired speed
* @param param Parameters (see @serialParameters)
*
* @return 0 on success, -1 otherwise
*/
FOHSerial(const char* port, int speed, uint8_t param);
/**
* @brief Set attributes of a serial interface.
*
* See https://linux.die.net/man/3/termios for further information on serial attributes.
*
* @param speed Baudrate in speed_t format
* @param clen Byte length (5-8 bits)
* @param parityOn Enables/Disables parity
* @param parityType Sets the parity type (0: off, 1: even, 2: odd)
* @param fctrl Sets the flow control type (0: off, 1: software, 2: hardware, 3: soft- and hardware)
* @param stopbx Enables/Disables a second stop bit
*
* @return New termios structure on success, -1 otherwise.
*/
struct termios if_attrib_set(speed_t speed, int clen, bool parityOn, int parityType, int fctrl, bool stopbx);
/**
* @brief Setup serial port
*
* @param portname Location of the block device (at /dev/)
* @param speed The wanted baud rate (as int)
*
* @return 0 on success, -1 otherwise.
*/
int setupSerialPort(const char* portname, int speed);
/**
* @brief Wrapper for _serialPut()
* @see _serialPut()
*
* @param buf Text buffer
* @param size Bytes to be sent
*
* @return Number of bytes written when successful, -1 otherwise.
*/
int writeToSerialPort(char** buf, size_t size);
/**
* @brief Read from a serial port
*
* @param buf Text buffer
* @param size Buffer size
*
* @return Number of bytes read when successful, -1 otherwise.
*/
int readFromSerialPort(char** buf, size_t size);
private:
/**
* @brief Conversion of an integer baud to speed_t baud
*
* @param num Wanted baud as int
*
* @return Baud converted to speed_t. (max 460800, min 50)
*/
speed_t __convBaud(int num);
/**
* @brief Send characters on serial port
*
* @param buf Text buffer
* @param size Bytes to be sent
*
* @return Number of bytes written when successful, -1 otherwise.
*/
int _serialPut(char** buf, size_t size);
int _serfd; /**< Serial fd */
bool _isValid; /**< is valid instance */
};