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
3a98d384
Commit
3a98d384
authored
Sep 10, 2014
by
Don Gagne
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #865 from vooon/ftp_opcode
FTP request opcode
parents
fbea1b6b
5b6be614
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
5 additions
and
95 deletions
+5
-95
MockMavlinkFileServer.cc
src/qgcunittest/MockMavlinkFileServer.cc
+0
-14
MockMavlinkFileServer.h
src/qgcunittest/MockMavlinkFileServer.h
+0
-1
QGCUASFileManager.cc
src/uas/QGCUASFileManager.cc
+1
-74
QGCUASFileManager.h
src/uas/QGCUASFileManager.h
+4
-6
No files found.
src/qgcunittest/MockMavlinkFileServer.cc
View file @
3a98d384
...
@@ -28,7 +28,6 @@ const MockMavlinkFileServer::ErrorMode_t MockMavlinkFileServer::rgFailureModes[]
...
@@ -28,7 +28,6 @@ const MockMavlinkFileServer::ErrorMode_t MockMavlinkFileServer::rgFailureModes[]
MockMavlinkFileServer
::
errModeNakResponse
,
MockMavlinkFileServer
::
errModeNakResponse
,
MockMavlinkFileServer
::
errModeNoSecondResponse
,
MockMavlinkFileServer
::
errModeNoSecondResponse
,
MockMavlinkFileServer
::
errModeNakSecondResponse
,
MockMavlinkFileServer
::
errModeNakSecondResponse
,
MockMavlinkFileServer
::
errModeBadCRC
,
MockMavlinkFileServer
::
errModeBadSequence
,
MockMavlinkFileServer
::
errModeBadSequence
,
};
};
const
size_t
MockMavlinkFileServer
::
cFailureModes
=
sizeof
(
MockMavlinkFileServer
::
rgFailureModes
)
/
sizeof
(
MockMavlinkFileServer
::
rgFailureModes
[
0
]);
const
size_t
MockMavlinkFileServer
::
cFailureModes
=
sizeof
(
MockMavlinkFileServer
::
rgFailureModes
)
/
sizeof
(
MockMavlinkFileServer
::
rgFailureModes
[
0
]);
...
@@ -233,12 +232,6 @@ void MockMavlinkFileServer::sendMessage(mavlink_message_t message)
...
@@ -233,12 +232,6 @@ void MockMavlinkFileServer::sendMessage(mavlink_message_t message)
return
;
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
)
{
switch
(
request
->
hdr
.
opcode
)
{
case
QGCUASFileManager
:
:
kCmdTestNoAck
:
case
QGCUASFileManager
:
:
kCmdTestNoAck
:
// ignored, ack not sent back, for testing only
// ignored, ack not sent back, for testing only
...
@@ -252,7 +245,6 @@ void MockMavlinkFileServer::sendMessage(mavlink_message_t message)
...
@@ -252,7 +245,6 @@ void MockMavlinkFileServer::sendMessage(mavlink_message_t message)
// ignored, always acked
// ignored, always acked
ackResponse
.
hdr
.
opcode
=
QGCUASFileManager
::
kRspAck
;
ackResponse
.
hdr
.
opcode
=
QGCUASFileManager
::
kRspAck
;
ackResponse
.
hdr
.
session
=
0
;
ackResponse
.
hdr
.
session
=
0
;
ackResponse
.
hdr
.
crc32
=
0
;
ackResponse
.
hdr
.
size
=
0
;
ackResponse
.
hdr
.
size
=
0
;
_emitResponse
(
&
ackResponse
,
outgoingSeqNumber
);
_emitResponse
(
&
ackResponse
,
outgoingSeqNumber
);
break
;
break
;
...
@@ -312,12 +304,6 @@ void MockMavlinkFileServer::_emitResponse(QGCUASFileManager::Request* request, u
...
@@ -312,12 +304,6 @@ void MockMavlinkFileServer::_emitResponse(QGCUASFileManager::Request* request, u
request
->
hdr
.
seqNumber
=
seqNumber
;
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
mavlink_msg_file_transfer_protocol_pack
(
_systemIdServer
,
// System ID
0
,
// Component ID
0
,
// Component ID
&
mavlinkMessage
,
// Mavlink Message to pack into
&
mavlinkMessage
,
// Mavlink Message to pack into
...
...
src/qgcunittest/MockMavlinkFileServer.h
View file @
3a98d384
...
@@ -56,7 +56,6 @@ public:
...
@@ -56,7 +56,6 @@ public:
errModeNakResponse
,
///< Nak all requests
errModeNakResponse
,
///< Nak all requests
errModeNoSecondResponse
,
///< No response to subsequent request to initial command
errModeNoSecondResponse
,
///< No response to subsequent request to initial command
errModeNakSecondResponse
,
///< Nak 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
errModeBadSequence
///< Return response with bad sequence number
}
ErrorMode_t
;
}
ErrorMode_t
;
...
...
src/uas/QGCUASFileManager.cc
View file @
3a98d384
...
@@ -30,42 +30,6 @@
...
@@ -30,42 +30,6 @@
#include <QDir>
#include <QDir>
#include <string>
#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
)
:
QGCUASFileManager
::
QGCUASFileManager
(
QObject
*
parent
,
UASInterface
*
uas
,
uint8_t
unitTestSystemIdQGC
)
:
QObject
(
parent
),
QObject
(
parent
),
...
@@ -80,31 +44,7 @@ QGCUASFileManager::QGCUASFileManager(QObject* parent, UASInterface* uas, uint8_t
...
@@ -80,31 +44,7 @@ QGCUASFileManager::QGCUASFileManager(QObject* parent, UASInterface* uas, uint8_t
_systemIdServer
=
_mav
->
getUASID
();
_systemIdServer
=
_mav
->
getUASID
();
// Make sure we don't have bad structure packing
// Make sure we don't have bad structure packing
Q_ASSERT
(
sizeof
(
RequestHeader
)
==
16
);
Q_ASSERT
(
sizeof
(
RequestHeader
)
==
12
);
}
/// @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
;
}
}
/// @brief Respond to the Ack associated with the Open command with the next Read command.
/// @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
...
@@ -281,15 +221,6 @@ void QGCUASFileManager::receiveMessage(LinkInterface* link, mavlink_message_t me
uint16_t
incomingSeqNumber
=
request
->
hdr
.
seqNumber
;
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
// Make sure we have a good sequence number
uint16_t
expectedSeqNumber
=
_lastOutgoingSeqNumber
+
1
;
uint16_t
expectedSeqNumber
=
_lastOutgoingSeqNumber
+
1
;
if
(
incomingSeqNumber
!=
expectedSeqNumber
)
{
if
(
incomingSeqNumber
!=
expectedSeqNumber
)
{
...
@@ -441,8 +372,6 @@ QString QGCUASFileManager::errorString(uint8_t errorCode)
...
@@ -441,8 +372,6 @@ QString QGCUASFileManager::errorString(uint8_t errorCode)
return
QString
(
"read beyond end of file"
);
return
QString
(
"read beyond end of file"
);
case
kErrUnknownCommand
:
case
kErrUnknownCommand
:
return
QString
(
"unknown command"
);
return
QString
(
"unknown command"
);
case
kErrCrc
:
return
QString
(
"bad crc"
);
case
kErrFailErrno
:
case
kErrFailErrno
:
return
QString
(
"command failed"
);
return
QString
(
"command failed"
);
case
kErrInvalidDataSize
:
case
kErrInvalidDataSize
:
...
@@ -547,8 +476,6 @@ void QGCUASFileManager::_sendRequest(Request* request)
...
@@ -547,8 +476,6 @@ void QGCUASFileManager::_sendRequest(Request* request)
request
->
hdr
.
seqNumber
=
_lastOutgoingSeqNumber
;
request
->
hdr
.
seqNumber
=
_lastOutgoingSeqNumber
;
request
->
hdr
.
crc32
=
crc32
(
request
);
if
(
_systemIdQGC
==
0
)
{
if
(
_systemIdQGC
==
0
)
{
_systemIdQGC
=
MainWindow
::
instance
()
->
getMAVLink
()
->
getSystemId
();
_systemIdQGC
=
MainWindow
::
instance
()
->
getMAVLink
()
->
getSystemId
();
}
}
...
...
src/uas/QGCUASFileManager.h
View file @
3a98d384
...
@@ -83,8 +83,8 @@ protected:
...
@@ -83,8 +83,8 @@ protected:
uint8_t
session
;
///< Session id for read and write commands
uint8_t
session
;
///< Session id for read and write commands
uint8_t
opcode
;
///< Command opcode
uint8_t
opcode
;
///< Command opcode
uint8_t
size
;
///< Size of data
uint8_t
size
;
///< Size of data
uint8_t
padding
[
3
];
uint8_t
req_opcode
;
///< Request opcode returned in kRspAck, kRspNak message
uint
32_t
crc32
;
///< CRC for entire Request structure, with crc32 and padding set to 0
uint
8_t
padding
[
2
];
///< 32 bit aligment padding
uint32_t
offset
;
///< Offsets for List and Read commands
uint32_t
offset
;
///< Offsets for List and Read commands
};
};
...
@@ -117,7 +117,7 @@ protected:
...
@@ -117,7 +117,7 @@ protected:
kCmdCreateDirectory
,
///< Creates directory at <path>
kCmdCreateDirectory
,
///< Creates directory at <path>
kCmdRemoveDirectory
,
///< Removes Directory at <path>, must be empty
kCmdRemoveDirectory
,
///< Removes Directory at <path>, must be empty
kRspAck
,
///< Ack response
kRspAck
=
128
,
///< Ack response
kRspNak
,
///< Nak response
kRspNak
,
///< Nak response
// Used for testing only, not part of protocol
// Used for testing only, not part of protocol
...
@@ -134,8 +134,7 @@ protected:
...
@@ -134,8 +134,7 @@ protected:
kErrInvalidSession
,
///< Session is not currently open
kErrInvalidSession
,
///< Session is not currently open
kErrNoSessionsAvailable
,
///< All available Sessions in use
kErrNoSessionsAvailable
,
///< All available Sessions in use
kErrEOF
,
///< Offset past end of file for List and Read commands
kErrEOF
,
///< Offset past end of file for List and Read commands
kErrUnknownCommand
,
///< Unknown command opcode
kErrUnknownCommand
///< Unknown command opcode
kErrCrc
///< CRC on Payload is incorrect
};
};
enum
OperationState
enum
OperationState
...
@@ -166,7 +165,6 @@ protected:
...
@@ -166,7 +165,6 @@ protected:
void
_sendTerminateCommand
(
void
);
void
_sendTerminateCommand
(
void
);
void
_closeReadSession
(
bool
success
);
void
_closeReadSession
(
bool
success
);
static
quint32
crc32
(
Request
*
request
,
unsigned
state
=
0
);
static
QString
errorString
(
uint8_t
errorCode
);
static
QString
errorString
(
uint8_t
errorCode
);
OperationState
_currentOperation
;
///< Current operation of state machine
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