diff options
| author | lonkaars <loek@pipeframe.xyz> | 2022-10-28 14:31:56 +0200 | 
|---|---|---|
| committer | lonkaars <loek@pipeframe.xyz> | 2022-10-28 14:31:56 +0200 | 
| commit | babb6dc29a5c4af60292ffad5216317d13e2a685 (patch) | |
| tree | d5de3240e0112310c5ffc90ead6935333d5f9f78 /stm32f091/protocol.c | |
| parent | 4cd465332087e4ab12709f28fae55df10e1a1154 (diff) | |
fix off-by-one error and create macro for switching serial debug print color
Diffstat (limited to 'stm32f091/protocol.c')
| -rw-r--r-- | stm32f091/protocol.c | 14 | 
1 files changed, 8 insertions, 6 deletions
diff --git a/stm32f091/protocol.c b/stm32f091/protocol.c index 21e6527..4d605fc 100644 --- a/stm32f091/protocol.c +++ b/stm32f091/protocol.c @@ -9,27 +9,29 @@  void ws_protocol_res_last_records(ws_s_protocol_parsed_req_cmd* parsed_cmd, ws_s_protocol_res* response, bool send) {  	static unsigned int record_amount = 0;  	const char* response_header = "id,temperature,humidity,atmospheric_pressure\n"; -	const size_t response_line_size = sizeof("xxxx,xx,xx,xx\n"); +	const unsigned int response_line_len = strlen("xxxx,xx,xx,xx\n");  	if (!send) {  		response->success = WS_PROTOCOL_CMD_RETURN_OK;  		response->csh = true;  		response->msg = ws_bin_s_alloc(0);  		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; +		else { +			record_amount = WS_MIN(record_amount, ws_backlog_get_record_count()); +			response->msg->bytes = strlen(response_header) + response_line_len * 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]; +		char line[response_line_len + 1]; // + 1 for string terminator  		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 - 1); // remove string terminator +			ws_protocol_send_data(line, response_line_len); // remove string terminator  		} -		ws_protocol_send_data("\r\n", 2); // test +		// ws_protocol_send_data("\r\n", 2); // test  	}  }  |