zwischenstand

This commit is contained in:
2026-03-21 13:49:05 +01:00
parent b863b04505
commit 01448223ad
30 changed files with 1446 additions and 295 deletions

View File

@@ -514,8 +514,8 @@ static void fs_thread_entry(void *p1, void *p2, void *p3)
LOG_WRN("Write timeout! Aborting transfer.");
if (write_ctx.state == FS_STATE_RECEIVING_FILE)
{
// fs_mgmt_pm_close(&write_ctx.file);
// fs_mgmt_pm_unlink(write_ctx.filename);
fs_mgmt_pm_close(&write_ctx.file);
fs_mgmt_pm_unlink(write_ctx.filename);
}
write_ctx.state = FS_STATE_IDLE;
continue;
@@ -536,8 +536,8 @@ static void fs_thread_entry(void *p1, void *p2, void *p3)
memcpy(write_ctx.filename, msg.slab_ptr + msg.data_offset, msg.data_len);
write_ctx.filename[msg.data_len] = '\0';
// fs_mgmt_pm_unlink(write_ctx.filename);
// rc = fs_mgmt_pm_open(&write_ctx.file, write_ctx.filename, FS_O_CREATE | FS_O_WRITE);
fs_mgmt_pm_unlink(write_ctx.filename);
rc = fs_mgmt_pm_open(&write_ctx.file, write_ctx.filename, FS_O_CREATE | FS_O_WRITE);
if (rc == 0)
{
@@ -568,7 +568,7 @@ static void fs_thread_entry(void *p1, void *p2, void *p3)
write_ctx.filename[msg.data_len] = '\0';
/* Datei öffnen: Nur Lese- und Schreibrechte, Datei muss bereits existieren */
// int rc = fs_mgmt_pm_open(&write_ctx.file, write_ctx.filename, FS_O_READ | FS_O_WRITE);
int rc = fs_mgmt_pm_open(&write_ctx.file, write_ctx.filename, FS_O_READ | FS_O_WRITE);
if (rc == 0)
{
@@ -583,7 +583,7 @@ static void fs_thread_entry(void *p1, void *p2, void *p3)
}
/* Datei ab dem Ende der Audiodaten abschneiden (alte Tags entfernen) */
// rc = fs_truncate(&write_ctx.file, audio_len);
rc = fs_truncate(&write_ctx.file, audio_len);
if (rc != 0)
{
LOG_ERR("Failed to truncate file: %d", rc);
@@ -593,7 +593,7 @@ static void fs_thread_entry(void *p1, void *p2, void *p3)
}
/* File-Pointer exakt an das neue Ende (audio_len) setzen */
// fs_seek(&write_ctx.file, audio_len, FS_SEEK_SET);
fs_seek(&write_ctx.file, audio_len, FS_SEEK_SET);
write_ctx.state = FS_STATE_RECEIVING_TAGS;
write_ctx.crc32 = 0;
@@ -622,8 +622,7 @@ static void fs_thread_entry(void *p1, void *p2, void *p3)
case FS_STATE_RECEIVING_FILE:
if (msg.op == FS_WRITE_OP_FILE_CHUNK && msg.slab_ptr)
{
// ssize_t written = fs_write(&write_ctx.file, msg.slab_ptr + msg.data_offset, msg.data_len);
ssize_t written = msg.data_len; /* Zum Testen, da wir ja kein echtes FS-Backend haben */
ssize_t written = fs_write(&write_ctx.file, msg.slab_ptr + msg.data_offset, msg.data_len);
if (written == msg.data_len)
{
write_ctx.crc32 = crc32_ieee_update(write_ctx.crc32, msg.slab_ptr + msg.data_offset, msg.data_len);
@@ -649,7 +648,7 @@ static void fs_thread_entry(void *p1, void *p2, void *p3)
}
else if (msg.op == FS_WRITE_OP_FILE_END)
{
// fs_mgmt_pm_close(&write_ctx.file);
fs_mgmt_pm_close(&write_ctx.file);
write_ctx.state = FS_STATE_IDLE;
if (write_ctx.crc32 == msg.metadata)
@@ -660,14 +659,14 @@ static void fs_thread_entry(void *p1, void *p2, void *p3)
else
{
LOG_ERR("CRC Mismatch! Expected: 0x%08X, Got: 0x%08X", msg.metadata, write_ctx.crc32);
// fs_mgmt_pm_unlink(write_ctx.filename);
fs_mgmt_pm_unlink(write_ctx.filename);
buzz_proto_send_error_reusing_slab(msg.reply_cb, EBADMSG, msg.slab_ptr);
}
}
else if (msg.op == FS_WRITE_OP_ABORT)
{
// fs_mgmt_pm_close(&write_ctx.file);
// fs_mgmt_pm_unlink(write_ctx.filename);
fs_mgmt_pm_close(&write_ctx.file);
fs_mgmt_pm_unlink(write_ctx.filename);
write_ctx.state = FS_STATE_IDLE;
if (msg.slab_ptr)
buzz_proto_buf_free(&msg.slab_ptr);
@@ -677,8 +676,7 @@ static void fs_thread_entry(void *p1, void *p2, void *p3)
case FS_STATE_RECEIVING_TAGS:
if (msg.op == FS_WRITE_OP_FILE_CHUNK && msg.slab_ptr)
{
// ssize_t written = fs_write(&write_ctx.file, msg.slab_ptr + msg.data_offset, msg.data_len);
ssize_t written = msg.data_len; /* Zum Testen, da wir ja kein echtes FS-Backend haben */
ssize_t written = fs_write(&write_ctx.file, msg.slab_ptr + msg.data_offset, msg.data_len);
if (written == msg.data_len)
{
write_ctx.crc32 = crc32_ieee_update(write_ctx.crc32, msg.slab_ptr + msg.data_offset, msg.data_len);
@@ -699,8 +697,8 @@ static void fs_thread_entry(void *p1, void *p2, void *p3)
else
{
LOG_ERR("Flash write failed during tags transfer!");
// fs_truncate(&write_ctx.file, write_ctx.audio_len); /* Rollback */
// fs_mgmt_pm_close(&write_ctx.file);
fs_truncate(&write_ctx.file, write_ctx.audio_len); /* Rollback */
fs_mgmt_pm_close(&write_ctx.file);
write_ctx.state = FS_STATE_IDLE;
buzz_proto_send_error_reusing_slab(msg.reply_cb, EIO, msg.slab_ptr);
}
@@ -716,16 +714,16 @@ static void fs_thread_entry(void *p1, void *p2, void *p3)
else
{
LOG_ERR("Tags CRC Mismatch! Expected: 0x%08X, Got: 0x%08X", msg.metadata, write_ctx.crc32);
// fs_truncate(&write_ctx.file, write_ctx.audio_len); /* Rollback */
// fs_mgmt_pm_close(&write_ctx.file);
fs_truncate(&write_ctx.file, write_ctx.audio_len); /* Rollback */
fs_mgmt_pm_close(&write_ctx.file);
buzz_proto_send_error_reusing_slab(msg.reply_cb, EBADMSG, msg.slab_ptr);
}
write_ctx.state = FS_STATE_IDLE;
}
else if (msg.op == FS_WRITE_OP_ABORT)
{
// fs_truncate(&write_ctx.file, write_ctx.audio_len); /* Rollback */
// fs_mgmt_pm_close(&write_ctx.file);
fs_truncate(&write_ctx.file, write_ctx.audio_len); /* Rollback */
fs_mgmt_pm_close(&write_ctx.file);
write_ctx.state = FS_STATE_IDLE;
if (msg.slab_ptr)
buzz_proto_buf_free(&msg.slab_ptr);