Projekt

Obecné

Profil

« Předchozí | Další » 

Revize e6053a29

Přidáno uživatelem Oto Šťáva před téměř 4 roky(ů)

Re #8740 - Server refactor

Zobrazit rozdíly:

deltarobot/curvedataserver.cpp
4 4
#include <QHostAddress>
5 5
#include <QAbstractSocket>
6 6

  
7
static QByteArray message8(uint16_t messageId, uint8_t content = 0) {
8
    QByteArray result(2 + 1, 0);
9
    result[0] = ((uint8_t*) &messageId)[0];
10
    result[1] = ((uint8_t*) &messageId)[1];
11
    result[2] = content;
12
    return result;
13
}
14

  
15
static QByteArray message16(uint16_t messageId, uint16_t content = 0) {
16
    QByteArray result(2 + 2, 0);
17
    result[0] = ((uint8_t*) &messageId)[0];
18
    result[1] = ((uint8_t*) &messageId)[1];
19
    result[2] = ((uint8_t*) &content)[0];
20
    result[3] = ((uint8_t*) &content)[1];
21
    return result;
22
}
23

  
24
static QByteArray message32(uint16_t messageId, uint32_t content = 0) {
25
    QByteArray result(2 + 4, 0);
26
    result[0] = ((uint8_t*) &messageId)[0];
27
    result[1] = ((uint8_t*) &messageId)[1];
28
    result[2] = ((uint8_t*) &content)[0];
29
    result[3] = ((uint8_t*) &content)[1];
30
    result[4] = ((uint8_t*) &content)[2];
31
    result[5] = ((uint8_t*) &content)[3];
32
    return result;
33
}
34

  
35
static QByteArray message64(uint16_t messageId, uint64_t content = 0) {
36
    QByteArray result(2 + 8, 0);
37
    result[0] = ((uint8_t*) &messageId)[0];
38
    result[1] = ((uint8_t*) &messageId)[1];
39
    result[2] = ((uint8_t*) &content)[0];
40
    result[3] = ((uint8_t*) &content)[1];
41
    result[4] = ((uint8_t*) &content)[2];
42
    result[5] = ((uint8_t*) &content)[3];
43
    result[6] = ((uint8_t*) &content)[4];
44
    result[7] = ((uint8_t*) &content)[5];
45
    result[8] = ((uint8_t*) &content)[6];
46
    result[9] = ((uint8_t*) &content)[7];
47
    return result;
48
}
49

  
50
static QByteArray message128(uint16_t messageId,
51
                             uint32_t contentX = 0,
52
                             uint32_t contentY = 0,
53
                             uint32_t contentZ = 0,
54
                             uint32_t contentW = 0)
55
{
56
    QByteArray result(2 + 16, 0);
57
    result[0] = ((uint8_t*) &messageId)[0];
58
    result[1] = ((uint8_t*) &messageId)[1];
59

  
60
    result[2] = ((uint8_t*) &contentX)[0];
61
    result[3] = ((uint8_t*) &contentX)[1];
62
    result[4] = ((uint8_t*) &contentX)[2];
63
    result[5] = ((uint8_t*) &contentX)[3];
64

  
65
    result[6] = ((uint8_t*) &contentY)[0];
66
    result[7] = ((uint8_t*) &contentY)[1];
67
    result[8] = ((uint8_t*) &contentY)[2];
68
    result[9] = ((uint8_t*) &contentY)[3];
69

  
70
    result[10] = ((uint8_t*) &contentZ)[0];
71
    result[11] = ((uint8_t*) &contentZ)[1];
72
    result[12] = ((uint8_t*) &contentZ)[2];
73
    result[13] = ((uint8_t*) &contentZ)[3];
74

  
75
    result[14] = ((uint8_t*) &contentW)[0];
76
    result[15] = ((uint8_t*) &contentW)[1];
77
    result[16] = ((uint8_t*) &contentW)[2];
78
    result[17] = ((uint8_t*) &contentW)[3];
79
    return result;
80
}
81

  
82
static QByteArray messageVarLength(uint16_t messageId, uint32_t length) {
83
    QByteArray result(2 + 4 + length, 0);
84
    result[0] = ((uint8_t*) &messageId)[0];
85
    result[1] = ((uint8_t*) &messageId)[1];
86
    result[2] = ((uint8_t*) &length)[0];
87
    result[3] = ((uint8_t*) &length)[1];
88
    result[4] = ((uint8_t*) &length)[2];
89
    result[5] = ((uint8_t*) &length)[3];
90
    return result;
91
}
92

  
7 93
CurveDataServer::CurveDataServer() :
8 94
    _server(this),
9 95
    _sockets()
......
12 98
    connect(&_server, SIGNAL(newConnection()), this, SLOT(onNewConnection()));
13 99
}
14 100

  
15
CurveDataServer::~CurveDataServer()
16
{
17
    // asi vlastne neni co
18
}
19

  
20 101
void CurveDataServer::onNewConnection()
21 102
{
22 103
    QTcpSocket *clientSocket = _server.nextPendingConnection();
......
48 129
    }
49 130
}
50 131

  
51
QByteArray *CurveDataServer::createMessageId(int sizeId, int typeId)
52
{
53
    QByteArray *id = new QByteArray();
54

  
55
    id->append((sizeId & 0x0F) << 4 + ((typeId & 0x0F00) >> 12));
56
    id->append(typeId & 0xFF);
57

  
58
    return id;
59
}
60
/*
61
QByteArray *CurveDataServer::appendFloatToMessage(QByteArray *message, float f)
62
{
63
    if (!message)
64
        return message;
65

  
66
    unsigned char *c = reinterpret_cast<unsigned char *>(&f);
67

  
68
    for (int i = 0; i < 4; i++)
69
    {
70
        message->append(c[3 - i]);
71
    }
72

  
73
    return message;
74
}
75
*/
76 132
QByteArray *CurveDataServer::putFloatIntoMessage(QByteArray *message, int index, float f)
77 133
{
78 134
    if (!message || message->size() < index + 4)
......
89 145
}
90 146

  
91 147

  
92
void CurveDataServer::sendApplicatorPoint(float x, float y, float z)
148
void CurveDataServer::sendActuatorPosition(float x, float y, float z)
93 149
{
94
    QByteArray message(18, 0);
95
    message[0] = 0x03;
96
    message[1] = 0x40;
97

  
98
    putFloatIntoMessage(&message, 2, x);
99
    putFloatIntoMessage(&message, 6, y);
100
    putFloatIntoMessage(&message, 10, z);
101
    putFloatIntoMessage(&message, 14, 0.0);
150
    QByteArray message = message128(0x4003,
151
                                    *((uint32_t*) &x),
152
                                    *((uint32_t*) &y),
153
                                    *((uint32_t*) &z));
102 154

  
103 155
    for (QTcpSocket* socket : _sockets) {
104 156
            socket->write(message);
......
117 169
void CurveDataServer::sendProtocolMagic(QTcpSocket *socket)
118 170
{
119 171
    char *messageContent = "DeltaRVr";
120
    QByteArray message(10, 0);
121
    message[0] = 0x01;
122
    message[1] = 0x30;
123

  
124
    for (int i = 0; i < 8; i++)
125
    {
126
        message[i + 2] = messageContent[i];
127
    }
172
    QByteArray message = message64(0x3001, *((uint64_t*) messageContent));
128 173

  
129 174
    socket->write(message);
130 175

  
......
134 179

  
135 180
void CurveDataServer::sendVersion(QTcpSocket *socket)
136 181
{
137
    QByteArray message(6, 0);
138
    message[0] = 0x02;
139
    message[1] = 0x20;
140

  
141
    message[2] = 0x01;
182
    QByteArray message = message32(0x2002, 1);
142 183

  
143 184
    socket->write(message);
144 185

  
deltarobot/curvedataserver.h
11 11

  
12 12
public:
13 13
    CurveDataServer();
14
    ~CurveDataServer();
15
    void sendApplicatorPoint(float x, float y, float z);
14
    void sendActuatorPosition(float x, float y, float z);
16 15

  
17 16
public slots:
18 17
    void onNewConnection();
......
20 19
    void onReadyRead();
21 20

  
22 21
private:
23
    QByteArray *createMessageId(int sizeId, int typId);
24
    //QByteArray *appendFloatToMessage(QByteArray *message, float f);
25 22
    QByteArray *putFloatIntoMessage(QByteArray *message, int index, float f);
26 23
    void sendPreamble(QTcpSocket *socket);
27 24
    void sendProtocolMagic(QTcpSocket *socket);
deltarobot/mainwindow.cpp
1071 1071
        connectionGuard->restart();
1072 1072
    }
1073 1073
#endif
1074
    cdServer->sendApplicatorPoint(spherePos.x(), spherePos.y(), spherePos.z());
1074
    cdServer->sendActuatorPosition(spherePos.x(), spherePos.y(), spherePos.z());
1075 1075
}
1076 1076

  
1077 1077
//! Příjem dat ze stroje

Také k dispozici: Unified diff