mirror of
https://github.com/DashyFox/StackSport.git
synced 2025-05-04 15:20:16 +00:00
81 lines
2.3 KiB
C
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));
|
|
}
|