Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Q
qgroundcontrol
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Valentin Platzgummer
qgroundcontrol
Commits
51f2e2e2
Commit
51f2e2e2
authored
Sep 15, 2014
by
ndousse
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'master' into sortMsgBySysId
parents
a68f6b33
73868e34
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
8 additions
and
96 deletions
+8
-96
MockMavlinkFileServer.cc
src/qgcunittest/MockMavlinkFileServer.cc
+0
-14
MockMavlinkFileServer.h
src/qgcunittest/MockMavlinkFileServer.h
+0
-1
QGCUASFileManager.cc
src/uas/QGCUASFileManager.cc
+4
-75
QGCUASFileManager.h
src/uas/QGCUASFileManager.h
+4
-6
No files found.
src/qgcunittest/MockMavlinkFileServer.cc
View file @
51f2e2e2
...
...
@@ -28,7 +28,6 @@ const MockMavlinkFileServer::ErrorMode_t MockMavlinkFileServer::rgFailureModes[]
MockMavlinkFileServer
::
errModeNakResponse
,
MockMavlinkFileServer
::
errModeNoSecondResponse
,
MockMavlinkFileServer
::
errModeNakSecondResponse
,
MockMavlinkFileServer
::
errModeBadCRC
,
MockMavlinkFileServer
::
errModeBadSequence
,
};
const
size_t
MockMavlinkFileServer
::
cFailureModes
=
sizeof
(
MockMavlinkFileServer
::
rgFailureModes
)
/
sizeof
(
MockMavlinkFileServer
::
rgFailureModes
[
0
]);
...
...
@@ -233,12 +232,6 @@ void MockMavlinkFileServer::sendMessage(mavlink_message_t message)
return
;
}
// Validate CRC
if
(
request
->
hdr
.
crc32
!=
QGCUASFileManager
::
crc32
(
request
))
{
qDebug
()
<<
"Bad CRC received - opcode:"
<<
request
->
hdr
.
opcode
<<
"expected:"
<<
request
->
hdr
.
crc32
<<
"actual:"
<<
QGCUASFileManager
::
crc32
(
request
);
_sendNak
(
QGCUASFileManager
::
kErrCrc
,
outgoingSeqNumber
);
}
switch
(
request
->
hdr
.
opcode
)
{
case
QGCUASFileManager
:
:
kCmdTestNoAck
:
// ignored, ack not sent back, for testing only
...
...
@@ -252,7 +245,6 @@ void MockMavlinkFileServer::sendMessage(mavlink_message_t message)
// ignored, always acked
ackResponse
.
hdr
.
opcode
=
QGCUASFileManager
::
kRspAck
;
ackResponse
.
hdr
.
session
=
0
;
ackResponse
.
hdr
.
crc32
=
0
;
ackResponse
.
hdr
.
size
=
0
;
_emitResponse
(
&
ackResponse
,
outgoingSeqNumber
);
break
;
...
...
@@ -312,12 +304,6 @@ void MockMavlinkFileServer::_emitResponse(QGCUASFileManager::Request* request, u
request
->
hdr
.
seqNumber
=
seqNumber
;
request
->
hdr
.
crc32
=
QGCUASFileManager
::
crc32
(
request
);
if
(
_errMode
==
errModeBadCRC
)
{
// Return a bad CRC
request
->
hdr
.
crc32
++
;
}
mavlink_msg_file_transfer_protocol_pack
(
_systemIdServer
,
// System ID
0
,
// Component ID
&
mavlinkMessage
,
// Mavlink Message to pack into
...
...
src/qgcunittest/MockMavlinkFileServer.h
View file @
51f2e2e2
...
...
@@ -56,7 +56,6 @@ public:
errModeNakResponse
,
///< Nak all requests
errModeNoSecondResponse
,
///< No response to subsequent request to initial command
errModeNakSecondResponse
,
///< Nak subsequent request to initial command
errModeBadCRC
,
///< Return response with bad CRC
errModeBadSequence
///< Return response with bad sequence number
}
ErrorMode_t
;
...
...
src/uas/QGCUASFileManager.cc
View file @
51f2e2e2
...
...
@@ -30,42 +30,6 @@
#include <QDir>
#include <string>
static
const
quint32
crctab
[]
=
{
0x00000000
,
0x77073096
,
0xee0e612c
,
0x990951ba
,
0x076dc419
,
0x706af48f
,
0xe963a535
,
0x9e6495a3
,
0x0edb8832
,
0x79dcb8a4
,
0xe0d5e91e
,
0x97d2d988
,
0x09b64c2b
,
0x7eb17cbd
,
0xe7b82d07
,
0x90bf1d91
,
0x1db71064
,
0x6ab020f2
,
0xf3b97148
,
0x84be41de
,
0x1adad47d
,
0x6ddde4eb
,
0xf4d4b551
,
0x83d385c7
,
0x136c9856
,
0x646ba8c0
,
0xfd62f97a
,
0x8a65c9ec
,
0x14015c4f
,
0x63066cd9
,
0xfa0f3d63
,
0x8d080df5
,
0x3b6e20c8
,
0x4c69105e
,
0xd56041e4
,
0xa2677172
,
0x3c03e4d1
,
0x4b04d447
,
0xd20d85fd
,
0xa50ab56b
,
0x35b5a8fa
,
0x42b2986c
,
0xdbbbc9d6
,
0xacbcf940
,
0x32d86ce3
,
0x45df5c75
,
0xdcd60dcf
,
0xabd13d59
,
0x26d930ac
,
0x51de003a
,
0xc8d75180
,
0xbfd06116
,
0x21b4f4b5
,
0x56b3c423
,
0xcfba9599
,
0xb8bda50f
,
0x2802b89e
,
0x5f058808
,
0xc60cd9b2
,
0xb10be924
,
0x2f6f7c87
,
0x58684c11
,
0xc1611dab
,
0xb6662d3d
,
0x76dc4190
,
0x01db7106
,
0x98d220bc
,
0xefd5102a
,
0x71b18589
,
0x06b6b51f
,
0x9fbfe4a5
,
0xe8b8d433
,
0x7807c9a2
,
0x0f00f934
,
0x9609a88e
,
0xe10e9818
,
0x7f6a0dbb
,
0x086d3d2d
,
0x91646c97
,
0xe6635c01
,
0x6b6b51f4
,
0x1c6c6162
,
0x856530d8
,
0xf262004e
,
0x6c0695ed
,
0x1b01a57b
,
0x8208f4c1
,
0xf50fc457
,
0x65b0d9c6
,
0x12b7e950
,
0x8bbeb8ea
,
0xfcb9887c
,
0x62dd1ddf
,
0x15da2d49
,
0x8cd37cf3
,
0xfbd44c65
,
0x4db26158
,
0x3ab551ce
,
0xa3bc0074
,
0xd4bb30e2
,
0x4adfa541
,
0x3dd895d7
,
0xa4d1c46d
,
0xd3d6f4fb
,
0x4369e96a
,
0x346ed9fc
,
0xad678846
,
0xda60b8d0
,
0x44042d73
,
0x33031de5
,
0xaa0a4c5f
,
0xdd0d7cc9
,
0x5005713c
,
0x270241aa
,
0xbe0b1010
,
0xc90c2086
,
0x5768b525
,
0x206f85b3
,
0xb966d409
,
0xce61e49f
,
0x5edef90e
,
0x29d9c998
,
0xb0d09822
,
0xc7d7a8b4
,
0x59b33d17
,
0x2eb40d81
,
0xb7bd5c3b
,
0xc0ba6cad
,
0xedb88320
,
0x9abfb3b6
,
0x03b6e20c
,
0x74b1d29a
,
0xead54739
,
0x9dd277af
,
0x04db2615
,
0x73dc1683
,
0xe3630b12
,
0x94643b84
,
0x0d6d6a3e
,
0x7a6a5aa8
,
0xe40ecf0b
,
0x9309ff9d
,
0x0a00ae27
,
0x7d079eb1
,
0xf00f9344
,
0x8708a3d2
,
0x1e01f268
,
0x6906c2fe
,
0xf762575d
,
0x806567cb
,
0x196c3671
,
0x6e6b06e7
,
0xfed41b76
,
0x89d32be0
,
0x10da7a5a
,
0x67dd4acc
,
0xf9b9df6f
,
0x8ebeeff9
,
0x17b7be43
,
0x60b08ed5
,
0xd6d6a3e8
,
0xa1d1937e
,
0x38d8c2c4
,
0x4fdff252
,
0xd1bb67f1
,
0xa6bc5767
,
0x3fb506dd
,
0x48b2364b
,
0xd80d2bda
,
0xaf0a1b4c
,
0x36034af6
,
0x41047a60
,
0xdf60efc3
,
0xa867df55
,
0x316e8eef
,
0x4669be79
,
0xcb61b38c
,
0xbc66831a
,
0x256fd2a0
,
0x5268e236
,
0xcc0c7795
,
0xbb0b4703
,
0x220216b9
,
0x5505262f
,
0xc5ba3bbe
,
0xb2bd0b28
,
0x2bb45a92
,
0x5cb36a04
,
0xc2d7ffa7
,
0xb5d0cf31
,
0x2cd99e8b
,
0x5bdeae1d
,
0x9b64c2b0
,
0xec63f226
,
0x756aa39c
,
0x026d930a
,
0x9c0906a9
,
0xeb0e363f
,
0x72076785
,
0x05005713
,
0x95bf4a82
,
0xe2b87a14
,
0x7bb12bae
,
0x0cb61b38
,
0x92d28e9b
,
0xe5d5be0d
,
0x7cdcefb7
,
0x0bdbdf21
,
0x86d3d2d4
,
0xf1d4e242
,
0x68ddb3f8
,
0x1fda836e
,
0x81be16cd
,
0xf6b9265b
,
0x6fb077e1
,
0x18b74777
,
0x88085ae6
,
0xff0f6a70
,
0x66063bca
,
0x11010b5c
,
0x8f659eff
,
0xf862ae69
,
0x616bffd3
,
0x166ccf45
,
0xa00ae278
,
0xd70dd2ee
,
0x4e048354
,
0x3903b3c2
,
0xa7672661
,
0xd06016f7
,
0x4969474d
,
0x3e6e77db
,
0xaed16a4a
,
0xd9d65adc
,
0x40df0b66
,
0x37d83bf0
,
0xa9bcae53
,
0xdebb9ec5
,
0x47b2cf7f
,
0x30b5ffe9
,
0xbdbdf21c
,
0xcabac28a
,
0x53b39330
,
0x24b4a3a6
,
0xbad03605
,
0xcdd70693
,
0x54de5729
,
0x23d967bf
,
0xb3667a2e
,
0xc4614ab8
,
0x5d681b02
,
0x2a6f2b94
,
0xb40bbe37
,
0xc30c8ea1
,
0x5a05df1b
,
0x2d02ef8d
};
QGCUASFileManager
::
QGCUASFileManager
(
QObject
*
parent
,
UASInterface
*
uas
,
uint8_t
unitTestSystemIdQGC
)
:
QObject
(
parent
),
...
...
@@ -80,31 +44,7 @@ QGCUASFileManager::QGCUASFileManager(QObject* parent, UASInterface* uas, uint8_t
_systemIdServer
=
_mav
->
getUASID
();
// Make sure we don't have bad structure packing
Q_ASSERT
(
sizeof
(
RequestHeader
)
==
16
);
}
/// @brief Calculates a 32 bit CRC for the specified request.
/// @param request Request to calculate CRC for. request->size must be set correctly.
/// @param state previous crc state
/// @return Calculated CRC
quint32
QGCUASFileManager
::
crc32
(
Request
*
request
,
unsigned
state
)
{
uint8_t
*
data
=
(
uint8_t
*
)
request
;
size_t
cbData
=
sizeof
(
RequestHeader
)
+
request
->
hdr
.
size
;
// Always calculate CRC with 0 initial CRC value
quint32
crcSave
=
request
->
hdr
.
crc32
;
request
->
hdr
.
crc32
=
0
;
request
->
hdr
.
padding
[
0
]
=
0
;
request
->
hdr
.
padding
[
1
]
=
0
;
request
->
hdr
.
padding
[
2
]
=
0
;
for
(
size_t
i
=
0
;
i
<
cbData
;
i
++
)
state
=
crctab
[(
state
^
data
[
i
])
&
0xff
]
^
(
state
>>
8
);
request
->
hdr
.
crc32
=
crcSave
;
return
state
;
Q_ASSERT
(
sizeof
(
RequestHeader
)
==
12
);
}
/// @brief Respond to the Ack associated with the Open command with the next Read command.
...
...
@@ -281,15 +221,6 @@ void QGCUASFileManager::receiveMessage(LinkInterface* link, mavlink_message_t me
uint16_t
incomingSeqNumber
=
request
->
hdr
.
seqNumber
;
// Make sure we have a good CRC
quint32
expectedCRC
=
crc32
(
request
);
quint32
receivedCRC
=
request
->
hdr
.
crc32
;
if
(
receivedCRC
!=
expectedCRC
)
{
_currentOperation
=
kCOIdle
;
_emitErrorMessage
(
tr
(
"Bad CRC on received message: expected(%1) received(%2)"
).
arg
(
expectedCRC
).
arg
(
receivedCRC
));
return
;
}
// Make sure we have a good sequence number
uint16_t
expectedSeqNumber
=
_lastOutgoingSeqNumber
+
1
;
if
(
incomingSeqNumber
!=
expectedSeqNumber
)
{
...
...
@@ -331,11 +262,13 @@ void QGCUASFileManager::receiveMessage(LinkInterface* link, mavlink_message_t me
break
;
}
}
else
if
(
request
->
hdr
.
opcode
==
kRspNak
)
{
Q_ASSERT
(
request
->
hdr
.
size
==
1
);
// Should only have one byte of error code
OperationState
previousOperation
=
_currentOperation
;
uint8_t
errorCode
=
request
->
data
[
0
];
// Nak's normally have 1 byte of data for error code, except for kErrFailErrno which has additional byte for errno
Q_ASSERT
((
errorCode
==
kErrFailErrno
&&
request
->
hdr
.
size
==
2
)
||
request
->
hdr
.
size
==
1
);
_currentOperation
=
kCOIdle
;
if
(
previousOperation
==
kCOList
&&
errorCode
==
kErrEOF
)
{
...
...
@@ -441,8 +374,6 @@ QString QGCUASFileManager::errorString(uint8_t errorCode)
return
QString
(
"read beyond end of file"
);
case
kErrUnknownCommand
:
return
QString
(
"unknown command"
);
case
kErrCrc
:
return
QString
(
"bad crc"
);
case
kErrFailErrno
:
return
QString
(
"command failed"
);
case
kErrInvalidDataSize
:
...
...
@@ -547,8 +478,6 @@ void QGCUASFileManager::_sendRequest(Request* request)
request
->
hdr
.
seqNumber
=
_lastOutgoingSeqNumber
;
request
->
hdr
.
crc32
=
crc32
(
request
);
if
(
_systemIdQGC
==
0
)
{
_systemIdQGC
=
MainWindow
::
instance
()
->
getMAVLink
()
->
getSystemId
();
}
...
...
src/uas/QGCUASFileManager.h
View file @
51f2e2e2
...
...
@@ -83,8 +83,8 @@ protected:
uint8_t
session
;
///< Session id for read and write commands
uint8_t
opcode
;
///< Command opcode
uint8_t
size
;
///< Size of data
uint8_t
padding
[
3
];
uint
32_t
crc32
;
///< CRC for entire Request structure, with crc32 and padding set to 0
uint8_t
req_opcode
;
///< Request opcode returned in kRspAck, kRspNak message
uint
8_t
padding
[
2
];
///< 32 bit aligment padding
uint32_t
offset
;
///< Offsets for List and Read commands
};
...
...
@@ -117,7 +117,7 @@ protected:
kCmdCreateDirectory
,
///< Creates directory at <path>
kCmdRemoveDirectory
,
///< Removes Directory at <path>, must be empty
kRspAck
,
///< Ack response
kRspAck
=
128
,
///< Ack response
kRspNak
,
///< Nak response
// Used for testing only, not part of protocol
...
...
@@ -134,8 +134,7 @@ protected:
kErrInvalidSession
,
///< Session is not currently open
kErrNoSessionsAvailable
,
///< All available Sessions in use
kErrEOF
,
///< Offset past end of file for List and Read commands
kErrUnknownCommand
,
///< Unknown command opcode
kErrCrc
///< CRC on Payload is incorrect
kErrUnknownCommand
///< Unknown command opcode
};
enum
OperationState
...
...
@@ -166,7 +165,6 @@ protected:
void
_sendTerminateCommand
(
void
);
void
_closeReadSession
(
bool
success
);
static
quint32
crc32
(
Request
*
request
,
unsigned
state
=
0
);
static
QString
errorString
(
uint8_t
errorCode
);
OperationState
_currentOperation
;
///< Current operation of state machine
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment