Marlin 2.0 for Flying Bear 4S/5
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

86 lines
2.4 KiB

#include "mks_wifi_sd.h"
#include "../../libs/fatfs/ff.h"
FRESULT result;
FATFS FATFS_Obj;
FIL upload_file;
// DIR dir;
// UINT i;
void mks_wifi_sd_init(void){
CardReader::release();
result = f_mount((FATFS *)&FATFS_Obj, "0", 1);
DEBUG("SD init %d",result);
/*
result = f_opendir(&dir, "0:");
if (result == FR_OK) {
for (;;) {
result = f_readdir(&dir, &fno);
if (result != FR_OK || fno.fname[0] == 0) break;
DEBUG("%s", fno.fname);
}
f_closedir(&dir);
}else{
DEBUG("Open dir error %d",result);
}
*/
}
void mks_wifi_sd_deinit(void){
f_mount(0, "", 0);
CardReader::mount();
};
void sd_delete_file(char *filename){
mks_wifi_sd_init();
DEBUG("Remove %s",filename);
f_unlink(filename);
mks_wifi_sd_deinit();
}
void mks_wifi_start_file_upload(ESP_PROTOC_FRAME *packet){
char str[100];
uint32_t file_size;
//Установить имя файла. Смещение на 3 байта, чтобы добавить путь к диску
str[0]='0';
str[1]=':';
str[2]='/';
memcpy((uint8_t *)str+3,(uint8_t *)&packet->data[5],(packet->dataLen - 5));
str[packet->dataLen - 5 + 3] = 0;
//Установить размер файла
file_size=(packet->data[4] << 24) | (packet->data[3] << 16) | (packet->data[2] << 8) | packet->data[1];
DEBUG("Start file %s size %d",str,file_size);
//Отмонтировать SD от Marlin, Монтировать FATFs
mks_wifi_sd_init();
//открыть файл для записи
f_open((FIL *)&upload_file,str,FA_CREATE_ALWAYS | FA_WRITE);
//Выключить прием по UART RX, включить через DMA, изменить скорость
//Выставить флаг приема по DMA
/*
В бесконечном цикле ждем флага приема от DMA{
Если флаг есть => {
//переключить буфер, запустить прием дальше
//передать пакет в функцию парсера и сохранения
}
Парсер пакета, сохранение{
}
Проверка тайм-аута. Если долго нет данных,
значит все кончилось => остановить DMA, переключить UART
}
*/
}