Added spdlog

master
Mark 2022-07-08 19:36:05 -07:00
parent 50dfd244e7
commit d1660bb6fd
Signed by: Mark
GPG Key ID: AD62BB059C2AAEE4
8 changed files with 57 additions and 10 deletions

3
.gitmodules vendored
View File

@ -1,3 +1,6 @@
[submodule "libs/hidapi"]
path = libs/hidapi
url = ssh://git@git.betalupi.com:33/mirrors-libs/hidapi.git
[submodule "libs/spdlog"]
path = libs/spdlog
url = ssh://git@git.betalupi.com:33/Reflector/spdlog.git

View File

@ -25,7 +25,8 @@ libs: $(BUILD_DIR)/hid.o
CPPFLAGS := -MMD -MP \
-Wall \
-I src \
-I libs/hidapi/hidapi
-I libs/hidapi/hidapi \
-I libs/spdlog/include
# udev: required by hidapi
LDFLAGS := -l fftw3 -l udev

1
libs/spdlog Submodule

@ -0,0 +1 @@
Subproject commit 6c95f4c8168401badff89d0c16e3887ea91ea9ad

View File

@ -1,6 +1,5 @@
#include "ergodox.hpp"
Ergodox::Ergodox(
unsigned short vendor_id,
unsigned short product_id,
@ -102,18 +101,21 @@ bool Ergodox::try_connect() {
#define MAX_STR 255
wchar_t wstr[MAX_STR];
char nstr[MAX_STR];
wprintf(L"\nConnected to device!\n");
spdlog::info("Connected to device!");
// Read metadata
wstr[0] = 0x0000;
hid_get_manufacturer_string(handle, wstr, MAX_STR);
wprintf(L"Manufacturer String: %ls\n", wstr);
misc::to_narrow(wstr, nstr, MAX_STR);
spdlog::info("Manufacturer String: {0}", nstr);
wstr[0] = 0x0000;
hid_get_product_string(handle, wstr, MAX_STR);
wprintf(L"Product String: %ls\n", wstr);
misc::to_narrow(wstr, nstr, MAX_STR);
spdlog::info("Product String: {0}", nstr);
} else {
connected = false;
@ -168,7 +170,7 @@ bool Ergodox::write(uint8_t cmd, const uint8_t* data, uint8_t data_len) {
res = hid_write(handle, packet, packet_size + 1);
if (res < 0) {
wprintf(L"Lost device, disconnecting.\n");
spdlog::info("Lost device, disconnecting.");
disconnect();
return false;
}
@ -194,7 +196,7 @@ bool Ergodox::read() {
if (res == 0) {
return false;
} else if (res < 0) {
wprintf(L"Lost device, disconnecting.\n");
spdlog::info("Lost device, disconnecting.");
disconnect();
return false;
}
@ -204,7 +206,7 @@ bool Ergodox::read() {
// If keyboard sends a state packet, parse it.
case CMD_SEND_STATE:
if (animation_mode != read_buf[1]) {
wprintf(L"Mode set to 0x%02X\n", read_buf[1]);
spdlog::info("Mode set to {0:x}", read_buf[1]);
animation_mode = read_buf[1];
}
@ -223,7 +225,7 @@ void Ergodox::test_connection() {
// Block until a connection is established.
void Ergodox::connect_loop() {
wprintf(L"Trying to connect...\n");
spdlog::info("Trying to connect...");
while (!connected) {
try_connect();
std::this_thread::sleep_for(std::chrono::milliseconds(RECONNECT_SLEEP_MS));

View File

@ -7,7 +7,9 @@
#include <chrono>
#include <thread>
#include "spdlog/spdlog.h"
#include "hidapi.h"
#include "utility/misc.h"
#include "config.h"
#include "commands.h"

View File

@ -17,6 +17,8 @@
#include "commands.h"
#include "config.h"
#include "spdlog/spdlog.h"
// TODO:
//
@ -34,7 +36,7 @@
// Keyboard interface:
// Frame rate limit
// Clean up reconnect code
// Better log messages
// Better log messages, compiled spdlog
//
// Get parameters from keyboard (width, height, etc)
//
@ -50,6 +52,8 @@ const size_t height = BOTTOM_SKIP + KB_RESOLUTION + TOP_SKIP;
int main(int argc, char *argv[]) {
spdlog::set_level(spdlog::level::info);
// buffer size for waveform:
// (44100 / fps * 10), make 10 bigger for slower scrolling
//

28
src/utility/misc.cpp Normal file
View File

@ -0,0 +1,28 @@
#include "misc.h"
namespace misc {
size_t to_narrow(const wchar_t * src, char * dest, size_t dest_len) {
size_t i;
wchar_t code;
i = 0;
while (src[i] != '\0' && i < (dest_len - 1)) {
code = src[i];
if (code < 128) {
dest[i] = char(code);
} else {
dest[i] = '?';
if (code >= 0xD800 && code <= 0xD8FF) {
i++;
}
}
i++;
}
dest[i] = '\0';
return i - 1;
}
}

6
src/utility/misc.h Normal file
View File

@ -0,0 +1,6 @@
#pragma once
#include <stdio.h>
namespace misc {
size_t to_narrow(const wchar_t * src, char * dest, size_t dest_len);
}