/
PortInterface.cpp
123 lines (102 loc) · 2.73 KB
/
PortInterface.cpp
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
120
121
122
// Copyright 2016 Rob Riggs <rob@mobilinkd.com>
// All rights reserved.
#include "PortInterface.hpp"
#include "SerialPort.hpp"
#include "UsbPort.hpp"
#include "NullPort.hpp"
#include <algorithm>
#include <cstring>
namespace mobilinkd { namespace tnc {
uint8_t TxBuffer[TX_BUFFER_SIZE];
PortInterface* ioport{0};
int write(hdlc::IoFrame* frame, uint32_t timeout)
{
if (mobilinkd::tnc::ioport == 0) return -1;
return mobilinkd::tnc::ioport->write(frame, timeout);
}
}} // mobilinkd::tnc
int writeLog(const uint8_t* data, uint32_t size, uint32_t timeout)
{
if (mobilinkd::tnc::ioport == 0) return -1;
return mobilinkd::tnc::ioport->write(data, size, 7, timeout);
}
int writeTNC(const uint8_t* data, uint32_t size, uint32_t timeout)
{
if (mobilinkd::tnc::ioport == 0) return -1;
return mobilinkd::tnc::ioport->write(data, size, timeout);
}
int printTNC(const char* zstring, uint32_t timeout)
{
if (mobilinkd::tnc::ioport == 0) return -1;
return mobilinkd::tnc::ioport->write((uint8_t*) zstring, strlen(zstring), timeout);
}
void init_ioport()
{
mobilinkd::tnc::ioport = mobilinkd::tnc::getNullPort();
initNull();
}
void initCDC()
{
mobilinkd::tnc::getUsbPort()->init();
}
void initSerial()
{
mobilinkd::tnc::getSerialPort()->init();
}
void initNull()
{
mobilinkd::tnc::getNullPort()->init();
}
int openCDC()
{
mobilinkd::tnc::getSerialPort()->close();
mobilinkd::tnc::PortInterface* tmp = mobilinkd::tnc::getUsbPort();
tmp->open();
if (mobilinkd::tnc::ioport != tmp and tmp->isOpen())
{
std::swap(tmp, mobilinkd::tnc::ioport);
if (tmp) tmp->close();
return true;
}
return mobilinkd::tnc::ioport == tmp;
}
int openSerial()
{
mobilinkd::tnc::getUsbPort()->close();
mobilinkd::tnc::PortInterface* tmp = mobilinkd::tnc::getSerialPort();
tmp->open();
if (mobilinkd::tnc::ioport != tmp and tmp->isOpen())
{
std::swap(tmp, mobilinkd::tnc::ioport);
if (tmp) tmp->close();
return true;
}
return mobilinkd::tnc::ioport == tmp;
}
int openNull()
{
auto tmp = mobilinkd::tnc::getNullPort();
if (mobilinkd::tnc::ioport != tmp and tmp->isOpen())
{
if (mobilinkd::tnc::ioport) mobilinkd::tnc::ioport->close();
mobilinkd::tnc::ioport = tmp;
return true;
}
return mobilinkd::tnc::ioport == tmp;
}
void closeCDC()
{
mobilinkd::tnc::getUsbPort()->close();
}
void closeSerial()
{
mobilinkd::tnc::getSerialPort()->close();
}
int writeCDC(const uint8_t* data, uint32_t size, uint32_t timeout)
{
return mobilinkd::tnc::getUsbPort()->write(data, size, timeout);
}
int writeSerial(const uint8_t* data, uint32_t size, uint32_t timeout)
{
return mobilinkd::tnc::getSerialPort()->write(data, size, timeout);
}