diff options
Diffstat (limited to 'stm32f091/protocol.c')
| -rw-r--r-- | stm32f091/protocol.c | 13 | 
1 files changed, 7 insertions, 6 deletions
| diff --git a/stm32f091/protocol.c b/stm32f091/protocol.c index 3a8d78b..21e6527 100644 --- a/stm32f091/protocol.c +++ b/stm32f091/protocol.c @@ -13,19 +13,21 @@ void ws_protocol_res_last_records(ws_s_protocol_parsed_req_cmd* parsed_cmd, ws_s  	if (!send) {  		response->success = WS_PROTOCOL_CMD_RETURN_OK; -		if (sscanf(parsed_cmd->argv[1], "%u", &record_amount) < 1) response->success = WS_PROTOCOL_CMD_RETURN_ERROR; -		record_amount = WS_MIN(record_amount, ws_backlog_get_record_count());  		response->csh = true;  		response->msg = ws_bin_s_alloc(0); -		response->msg->bytes = strlen(response_header) + response_line_size * record_amount; +		response->msg->bytes = 0; +		record_amount = WS_MIN(record_amount, ws_backlog_get_record_count()); +		if (sscanf(parsed_cmd->argv[1], "%u", &record_amount) < 1) response->success = WS_PROTOCOL_CMD_RETURN_ERROR; +		else response->msg->bytes = strlen(response_header) + response_line_size * record_amount;  		ws_server_req_respond_start(0, response->msg->bytes + ws_protocol_get_header_size(response));  	} else { +		if (response->success == WS_PROTOCOL_CMD_RETURN_ERROR) return;  		ws_protocol_send_data(response_header, strlen(response_header)); -		char line[response_line_size + 1]; // +1 for null terminator -> sprintf +		char line[response_line_size];  		for (unsigned int i = 0; i < record_amount; i++) {  			ws_s_backlog_record* record = ws_backlog_get_last_record(i);  			sprintf(line, "%04x,%02x,%02x,%02x\n", record->id, record->sens_temperature, record->sens_humidity, record->sens_atm_pressure); -			ws_protocol_send_data(line, response_line_size); +			ws_protocol_send_data(line, response_line_size - 1); // remove string terminator  		}  		ws_protocol_send_data("\r\n", 2); // test  	} @@ -33,5 +35,4 @@ void ws_protocol_res_last_records(ws_s_protocol_parsed_req_cmd* parsed_cmd, ws_s  void ws_protocol_send_data(const char* data, unsigned int length) {  	ws_server_buffer_send_append((uint8_t*) data, length); -	// HAL_UART_Transmit(&huart1, (uint8_t*) data, length, HAL_MAX_DELAY);  } |