Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit7c2f91c

Browse files
committed
feat: resume upload
1 parentf13e94b commit7c2f91c

File tree

3 files changed

+41
-5
lines changed

3 files changed

+41
-5
lines changed

‎library.json‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name":"OFM-FileTransferModule",
3-
"version":"0.0.4",
3+
"version":"0.1.0",
44
"dependencies":
55
{
66
"frankboesing/FastCRC":"^1.41"

‎src/FileTransferModule.cpp‎

Lines changed: 39 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,8 @@ enum class FtmCommands
5757
DirDelete,
5858
Cancel =90,
5959
ModuleVersion =100,
60-
FwUpdate
60+
FwUpdate,
61+
CheckFeatures
6162
};
6263

6364
boolFileTransferModule::checkOpenFile(uint8_t *resultData,uint8_t &resultLength)
@@ -144,7 +145,8 @@ void FileTransferModule::writeFile(uint16_t sequence, uint8_t *data, uint8_t len
144145

145146
if (_lastSequence +1 != sequence)
146147
{
147-
if (!_file.seek((sequence -1) * (_size -3)))
148+
uint16_t pos = ((sequence -1) * (_size -3));
149+
if (!_file.seek(pos))
148150
{
149151
pushByte(0x46, resultData);
150152
resultLength =1;
@@ -262,6 +264,12 @@ bool FileTransferModule::processFunctionProperty(uint8_t objectIndex, uint8_t pr
262264
returntrue;
263265
}
264266

267+
case FtmCommands::CheckFeatures:
268+
{
269+
cmdCheckFeatures(length, data, resultData, resultLength);
270+
returntrue;
271+
}
272+
265273
case FtmCommands::FwUpdate:
266274
{
267275
cmdFwUpdate(length, data, resultData, resultLength);
@@ -497,13 +505,29 @@ void FileTransferModule::cmdFileUpload(uint8_t length, uint8_t *data, uint8_t *r
497505

498506
if (data[0] ==0x00 && data[1] ==0x00)
499507
{
500-
constchar *filename = (constchar *)(data +3);
508+
constchar *filename = (constchar *)(data +4);
501509
if (checkOpenFile(resultData, resultLength) ||checkOpenDir(resultData, resultLength))return;
502510

511+
if(data[3] >1)
512+
{
513+
pushByte(0x42, resultData);
514+
logErrorP("Start file upload to\"%s\" is failed", filename);
515+
return;
516+
}
517+
503518
_size = data[2];
504519
resultLength =1;
505520

506-
_file = LittleFS.open(filename,"w");
521+
// TODO maybe add a byte to truncate the file if it is not the same
522+
bool isResume = data[3] ==0x01;
523+
if(isResume)
524+
{
525+
logInfoP("Resume file upload");
526+
}else {
527+
logInfoP("Truncate file upload");
528+
}
529+
530+
_file = LittleFS.open(filename, isResume ?"r+" :"w");
507531
if (!_file)
508532
{
509533
pushByte(0x42, resultData);
@@ -582,5 +606,16 @@ void FileTransferModule::cmdFileDownload(uint8_t length, uint8_t *data, uint8_t
582606
_lastSequence = sequence;
583607
}
584608

609+
voidFileTransferModule::cmdCheckFeatures(uint8_t length,uint8_t *data,uint8_t *resultData,uint8_t &resultLength)
610+
{
611+
uint8_t result =0;
612+
result |=0x1;// Resume
613+
#ifdef ARDUINO_ARCH_RP2040
614+
result |=0x2;// Update
615+
#endif
616+
resultData[0] = result;
617+
resultLength =1;
618+
}
619+
585620
FileTransferModule openknxFileTransferModule;
586621
#endif

‎src/FileTransferModule.h‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ class FileTransferModule : public OpenKNX::Module
4747
voidcmdFileDelete(uint8_t length,uint8_t *data,uint8_t *resultData,uint8_t &resultLength);
4848
voidcmdFileUpload(uint8_t length,uint8_t *data,uint8_t *resultData,uint8_t &resultLength);
4949
voidcmdFileDownload(uint8_t length,uint8_t *data,uint8_t *resultData,uint8_t &resultLength);
50+
voidcmdCheckFeatures(uint8_t length,uint8_t *data,uint8_t *resultData,uint8_t &resultLength);
5051
};
5152

5253
extern FileTransferModule openknxFileTransferModule;

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp