Display_Avr_3/sketch_feb27a.ino
2024-02-29 14:11:43 +03:00

107 lines
2.7 KiB
C++

#include "client.h"
#include "protocol.h"
#include "uart.h"
#include "MyLCD.h"
struct Client hdlc;
struct DisplayData wait;
struct DisplayData recive_data;
bool wait_for_connect = false;
void setup() {
init_lcd();
init_hdlc_client(&hdlc, 500);
char str[] = "wait for connect... ";
strncpy(wait.topLine, str, sizeof(str));
wait.value1 = 1.0f;
wait.value2 = 20.0f;
wait.value3 = 300.0f;
char str_data[] = "wait for data... ";
strncpy(recive_data.topLine, str_data, sizeof(str_data));
recive_data.value1 = 4.0f;
recive_data.value2 = 50.0f;
recive_data.value3 = 600.0f;
UART_init();
}
void loop() {
if (!wait_for_connect){
print_lcd(&wait);
hdlc_connect(&hdlc);
uint8_t buffer[6];
wait.value2 = 21.0f;
hdlc_get_raw_frame(&hdlc, buffer, sizeof buffer);
UART_send(buffer, sizeof buffer);
bool recive_connect = false;
while(!recive_connect){
print_lcd(&wait);
uint8_t buffer_recive[6];
UART_receive(buffer_recive, sizeof buffer_recive);
int err = hdlc_timeout_handler(&hdlc, 1);
if (err == ERR_FRAME_TIME_OUT){
hdlc_get_raw_frame(&hdlc, buffer, sizeof buffer);
UART_send(buffer, sizeof buffer);
continue;
}
err = hdlc_decode_recived_raw_data(&hdlc, buffer_recive, sizeof buffer_recive, 0, 0);
if (err < 0){
if (err == ERR_INVALID_SEQ_NUMBER_FRAME){
uint8_t buffer_rej[10];
hdlc_get_raw_frame(&hdlc, buffer_rej, sizeof buffer_rej);
UART_send(buffer_rej, sizeof buffer_rej);
return err;
}
return err;
}
if (hdlc.state == READY_STATE){
wait_for_connect = true;
recive_connect = true;
}
}
} else {
print_lcd(&recive_data);
uint8_t buffer_receive[74];
UART_receive(buffer_receive, sizeof buffer_receive);
if (buffer_receive[0] != 126){
recive_data.value2 = 51.0f;
uint8_t data_receive[64];
size_t len_data_receive;
int err = hdlc_decode_recived_raw_data(&hdlc, buffer_receive, sizeof buffer_receive, data_receive, &len_data_receive);
if (err < 0){
if (err == ERR_INVALID_SEQ_NUMBER_FRAME){
uint8_t buffer_rej[10];
hdlc_get_raw_frame(&hdlc, buffer_rej, sizeof buffer_rej);
UART_send(buffer_rej, sizeof buffer_rej);
return err;
}
//return err;
}
if (hdlc.state == SEND){
recive_data.value2 = 51.0f;
struct message resp;
protocol_decode(data_receive, len_data_receive, &resp);
recive_data.value1 = resp.numbers[0];
recive_data.value1 = resp.numbers[0];
recive_data.value2 = resp.numbers[1];
recive_data.value3 = resp.numbers[2];
strcpy(recive_data.topLine, resp.str);
}
}
}
}