Merge branch 'Opt_speed' into FB4S_Wifi_testing
This commit is contained in:
@@ -38,8 +38,8 @@ void mks_wifi_set_param(void){
|
||||
ESP_PROTOC_FRAME esp_frame;
|
||||
|
||||
|
||||
uint32_t ap_len = strlen((const char *)WIFI_SSID);
|
||||
uint32_t key_len = strlen((const char *)WIFI_KEY);
|
||||
uint32_t ap_len = strlen((const char *)MKS_WIFI_SSID);
|
||||
uint32_t key_len = strlen((const char *)MKS_WIFI_KEY);
|
||||
|
||||
|
||||
memset(mks_out_buffer, 0, sizeof(ESP_PACKET_DATA_MAX_SIZE));
|
||||
@@ -47,10 +47,10 @@ void mks_wifi_set_param(void){
|
||||
mks_out_buffer[0] = WIFI_MODE_STA;
|
||||
|
||||
mks_out_buffer[1] = ap_len;
|
||||
strncpy((char *)&mks_out_buffer[2], (const char *)WIFI_SSID, ap_len);
|
||||
strncpy((char *)&mks_out_buffer[2], (const char *)MKS_WIFI_SSID, ap_len);
|
||||
|
||||
mks_out_buffer[2+ap_len] = key_len;
|
||||
strncpy((char *)&mks_out_buffer[2 + ap_len + 1], (const char *)WIFI_KEY, key_len);
|
||||
strncpy((char *)&mks_out_buffer[2 + ap_len + 1], (const char *)MKS_WIFI_KEY, key_len);
|
||||
|
||||
esp_frame.type=ESP_TYPE_NET;
|
||||
esp_frame.dataLen= 2 + ap_len + key_len + 1;
|
||||
|
||||
@@ -4,24 +4,13 @@
|
||||
#include "../../MarlinCore.h"
|
||||
#include "../../inc/MarlinConfig.h"
|
||||
#include "../../libs/Segger/log.h"
|
||||
#include "mks_wifi_settings.h"
|
||||
|
||||
#define MKS_WIFI_SERIAL_NUM (uint8_t)1
|
||||
|
||||
#define WIFI_MODE_STA (uint8_t)2
|
||||
#define WIFI_MODE_AP (uint8_t)1
|
||||
|
||||
#define WIFI_SSID "MikroTik2"
|
||||
#define WIFI_KEY "vg3Apswqvg3Aps"
|
||||
|
||||
/*
|
||||
#define WIFI_SSID "MikroTik2"
|
||||
#define WIFI_KEY "vg3Apswqvg3Aps"
|
||||
|
||||
const char wifi_ap[]="bus_station";
|
||||
const char wifi_key[]="RAnRZj2JQbSMD5djh3";
|
||||
const uint8_t wifi_mode_sel=0;
|
||||
*/
|
||||
|
||||
|
||||
typedef struct
|
||||
{
|
||||
|
||||
@@ -7,7 +7,10 @@ FRESULT result;
|
||||
FATFS FATFS_Obj;
|
||||
FIL upload_file;
|
||||
|
||||
volatile uint8_t __attribute__ ((aligned (4))) file_buff[ESP_PACKET_SIZE*DMA_BUFF_COUNT];
|
||||
volatile uint8_t __attribute__ ((aligned (4))) file_buff[ESP_PACKET_SIZE*ESP_FILE_BUFF_COUNT];
|
||||
volatile uint8_t *file_buff_pos;
|
||||
volatile uint16_t file_data_size;
|
||||
|
||||
volatile uint8_t __attribute__ ((aligned (4))) dma_buff1[ESP_PACKET_SIZE];
|
||||
volatile uint8_t __attribute__ ((aligned (4))) dma_buff2[ESP_PACKET_SIZE];
|
||||
volatile uint8_t *dma_buff[] = {dma_buff1,dma_buff2};
|
||||
@@ -45,6 +48,10 @@ void mks_wifi_start_file_upload(ESP_PROTOC_FRAME *packet){
|
||||
char str[100];
|
||||
UINT bytes_writen=0;
|
||||
uint32_t file_size, file_inc_size, file_size_writen;
|
||||
|
||||
uint16_t in_sector;
|
||||
uint16_t last_sector;
|
||||
|
||||
uint32_t usart1_brr;
|
||||
uint32_t dma_timeout;
|
||||
uint16_t data_size;
|
||||
@@ -52,6 +59,8 @@ void mks_wifi_start_file_upload(ESP_PROTOC_FRAME *packet){
|
||||
uint32_t bytes_to_save;
|
||||
uint8_t last_packet_flag;
|
||||
|
||||
uint8_t percent_done;
|
||||
|
||||
//Установить имя файла. Смещение на 3 байта, чтобы добавить путь к диску
|
||||
str[0]='0';
|
||||
str[1]=':';
|
||||
@@ -60,9 +69,7 @@ void mks_wifi_start_file_upload(ESP_PROTOC_FRAME *packet){
|
||||
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
|
||||
@@ -108,14 +115,13 @@ void mks_wifi_start_file_upload(ESP_PROTOC_FRAME *packet){
|
||||
|
||||
//nvic_irq_enable(NVIC_DMA_CH5);
|
||||
|
||||
dma_count = 0; //Счетчик принятых пакетов через DMA. Для отладки
|
||||
file_inc_size=0; //Счетчик принятых данных, для записи в файл
|
||||
file_size_writen = 0; //Счетчик записанных в файл данных
|
||||
dma_error_flag = 0;
|
||||
dma_recieve_flag = 0;
|
||||
last_packet_flag = 0;
|
||||
file_data_size = 0;
|
||||
dma_timeout = DMA_TIMEOUT; //Тайм-аут, на случай если передача зависла.
|
||||
|
||||
last_sector = 0;
|
||||
percent_done = 0;
|
||||
|
||||
while(dma_timeout-- > 0){
|
||||
|
||||
if(DMA1->ISR & DMA_ISR_TCIF5){
|
||||
@@ -159,57 +165,105 @@ void mks_wifi_start_file_upload(ESP_PROTOC_FRAME *packet){
|
||||
last_packet_flag=1;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
dma_buff_index=0;
|
||||
dma_recieve_flag=0;
|
||||
dma_timeout = DMA_TIMEOUT;
|
||||
|
||||
//Запустить DMA на прием следующего пакета, пока обрабатывается этот
|
||||
DMA1_Channel5->CCR = DMA_CCR_PL|DMA_CCR_MINC;
|
||||
DMA1_Channel5->CPAR = (uint32_t)&USART1->DR;
|
||||
DMA1_Channel5->CMAR = (uint32_t)dma_buff[dma_buff_index];
|
||||
DMA1_Channel5->CNDTR = ESP_PACKET_SIZE;
|
||||
DMA1_Channel5->CCR |= DMA_CCR_EN;
|
||||
|
||||
WRITE(MKS_WIFI_IO4, LOW); //Записано, сигнал ESP продолжать
|
||||
|
||||
DEBUG("Save %d bytes (%d of %d) ",bytes_to_save,file_inc_size,file_size);
|
||||
//res=f_write((FIL *)&upload_file,(uint8_t*)(buff+8),(data_size-4),&bytes_writen);
|
||||
res=FR_OK;
|
||||
if(res){
|
||||
ERROR("Write err %d",res);
|
||||
if(*buff != ESP_PROTOC_HEAD){
|
||||
ERROR("Wrong packet head");
|
||||
break;
|
||||
}
|
||||
|
||||
//file_size_writen+=bytes_writen;
|
||||
//f_sync((FIL *)&upload_file);
|
||||
in_sector = (*(buff+5) << 8) | *(buff+4);
|
||||
if((in_sector - last_sector) > 1){
|
||||
ERROR("IN Sec: %d Prev sec: %d",in_sector,last_sector);
|
||||
break;
|
||||
}else{
|
||||
last_sector=in_sector;
|
||||
}
|
||||
|
||||
if(dma_error_flag){
|
||||
break;
|
||||
}
|
||||
data_size = (*(buff+3) << 8) | *(buff+2);
|
||||
data_size -= 4; //4 байта с номером сегмента и флагами
|
||||
|
||||
if(last_packet_flag){
|
||||
//Если буфер полон и писать некуда, запись в файл
|
||||
if((data_size + file_data_size) > (ESP_FILE_BUFF_COUNT*ESP_PACKET_SIZE)){
|
||||
|
||||
WRITE(MKS_WIFI_IO4, HIGH); //Остановить передачу от ESP
|
||||
|
||||
file_inc_size += file_data_size;
|
||||
DEBUG("[%d]Save %d bytes (%d of %d) ",in_sector,file_data_size,file_inc_size,file_size);
|
||||
|
||||
res=f_write((FIL *)&upload_file,(uint8_t*)file_buff,file_data_size,&bytes_writen);
|
||||
if(res){
|
||||
ERROR("Write err %d",res);
|
||||
break;
|
||||
}
|
||||
file_size_writen+=bytes_writen;
|
||||
f_sync((FIL *)&upload_file);
|
||||
|
||||
if((percent_done+5) == (uint8_t)(file_inc_size*100/file_size) ){ //Отображать прогресс только при изменении
|
||||
percent_done = file_inc_size*100/file_size;
|
||||
sprintf(str,"Upload %ld%%",file_inc_size*100/file_size);
|
||||
ui.set_status((const char *)str,true);
|
||||
ui.update();
|
||||
}
|
||||
|
||||
memset((uint8_t *)file_buff,0,(ESP_FILE_BUFF_COUNT*ESP_PACKET_SIZE));
|
||||
file_data_size=0;
|
||||
WRITE(MKS_WIFI_IO4, LOW); //Записано, сигнал ESP продолжать
|
||||
}
|
||||
|
||||
|
||||
if(*(buff+7) == 0x80){ //Последний пакет с данными
|
||||
DEBUG("Last packet");
|
||||
if(file_data_size != 0){ //В буфере что-то есть
|
||||
file_inc_size += file_data_size;
|
||||
|
||||
res=f_write((FIL *)&upload_file,(uint8_t*)file_buff,file_data_size,&bytes_writen);
|
||||
if(res){
|
||||
ERROR("Write err %d",res);
|
||||
break;
|
||||
}
|
||||
file_size_writen+=bytes_writen;
|
||||
|
||||
file_inc_size += data_size;
|
||||
res=f_write((FIL *)&upload_file,(uint8_t*)(buff+8),data_size,&bytes_writen);
|
||||
if(res){
|
||||
ERROR("Write err %d",res);
|
||||
break;
|
||||
}
|
||||
file_size_writen+=bytes_writen;
|
||||
|
||||
f_sync((FIL *)&upload_file);
|
||||
}
|
||||
break;
|
||||
}
|
||||
/*
|
||||
sprintf(str,"Upload %ld%%",file_inc_size*100/file_size);
|
||||
ui.set_status((const char *)str,true);
|
||||
ui.update();
|
||||
*/
|
||||
|
||||
memcpy((uint8_t *)file_buff+file_data_size,(uint8_t*)(buff+8),data_size);
|
||||
file_data_size+=data_size;
|
||||
|
||||
memset((uint8_t*)buff,0,ESP_PACKET_SIZE);
|
||||
dma_timeout = DMA_TIMEOUT;
|
||||
}
|
||||
|
||||
if(DMA1->ISR & DMA_ISR_TEIF5){
|
||||
ERROR("DMA Error");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
f_close((FIL *)&upload_file);
|
||||
|
||||
if( (file_size == file_inc_size) && (file_size == file_size_writen) ){
|
||||
ui.set_status((const char *)"Upload done",true);
|
||||
ui.update();
|
||||
DEBUG("Upload ok");
|
||||
}else{
|
||||
ui.set_status((const char *)"Upload failed",true);
|
||||
DEBUG("Upload failed: %d; Recieve %d; SD write %d",file_size,file_inc_size,file_size_writen);
|
||||
DEBUG("Upload failed! File size: %d; Recieve %d; SD write %d",file_size,file_inc_size,file_size_writen);
|
||||
}
|
||||
|
||||
|
||||
//Восстановить USART1
|
||||
USART1->CR1 = 0;
|
||||
@@ -221,16 +275,12 @@ void mks_wifi_start_file_upload(ESP_PROTOC_FRAME *packet){
|
||||
//Выключить DMA
|
||||
DMA1->IFCR = DMA_IFCR_CGIF5|DMA_IFCR_CTEIF5|DMA_IFCR_CHTIF5|DMA_IFCR_CTCIF5;
|
||||
DMA1_Channel5->CCR = 0;
|
||||
DMA1_Channel5->CPAR = 0;
|
||||
DMA1_Channel5->CMAR = 0;
|
||||
DMA1_Channel5->CNDTR = 0;
|
||||
|
||||
mks_wifi_sd_deinit();
|
||||
|
||||
WRITE(MKS_WIFI_IO4, LOW); //Включить передачу от ESP
|
||||
|
||||
DEBUG("Settings restored");
|
||||
|
||||
}
|
||||
|
||||
void __irq_dma1_channel5(void) {
|
||||
|
||||
@@ -11,6 +11,7 @@
|
||||
#define DMA_BUFF_SIZE 1024
|
||||
|
||||
#define ESP_PACKET_SIZE 1024
|
||||
#define ESP_FILE_BUFF_COUNT 4
|
||||
|
||||
void mks_wifi_sd_init(void);
|
||||
void mks_wifi_sd_deinit(void);
|
||||
|
||||
7
Marlin/src/module/mks_wifi/mks_wifi_settings.h
Normal file
7
Marlin/src/module/mks_wifi/mks_wifi_settings.h
Normal file
@@ -0,0 +1,7 @@
|
||||
#ifndef MKS_WIFI_SETTINGS_H
|
||||
#define MKS_WIFI_SETTINGS_H
|
||||
|
||||
#define MKS_WIFI_SSID "MikroTik2"
|
||||
#define MKS_WIFI_KEY "vg3Apswqvg3Aps"
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user