summaryrefslogtreecommitdiffhomepage
path: root/proto-udp/ftnoir_protocol_ftn.cpp
blob: 4d57140f8bccb5da298340d5ed508dc8929a372c (plain)
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
/* Homepage         http://facetracknoir.sourceforge.net/home/default.htm        *
 *                                                                               *
 * ISC License (ISC)                                                             *
 *                                                                               *
 * Copyright (c) 2015, Wim Vriend                                                *
 *                                                                               *
 * Permission to use, copy, modify, and/or distribute this software for any      *
 * purpose with or without fee is hereby granted, provided that the above        *
 * copyright notice and this permission notice appear in all copies.             *
 */
#include "ftnoir_protocol_ftn.h"
#include <QFile>
#include "api/plugin-api.hpp"

udp::udp()
{
    set_dest_address();

    QObject::connect(s.b.get(), &bundle_::changed,
                     this, &udp::set_dest_address,
                     Qt::QueuedConnection);
}

void udp::pose(const double *headpose) {
    outSocket.writeDatagram((const char *) headpose, sizeof(double[6]), dest_ip, dest_port);
}

void udp::set_dest_address()
{
    dest_port = s.port;
    dest_ip = QHostAddress((s.ip1.to<unsigned>() & 0xff) << 24 |
                           (s.ip2.to<unsigned>() & 0xff) << 16 |
                           (s.ip3.to<unsigned>() & 0xff) << 8  |
                           (s.ip4.to<unsigned>() & 0xff) << 0  );
}

module_status udp::initialize()
{
    if (outSocket.bind(QHostAddress::Any, 0, QUdpSocket::DontShareAddress))
        return status_ok();
    else
        return error(tr("Can't bind socket: %1").arg(outSocket.errorString()));
}

OPENTRACK_DECLARE_PROTOCOL(udp, FTNControls, udp_sender_dll)