PingPong/Core/Src/Print.c
2024-09-16 19:43:48 +03:00

81 lines
2.3 KiB
C

/*
* Print.c
*
* Created on: Aug 19, 2024
* Author: DashyFox
*/
#include "Print.h"
void print(char *str) {
unsigned int size = 0;
while (str[size] != '\0') {
size++;
}
CDC_Transmit_FS((unsigned char*) str, size);
}
void int_to_str(int number, char *str, int base) {
static const char digits[] = "0123456789ABCDEF";
char buffer[32];
char *ptr = buffer + sizeof(buffer) - 1;
int is_negative = 0;
if (number < 0 && base == 10) {
is_negative = 1;
number = -number;
}
*ptr = '\0';
do {
*--ptr = digits[number % base];
number /= base;
} while (number);
if (is_negative) {
*--ptr = '-';
}
// Дополнение ведущим нулем для шестнадцатеричных чисел
if (base == 16 && (buffer + sizeof(buffer) - 1 - ptr) == 1) {
*--ptr = '0';
}
strcpy(str, ptr);
}
void printNumber(long int number) {
char buffer[BUFFER_SIZE];
// Преобразование числа в строку
int_to_str(number, buffer, 10); // 10 — это основание системы счисления (десятичная система)
// strcat(buffer, "\r\n"); // Добавление новой строки
// Отправка строки через USB CDC
CDC_Transmit_FS((uint8_t*) buffer, strlen(buffer));
}
void printHexBuffer(uint8_t *buffer, uint16_t size) {
char hex_str[3 * size + 3]; // Строка для хранения шестнадцатеричных значений (2 символа на байт, пробелы и переносы строк)
int index = 0;
for (uint16_t i = 0; i < size; i++) {
// Преобразуем каждый байт в шестнадцатеричный формат
index += sprintf(&hex_str[index], "%02X ", buffer[i]);
// Добавляем перенос строки после каждых 8 байт
if ((i + 1) % 32 == 0) {
hex_str[index++] = '\n';
} else if ((i + 1) % 8 == 0) {
hex_str[index++] = ' ';
}
}
// Добавляем два переноса строки в конце
hex_str[index++] = '\n';
hex_str[index++] = '\n';
hex_str[index] = '\0'; // Завершаем строку символом конца строки
// Отправляем строку через UART (CDC)
CDC_Transmit_FS((uint8_t*) hex_str, strlen(hex_str));
}