From 26c316f47a79e853b0141b8afca4ea25177e9a05 Mon Sep 17 00:00:00 2001 From: Qukich Date: Tue, 26 Dec 2023 12:18:19 +0300 Subject: [PATCH] com --- hdlc/client.c | 41 +++++++++++++++++++++++++++++++++++------ 1 file changed, 35 insertions(+), 6 deletions(-) diff --git a/hdlc/client.c b/hdlc/client.c index cc9071f..854c25b 100644 --- a/hdlc/client.c +++ b/hdlc/client.c @@ -12,6 +12,11 @@ bool FLAG_FILL_BUFFER2 = false; bool FLAG_FILL_BUFFER3 = false; bool FLAG_FILL_BUFFER4 = false; +bool FLAG_SEND_BUFFER1 = false; +bool FLAG_SEND_BUFFER2 = false; +bool FLAG_SEND_BUFFER3 = false; +bool FLAG_SEND_BUFFER4 = false; + #define ERR_INVALID_DATA_SIZE -1 #define ERR_ALL_BUFFERS_FILL -2 @@ -69,23 +74,47 @@ int get_frame(struct Client* client, uint8_t buffer[], size_t lenBuffer){ switch (client->state) { case CONNECTING: if (client->connecting_frame_timeout <= 0){ - control_send.frame = HDLC_FRAME_ACK; + control_send.frame = S_FRAME; control_send.seq_no = 1; int ret = hdlc_frame_data(&control_send, NULL, 0, buffer, &lenBuffer); if (ret < 0){ - printf("err in get_frame ACK: %d\n", ret); + printf("err in get_frame S_FRAME: %d\n", ret); } client->connecting_frame_timeout = CONNECT_FRAME_PERIOD; } break; case READY_STATE: - control_send.frame = HDLC_FRAME_DATA; + control_send.frame = I_FRAME; control_send.seq_no = 1; - int ret = hdlc_frame_data(&control_send, buffer_data[0], SIZE_DATA_BUFFER, buffer, &lenBuffer); - if (ret < 0){ - printf("err in get_frame DATA: %d\n", ret); + if (FLAG_FILL_BUFFER1 && !FLAG_SEND_BUFFER1){ + int ret = hdlc_frame_data(&control_send, buffer_data[0], SIZE_DATA_BUFFER, buffer, &lenBuffer); + if (ret < 0){ + printf("err in get_frame I_FRAME: %d\n", ret); + } + FLAG_SEND_BUFFER1 = true; + } + if (FLAG_FILL_BUFFER2 && !FLAG_SEND_BUFFER2){ + int ret = hdlc_frame_data(&control_send, buffer_data[1], SIZE_DATA_BUFFER, buffer, &lenBuffer); + if (ret < 0){ + printf("err in get_frame I_FRAME: %d\n", ret); + } + FLAG_SEND_BUFFER2 = true; + } + if (FLAG_FILL_BUFFER3 && !FLAG_SEND_BUFFER3){ + int ret = hdlc_frame_data(&control_send, buffer_data[2], SIZE_DATA_BUFFER, buffer, &lenBuffer); + if (ret < 0){ + printf("err in get_frame I_FRAME: %d\n", ret); + } + FLAG_SEND_BUFFER3 = true; + } + if (FLAG_FILL_BUFFER4 && !FLAG_SEND_BUFFER4){ + int ret = hdlc_frame_data(&control_send, buffer_data[3], SIZE_DATA_BUFFER, buffer, &lenBuffer); + if (ret < 0){ + printf("err in get_frame I_FRAME: %d\n", ret); + } + FLAG_SEND_BUFFER4 = true; } break; }