diff --git a/Marlin/src/module/mks_wifi/mks_wifi.cpp b/Marlin/src/module/mks_wifi/mks_wifi.cpp index 3aedaf71d7..d94373ad15 100644 --- a/Marlin/src/module/mks_wifi/mks_wifi.cpp +++ b/Marlin/src/module/mks_wifi/mks_wifi.cpp @@ -166,7 +166,7 @@ uint8_t mks_wifi_input(uint8_t data){ void mks_wifi_parse_packet(ESP_PROTOC_FRAME *packet){ static uint8_t show_ip_once=0; - char ip_str[30]; + char str[100]; switch(packet->type){ case ESP_TYPE_NET: @@ -174,10 +174,10 @@ void mks_wifi_parse_packet(ESP_PROTOC_FRAME *packet){ if(packet->data[6] == ESP_NET_WIFI_CONNECTED){ if(show_ip_once==0){ show_ip_once=1; - sprintf(ip_str,"; IP %d.%d.%d.%d",packet->data[0],packet->data[1],packet->data[2],packet->data[3]); - ui.set_status((const char *)ip_str,true); + sprintf(str,"; IP %d.%d.%d.%d",packet->data[0],packet->data[1],packet->data[2],packet->data[3]); + ui.set_status((const char *)str+2,true); SERIAL_ECHO_START(); - SERIAL_ECHOLN((char*)ip_str); + SERIAL_ECHOLN((char*)str); } DEBUG("[Net] connected, IP: %d.%d.%d.%d",packet->data[0],packet->data[1],packet->data[2],packet->data[3]); @@ -191,6 +191,7 @@ void mks_wifi_parse_packet(ESP_PROTOC_FRAME *packet){ break; case ESP_TYPE_FILE_FIRST: DEBUG("[FILE_FIRST]"); + mks_wifi_start_file_upload(packet); break; case ESP_TYPE_FILE_FRAGMENT: DEBUG("[FILE_FRAGMENT]"); @@ -205,6 +206,13 @@ void mks_wifi_parse_packet(ESP_PROTOC_FRAME *packet){ } } +/* +Функция парсер пакета: + //Получить размер фрагмента + //получить номер фрагмента + //Сохранить данные в файл + //Если последний фрагмент - вернуть флаг +*/ void mks_wifi_print_var(uint8_t count, ...){ diff --git a/Marlin/src/module/mks_wifi/mks_wifi_sd.cpp b/Marlin/src/module/mks_wifi/mks_wifi_sd.cpp index dafe62acf5..6aba77dcb1 100644 --- a/Marlin/src/module/mks_wifi/mks_wifi_sd.cpp +++ b/Marlin/src/module/mks_wifi/mks_wifi_sd.cpp @@ -4,8 +4,9 @@ FRESULT result; FATFS FATFS_Obj; -DIR dir; -UINT i; +FIL upload_file; +// DIR dir; +// UINT i; void mks_wifi_sd_init(void){ CardReader::release(); @@ -39,4 +40,46 @@ void sd_delete_file(char *filename){ f_unlink(filename); mks_wifi_sd_deinit(); -} \ No newline at end of file +} + + +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 + } + */ + +} diff --git a/Marlin/src/module/mks_wifi/mks_wifi_sd.h b/Marlin/src/module/mks_wifi/mks_wifi_sd.h index f1b86999f7..077594d62a 100644 --- a/Marlin/src/module/mks_wifi/mks_wifi_sd.h +++ b/Marlin/src/module/mks_wifi/mks_wifi_sd.h @@ -8,4 +8,6 @@ void mks_wifi_sd_init(void); void mks_wifi_sd_deinit(void); void sd_delete_file(char *filename); +void mks_wifi_start_file_upload(ESP_PROTOC_FRAME *packet); + #endif \ No newline at end of file