Sergey
5 years ago
8 changed files with 168 additions and 7 deletions
@ -1,15 +1,116 @@ |
|||
#include "mks_wifi.h" |
|||
|
|||
ESP_PROTOC_FRAME esp_frame; |
|||
uint8_t mks_buffer[ESP_PACKET_DATA_MAX_SIZE]; |
|||
|
|||
void mks_wifi_init(void){ |
|||
|
|||
DEBUG("Init MKS WIFI"); |
|||
SET_INPUT_PULLUP(MKS_WIFI_IO0); |
|||
attachInterrupt(MKS_WIFI_IO0, mks_wifi_io0_irq, FALLING); |
|||
} |
|||
SET_OUTPUT(MKS_WIFI_IO_RST); |
|||
WRITE(MKS_WIFI_IO_RST, LOW); |
|||
|
|||
safe_delay(2000); |
|||
WRITE(MKS_WIFI_IO_RST, HIGH); |
|||
|
|||
void mks_wifi_io0_irq(void){ |
|||
// SET_INPUT_PULLUP(MKS_WIFI_IO0);
|
|||
// attachInterrupt(MKS_WIFI_IO0, mks_wifi_io0_irq, FALLING);
|
|||
} |
|||
|
|||
/* Тестовая функция на обработчик EXTI прерывания */ |
|||
void mks_wifi_io0_irq(void){ |
|||
INFO("IO0 Irq"); |
|||
} |
|||
|
|||
/*
|
|||
Принимает по символу из входных данных. |
|||
Сладывает в буфер, формирует пакет. |
|||
Возвращаемые занчения: |
|||
1 - найден признак начала пакета, отдавать байт мардину не надо |
|||
0 - начало пакета не найдено, передать байт дальше марлину |
|||
*/ |
|||
uint8_t mks_wifi_input(uint8_t data){ |
|||
static uint8_t packet_start_flag=0; |
|||
static uint8_t packet_type=0; |
|||
static uint16_t packet_index=0; |
|||
static uint16_t payload_size=ESP_PACKET_DATA_MAX_SIZE; |
|||
uint8_t ret_val=1; |
|||
|
|||
if(data == ESP_PROTOC_HEAD){ |
|||
payload_size = ESP_PACKET_DATA_MAX_SIZE; |
|||
packet_start_flag=1; |
|||
packet_index=0; |
|||
memset(mks_buffer,0,ESP_PACKET_DATA_MAX_SIZE); |
|||
} |
|||
|
|||
if(packet_start_flag){ |
|||
mks_buffer[packet_index]=data; |
|||
} |
|||
|
|||
if(packet_index == 1){ |
|||
packet_type = mks_buffer[1]; |
|||
} |
|||
|
|||
if(packet_index == 3){ |
|||
payload_size = uint16_t(mks_buffer[3] << 8) | mks_buffer[2]; |
|||
} |
|||
|
|||
if( (packet_index >= (payload_size+4)) || (packet_index >= ESP_PACKET_DATA_MAX_SIZE) ){ |
|||
esp_frame.type = packet_type; |
|||
esp_frame.dataLen = payload_size; |
|||
esp_frame.data = &mks_buffer[4]; |
|||
|
|||
mks_wifi_parse_packet(&esp_frame); |
|||
|
|||
packet_start_flag=0; |
|||
packet_index=0; |
|||
} |
|||
|
|||
/* Если в пакете G-Сode, отдаем payload дальше в обработчик марлина */ |
|||
if((packet_type == ESP_TYPE_GCODE) && |
|||
(packet_index >= 4) && |
|||
(packet_index < (payload_size+5)) |
|||
){ |
|||
ret_val=0; |
|||
} |
|||
|
|||
if(packet_start_flag){ |
|||
packet_index++; |
|||
} |
|||
|
|||
return ret_val; |
|||
} |
|||
|
|||
void mks_wifi_parse_packet(ESP_PROTOC_FRAME *packet){ |
|||
|
|||
switch(packet->type){ |
|||
case ESP_TYPE_NET: |
|||
|
|||
if(packet->data[6] == ESP_NET_WIFI_CONNECTED){ |
|||
DEBUG("[Net] connected, IP: %d.%d.%d.%d",packet->data[0],packet->data[1],packet->data[2],packet->data[3]); |
|||
}else if(packet->data[6] == ESP_NET_WIFI_EXCEPTION){ |
|||
DEBUG("[Net] wifi exeption"); |
|||
}else{ |
|||
DEBUG("[Net] wifi not config"); |
|||
} |
|||
break; |
|||
case ESP_TYPE_GCODE: |
|||
DEBUG("[Gcode] %s",packet->data); |
|||
break; |
|||
case ESP_TYPE_FILE_FIRST: |
|||
DEBUG("[FILE_FIRST]"); |
|||
break; |
|||
case ESP_TYPE_FILE_FRAGMENT: |
|||
DEBUG("[FILE_FRAGMENT]"); |
|||
break; |
|||
case ESP_TYPE_WIFI_LIST: |
|||
DEBUG("[WIFI_LIST]"); |
|||
break; |
|||
default: |
|||
DEBUG("[Unkn]"); |
|||
break; |
|||
|
|||
} |
|||
|
|||
} |
|||
|
|||
|
|||
|
@ -0,0 +1,17 @@ |
|||
|
|||
Работа Марлин с Serial: |
|||
Вызов manage_inactivity(){ |
|||
if (queue.length < BUFSIZE) queue.get_available_commands(); |
|||
} |
|||
|
|||
|
|||
queue.get_available_commands(){ |
|||
get_serial_commands(); |
|||
get_sdcard_commands(); |
|||
} |
|||
} |
|||
|
|||
get_serial_commands(){ |
|||
|
|||
|
|||
} |
Loading…
Reference in new issue