#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 } */ }