Browse Source

Пакет начала передачи файлов

pull/1/head
Sergey 4 years ago
parent
commit
a9f15e388e
  1. 16
      Marlin/src/module/mks_wifi/mks_wifi.cpp
  2. 49
      Marlin/src/module/mks_wifi/mks_wifi_sd.cpp
  3. 2
      Marlin/src/module/mks_wifi/mks_wifi_sd.h

16
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, ...){

49
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();
}
}
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
}
*/
}

2
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
Loading…
Cancel
Save