DESERT 4.0.0
uwmodamodem.h
Go to the documentation of this file.
1//
2// Copyright (c) 2019 Regents of the SIGNET lab, University of Padova.
3// All rights reserved.
4//
5// Redistribution and use in source and binary forms, with or without
6// modification, are permitted provided that the following conditions
7// are met:
8// 1. Redistributions of source code must retain the above copyright
9// notice, this list of conditions and the following disclaimer.
10// 2. Redistributions in binary form must reproduce the above copyright
11// notice, this list of conditions and the following disclaimer in the
12// documentation and/or other materials provided with the distribution.
13// 3. Neither the name of the University of Padova (SIGNET lab) nor the
14// names of its contributors may be used to endorse or promote products
15// derived from this software without specific prior written permission.
16//
17// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
18// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
19// TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
20// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
21// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
22// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
23// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
24// OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
25// WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
26// OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
27// ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28
36#ifndef UWMODAMODEM_H
37#define UWMODAMODEM_H
38
39#include <uwconnector.h>
40#include <uwmodem.h>
41#include <uwsocket.h>
42
43#include <atomic>
44#include <condition_variable>
45#include <map>
46#include <mutex>
47#include <string>
48#include <thread>
49#include <vector>
50
51class UwMODAModem : public UwModem
53
54public:
62 enum class ModemState {
63 AVAILABLE = 0,
67 };
68
77
82
86 virtual ~UwMODAModem();
87
94 virtual void recv(Packet *p);
95
105 virtual int command(int argc, const char *const *argv);
106
114 virtual int getModulationType(Packet *p);
115
124 virtual double getTxDuration(Packet *p);
125
133 virtual int recvSyncClMsg(ClMessage *m);
134
135protected:
141 virtual void startTx(Packet *p);
142
149 virtual void startRx(Packet *p);
150
156 virtual void endRx(Packet *p);
157
160private:
165 void start();
166
172 void stop();
173
180 void receivingSignaling();
181
186 void receivingData();
187
192 void createRxPacket(Packet *p);
193
198 void transmittingData();
199
204 ModemResponse parseSignaling(std::vector<char>::iterator &end_it);
205
211 void updateStatus(ModemResponse response);
212
214 std::mutex status_m;
216 std::condition_variable status_cv;
218 std::mutex tx_queue_m;
220 std::condition_variable tx_queue_cv;
222 std::atomic<bool> receiving;
224 std::atomic<bool> transmitting;
225
227 std::string rx_payload;
230
231 std::thread
233 std::thread rx_thread;
234 std::thread tx_thread;
237 static std::vector<std::pair<std::string, ModemResponse>> signaling_dict;
238
240 static std::map<ModemState, std::string> stateToString;
241
246 std::unique_ptr<UwConnector> signal_conn;
247 static const int SIGNALING_ADDRESS;
252 std::unique_ptr<UwConnector> data_conn;
253 static const int DATA_ADDRESS;
256 std::vector<char> signal_buffer;
257
259 const static std::chrono::milliseconds MODEM_TIMEOUT;
260
262 const std::string sep = {"::"};
264 const std::string end_delim = {";"};
265
271 std::string signal_tag;
272
273 std::string signal_address;
274
276};
277
278#endif
Definition uwmodamodem.h:52
std::thread rx_thread
Definition uwmodamodem.h:233
virtual int getModulationType(Packet *p)
Definition uwmodamodem.cpp:173
int premodulation
Definition uwmodamodem.h:275
void createRxPacket(Packet *p)
Definition uwmodamodem.cpp:353
const std::string sep
Definition uwmodamodem.h:262
virtual void endRx(Packet *p)
Definition uwmodamodem.cpp:238
ModemState status
Definition uwmodamodem.h:158
void receivingSignaling()
Definition uwmodamodem.cpp:363
ModemResponse parseSignaling(std::vector< char >::iterator &end_it)
Definition uwmodamodem.cpp:420
void receivingData()
Definition uwmodamodem.cpp:306
std::mutex status_m
Definition uwmodamodem.h:214
static const int SIGNALING_ADDRESS
Definition uwmodamodem.h:247
virtual void recv(Packet *p)
Definition uwmodamodem.cpp:116
std::thread tx_thread
Definition uwmodamodem.h:234
virtual double getTxDuration(Packet *p)
Definition uwmodamodem.cpp:179
void updateStatus(ModemResponse response)
Definition uwmodamodem.cpp:469
std::string rx_payload
Definition uwmodamodem.h:227
void start()
Definition uwmodamodem.cpp:245
std::thread sig_thread
Definition uwmodamodem.h:232
std::atomic< bool > receiving
Definition uwmodamodem.h:222
virtual void startTx(Packet *p)
Definition uwmodamodem.cpp:499
std::condition_variable status_cv
Definition uwmodamodem.h:216
std::mutex tx_queue_m
Definition uwmodamodem.h:218
ModemResponse
Definition uwmodamodem.h:76
static const std::chrono::milliseconds MODEM_TIMEOUT
Definition uwmodamodem.h:259
std::condition_variable tx_queue_cv
Definition uwmodamodem.h:220
static std::vector< std::pair< std::string, ModemResponse > > signaling_dict
Definition uwmodamodem.h:52
void stop()
Definition uwmodamodem.cpp:277
void transmittingData()
Definition uwmodamodem.cpp:394
virtual int command(int argc, const char *const *argv)
Definition uwmodamodem.cpp:159
static std::map< ModemState, std::string > stateToString
Definition uwmodamodem.h:57
std::string signal_tag
Definition uwmodamodem.h:271
UwMODAModem()
Definition uwmodamodem.cpp:84
const std::string end_delim
Definition uwmodamodem.h:264
std::vector< char > signal_buffer
Definition uwmodamodem.h:256
ModemState
Definition uwmodamodem.h:62
virtual void startRx(Packet *p)
Definition uwmodamodem.cpp:231
virtual ~UwMODAModem()
Definition uwmodamodem.cpp:110
int rx_size
Definition uwmodamodem.h:229
std::unique_ptr< UwConnector > signal_conn
Definition uwmodamodem.h:246
virtual int recvSyncClMsg(ClMessage *m)
Definition uwmodamodem.cpp:201
static const int DATA_ADDRESS
Definition uwmodamodem.h:253
std::atomic< bool > transmitting
Definition uwmodamodem.h:224
std::string signal_address
Definition uwmodamodem.h:273
std::unique_ptr< UwConnector > data_conn
Definition uwmodamodem.h:252
Definition uwmodem.h:62
Generic class that provides a method to interface with the devices. Will be specialized for,...
Header of the main class that implements the general interface between DESERT and real acoustic modem...
Class that implements a connector and, specifically, the socket connector. BSD sockets are used,...