Формирование бинарного пакета на выход
This commit is contained in:
@@ -1,8 +1,12 @@
|
||||
#include "mks_wifi.h"
|
||||
|
||||
ESP_PROTOC_FRAME esp_frame;
|
||||
uint8_t mks_buffer[ESP_PACKET_DATA_MAX_SIZE];
|
||||
|
||||
uint8_t mks_in_buffer[ESP_PACKET_DATA_MAX_SIZE];
|
||||
|
||||
uint8_t mks_out_buffer[ESP_PACKET_DATA_MAX_SIZE];
|
||||
uint32_t line_index=0;
|
||||
|
||||
uint8_t esp_packet[ESP_PACKET_DATA_MAX_SIZE];
|
||||
|
||||
|
||||
@@ -25,8 +29,8 @@ void mks_wifi_init(void){
|
||||
|
||||
// safe_delay(2000);
|
||||
// mks_wifi_set_param();
|
||||
// SET_INPUT_PULLUP(MKS_WIFI_IO0);
|
||||
// attachInterrupt(MKS_WIFI_IO0, mks_wifi_io0_irq, FALLING);
|
||||
// SET_INPUT_PULLUP(MKS_WIFI_IO0);
|
||||
// attachInterrupt(MKS_WIFI_IO0, mks_wifi_io0_irq, FALLING);
|
||||
}
|
||||
|
||||
|
||||
@@ -68,12 +72,42 @@ void mks_wifi_io0_irq(void){
|
||||
}
|
||||
|
||||
/*
|
||||
Принимает по символу из входных данных.
|
||||
Сладывает в буфер, формирует пакет.
|
||||
Возвращаемые занчения:
|
||||
1 - найден признак начала пакета, отдавать байт мардину не надо
|
||||
0 - начало пакета не найдено, передать байт дальше марлину
|
||||
Получает данные из всех функций, как только
|
||||
есть перевод строки 0x0A, формирует пакет для
|
||||
ESP и отправляет
|
||||
*/
|
||||
void mks_wifi_out_add(uint8_t *data, uint32_t size){
|
||||
uint32_t datalen;
|
||||
uint32_t packet_size;
|
||||
uint8_t *data_ptr;
|
||||
|
||||
data_ptr=data; //чтобы не трогать адрес
|
||||
|
||||
while (size--){
|
||||
if(*data_ptr == 0x0a){
|
||||
//Переводы строки внутри формирования пакета
|
||||
//Перевод строки => сформировать пакет, отправить, сбросить индекс
|
||||
datalen=strnlen((char *)mks_out_buffer,ESP_PACKET_DATA_MAX_SIZE);
|
||||
packet_size=mks_wifi_build_packet(esp_packet,ESP_TYPE_FILE_FIRST,mks_out_buffer,datalen);
|
||||
|
||||
//выпихнуть в uart
|
||||
mks_wifi_send(esp_packet, packet_size);
|
||||
//очистить буфер
|
||||
memset(mks_out_buffer,0,ESP_SERIAL_OUT_MAX_SIZE);
|
||||
//сбросить индекс
|
||||
line_index=0;
|
||||
}else{
|
||||
//писать в буфер
|
||||
mks_out_buffer[line_index++]=*data_ptr++;
|
||||
}
|
||||
|
||||
if(line_index >= ESP_SERIAL_OUT_MAX_SIZE){
|
||||
ERROR("Max line size");
|
||||
line_index=0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
uint8_t mks_wifi_input(uint8_t data){
|
||||
static uint8_t packet_start_flag=0;
|
||||
static uint8_t packet_type=0;
|
||||
@@ -86,25 +120,25 @@ uint8_t mks_wifi_input(uint8_t data){
|
||||
payload_size = ESP_PACKET_DATA_MAX_SIZE;
|
||||
packet_start_flag=1;
|
||||
packet_index=0;
|
||||
memset(mks_buffer,0,ESP_PACKET_DATA_MAX_SIZE);
|
||||
memset(mks_in_buffer,0,ESP_PACKET_DATA_MAX_SIZE);
|
||||
}
|
||||
|
||||
if(packet_start_flag){
|
||||
mks_buffer[packet_index]=data;
|
||||
mks_in_buffer[packet_index]=data;
|
||||
}
|
||||
|
||||
if(packet_index == 1){
|
||||
packet_type = mks_buffer[1];
|
||||
packet_type = mks_in_buffer[1];
|
||||
}
|
||||
|
||||
if(packet_index == 3){
|
||||
payload_size = uint16_t(mks_buffer[3] << 8) | mks_buffer[2];
|
||||
payload_size = uint16_t(mks_in_buffer[3] << 8) | mks_in_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];
|
||||
esp_frame.data = &mks_in_buffer[4];
|
||||
|
||||
mks_wifi_parse_packet(&esp_frame);
|
||||
|
||||
@@ -162,74 +196,34 @@ void mks_wifi_parse_packet(ESP_PROTOC_FRAME *packet){
|
||||
|
||||
|
||||
void mks_wifi_out(uint8_t count, ...){
|
||||
static uint16_t line_index=0;
|
||||
va_list args;
|
||||
uint8_t data;
|
||||
uint16_t datalen;
|
||||
uint16_t packet_size;
|
||||
|
||||
va_start(args, count);
|
||||
|
||||
while (count--) {
|
||||
|
||||
|
||||
data = va_arg(args, unsigned);
|
||||
if(data == 0x0a){
|
||||
|
||||
if(mks_out_buffer[line_index-1] == 't'){
|
||||
DEBUG("Line");
|
||||
}
|
||||
|
||||
//сформировать пакет
|
||||
datalen=strnlen((char *)mks_out_buffer,ESP_PACKET_DATA_MAX_SIZE);
|
||||
packet_size=mks_wifi_build_packet(esp_packet,ESP_TYPE_FILE_FIRST,mks_out_buffer,datalen);
|
||||
|
||||
//выпихнуть в uart
|
||||
mks_wifi_send(esp_packet, packet_size);
|
||||
|
||||
DEBUG("%s",mks_out_buffer);
|
||||
|
||||
//очистить буфер
|
||||
memset(mks_out_buffer,0,ESP_SERIAL_OUT_MAX_SIZE);
|
||||
//сбросить индекс
|
||||
line_index=0;
|
||||
}else{
|
||||
mks_out_buffer[line_index++]=data;
|
||||
}
|
||||
|
||||
if(line_index >= ESP_SERIAL_OUT_MAX_SIZE){
|
||||
DEBUG("Max line size");
|
||||
line_index=0;
|
||||
}
|
||||
mks_wifi_out_add(&data, 1);
|
||||
}
|
||||
va_end(args);
|
||||
}
|
||||
|
||||
|
||||
void mks_println(const char *s){
|
||||
uint16_t datalen;
|
||||
uint16_t packet_size;
|
||||
|
||||
DEBUG("%s",s);
|
||||
|
||||
//сформировать пакет
|
||||
datalen=strnlen((char *)mks_out_buffer,ESP_PACKET_DATA_MAX_SIZE);
|
||||
packet_size=mks_wifi_build_packet(esp_packet,ESP_TYPE_FILE_FIRST,mks_out_buffer,datalen);
|
||||
|
||||
//выпихнуть в uart
|
||||
mks_wifi_send(esp_packet, packet_size);
|
||||
DEBUG("char* %s",s);
|
||||
mks_wifi_out_add((uint8_t *)s, strnlen((char *)s,ESP_PACKET_DATA_MAX_SIZE));
|
||||
}
|
||||
|
||||
void mks_println_ln(const char *s){
|
||||
|
||||
DEBUG("NEW LN %s");
|
||||
|
||||
mks_wifi_out_add((uint8_t *)s, strnlen((char *)s,ESP_PACKET_DATA_MAX_SIZE));
|
||||
}
|
||||
|
||||
void mks_println_ln(float f){
|
||||
|
||||
DEBUG("NEW LN float %d",(uint32_t)f);
|
||||
|
||||
uint32_t data=(uint32_t)f;
|
||||
char str[30];
|
||||
DEBUG("Float");
|
||||
sprintf(str,"%ld\n",data);
|
||||
mks_wifi_out_add((uint8_t *)str, strnlen((char *)str,ESP_PACKET_DATA_MAX_SIZE));
|
||||
}
|
||||
|
||||
uint16_t mks_wifi_build_packet(uint8_t *packet, uint8_t type, uint8_t *data, uint16_t count){
|
||||
@@ -256,12 +250,13 @@ uint16_t mks_wifi_build_packet(uint8_t *packet, uint8_t type, uint8_t *data, uin
|
||||
|
||||
|
||||
void mks_wifi_send(uint8_t *packet, uint16_t size){
|
||||
for( uint32_t i=0; i < (uint32_t)(size); i++){
|
||||
for( uint32_t i=0; i < (uint32_t)(size+1); i++){
|
||||
MYSERIAL1.write(packet[i]);
|
||||
}
|
||||
}
|
||||
|
||||
void mks_println(int i){
|
||||
DEBUG("int %d",i);
|
||||
SERIAL_OUT(print, i);
|
||||
char str[30];
|
||||
sprintf(str,"%d",i);
|
||||
mks_wifi_out_add((uint8_t *)str, strnlen((char *)str,ESP_PACKET_DATA_MAX_SIZE));
|
||||
}
|
||||
@@ -35,17 +35,23 @@ typedef struct
|
||||
|
||||
|
||||
void mks_wifi_init(void);
|
||||
|
||||
void mks_wifi_io0_irq(void);
|
||||
void mks_wifi_set_param(void);
|
||||
|
||||
uint8_t mks_wifi_input(uint8_t data);
|
||||
void mks_wifi_parse_packet(ESP_PROTOC_FRAME *packet);
|
||||
void mks_wifi_set_param(void);
|
||||
|
||||
void mks_wifi_out_add(uint8_t *data, uint32_t size);
|
||||
|
||||
uint16_t mks_wifi_build_packet(uint8_t *packet, uint8_t type, uint8_t *data, uint16_t count);
|
||||
void mks_wifi_send(uint8_t *packet, uint16_t size);
|
||||
|
||||
void mks_wifi_out(uint8_t count, ...);
|
||||
|
||||
void mks_println(const char *s);
|
||||
void mks_println(int i);
|
||||
|
||||
uint16_t mks_wifi_build_packet(uint8_t *packet, uint8_t type, uint8_t *data, uint16_t count);
|
||||
void mks_wifi_send(uint8_t *packet, uint16_t size);
|
||||
void mks_println_ln(const char *s);
|
||||
void mks_println_ln(float);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user