summaryrefslogtreecommitdiffhomepage
path: root/proto-udp/ftnoir_protocol_ftn.cpp
blob: c67c39b8e6abe5e329d1e43ab9f79ff88e440f3c (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
46
47
48
49
50
/* 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, &bundle_::changed,
                     this, &udp::set_dest_address,
                     Qt::DirectConnection);
}

void udp::pose(const double *headpose, const double*)
{
    QMutexLocker l(&lock);

    outSocket.writeDatagram((const char *) headpose, sizeof(double[6]), dest_ip, dest_port);
}

void udp::set_dest_address()
{
    QMutexLocker l(&lock);

    dest_port = (unsigned short)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)