Skip to content

Commit

Permalink
gets sk80 working, though I see some glitches
Browse files Browse the repository at this point in the history
  • Loading branch information
TheNotary committed Sep 10, 2024
1 parent 39ae6cc commit 4df6a19
Show file tree
Hide file tree
Showing 15 changed files with 48 additions and 33 deletions.
2 changes: 1 addition & 1 deletion include/blink.h
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@
extern "C" {
DLL_EXPORT void HelloDll();
DLL_EXPORT int BlinkKeys(char* keyIds, int nKeys);
DLL_EXPORT int TurnOnKeyIdsD(char* key_ids, UINT8 n_keys, unsigned char messages_sent[3][65], KeyboardInfo keyboard);
DLL_EXPORT int TurnOnKeyIdsD(char* key_ids, UINT8 n_keys, unsigned char* messages_sent, KeyboardInfo keyboard);
DLL_EXPORT int TurnOnKeyIds(char* key_ids, UINT8 n_keys, KeyboardInfo keyboard);
DLL_EXPORT int TurnOffKeyIds(char* key_ids, UINT8 n_keys, KeyboardInfo keyboard);
DLL_EXPORT int TurnOnKeyNames(const std::vector<std::string>& key_names, KeyboardInfo keyboard);
Expand Down
4 changes: 3 additions & 1 deletion include/main/keyboards/rk84/constants_rk84.h
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,11 @@ namespace rk84 {

const short VID = 0x258a;
const short PID = 0x00c0;
const UINT8 max_key_id = 96;
const UINT8 MESSAGE_LENGTH = 65;
const UINT8 BULK_LED_VALUE_MESSAGES_COUNT = 3;
const UINT8 max_key_id = 96;


const KeyValueBytesPair on_off_mappings = {
{ kOn, 0x07 },
{ kOff, 0x00 }
Expand Down
2 changes: 1 addition & 1 deletion include/main/keyboards/sk80/constants_sk80.h
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,8 @@ const short VID = 0x05ac;
const short PID = 0x024f;
const UINT8 max_key_id = 79;
const UINT8 MESSAGE_LENGTH = 65;
const UINT8 BULK_LED_HEADER_MESSAGES_COUNT = 2;
const UINT8 BULK_LED_VALUE_MESSAGES_COUNT = 9;
const UINT8 BULK_LED_HEADER_MESSAGES_COUNT = 2;
const UINT8 BULK_LED_FOOTER_MESSAGES_COUNT = 2;
const KeyValueBytesPair on_off_mappings = {
{ kOn, 0xff },
Expand Down
10 changes: 5 additions & 5 deletions include/main/keyboards/sk80/messages_sk80.h
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@

namespace sk80 {

const unsigned char BULK_LED_HEADER_MESSAGES[][MESSAGE_LENGTH] = {
const unsigned char BULK_LED_HEADER_MESSAGES[BULK_LED_HEADER_MESSAGES_COUNT][MESSAGE_LENGTH] = {
{
0x00,
0x04, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
Expand All @@ -40,7 +40,7 @@ const unsigned char BULK_LED_HEADER_MESSAGES[][MESSAGE_LENGTH] = {
};


const unsigned char BULK_LED_FOOTER_MESSAGES[][MESSAGE_LENGTH] = {
const unsigned char BULK_LED_FOOTER_MESSAGES[BULK_LED_FOOTER_MESSAGES_COUNT][MESSAGE_LENGTH] = {
{
0x00,
0x04, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
Expand Down Expand Up @@ -85,7 +85,7 @@ const unsigned char BULK_LED_FOOTER_MESSAGES[][MESSAGE_LENGTH] = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
},
{ // A payload packet, not a header
{ // This one is some kind of payload packet, not a header
0x00,
0x80, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x01, 0x05, 0x05, 0x00, 0x00, 0x00, 0xaa, 0x55,
Expand All @@ -96,7 +96,7 @@ const unsigned char BULK_LED_FOOTER_MESSAGES[][MESSAGE_LENGTH] = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
},
{
{ // And heres an absolute footer message pair
0x04, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
Expand Down Expand Up @@ -131,7 +131,7 @@ const unsigned char BULK_LED_FOOTER_MESSAGES[][MESSAGE_LENGTH] = {
// (byte) Red value (Value 0x00 - 0xff)
// (byte) Green value (Value 0x00 - 0xff)
// (byte) Blue value (Value 0x00 - 0xff)
const unsigned char BULK_LED_VALUE_MESSAGES[][MESSAGE_LENGTH] = {
const unsigned char BULK_LED_VALUE_MESSAGES[BULK_LED_VALUE_MESSAGES_COUNT][MESSAGE_LENGTH] = {
{ // 1 - Top Row, esc - f12
0x00,
0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, // KeyId 0x00 - 0x0f
Expand Down
4 changes: 1 addition & 3 deletions include/main/keyboards/sk80/sk80.h
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@
#include <array>

#include "misc.h"
#include "keyboard.h"
#include "keyboards/abstract_keyboard.h"
#include "keyboards/sk80/constants_sk80.h"
#include "keyboards/sk80/messages_sk80.h"
Expand All @@ -20,7 +19,7 @@ class SK80 : public AbstractKeyboard {

SK80(Keyboard* keyboard_manager)
: AbstractKeyboard(sk80::MESSAGE_LENGTH, sk80::BULK_LED_VALUE_MESSAGES_COUNT, sk80::target_device_path,
DeviceInfo{ sk80::VID, sk80::PID }, sk80::keyname_keyid_mappings, sk80::max_key_id, keyboard_manager)
DeviceInfo{ sk80::VID, sk80::PID }, sk80::keyname_keyid_mappings, sk80::max_key_id, keyboard_manager)
{}

void SetBytesInValuePackets(unsigned char* messages, KeyValue key_value);
Expand All @@ -42,4 +41,3 @@ namespace sk80::internal {
TwoUINT8s GetMessageIndexAndKeycodeOffsetForKeyId(UINT8 active_key);

}

2 changes: 2 additions & 0 deletions include/main/misc.h
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,8 @@ struct KeyboardInfo {
short pid;
char display_name[25];
UINT8 max_key_id;
UINT8 MESSAGE_LENGTH;
UINT8 BULK_LED_VALUE_MESSAGES_COUNT;

bool operator==(const KeyboardInfo& other) const {
return (keyboard_model == other.keyboard_model &&
Expand Down
6 changes: 3 additions & 3 deletions src/blink/blink.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ int TurnKeyNames(const std::vector<std::string>& key_names, KeyValue onOrOff, Ke
return 0;
}

int TurnKeyIds(char* key_ids, UINT8 n_keys, KeyValue onOrOff, unsigned char messages_sent[3][65], KeyboardInfo keyboard) {
int TurnKeyIds(char* key_ids, UINT8 n_keys, KeyValue onOrOff, unsigned char* messages_sent, KeyboardInfo keyboard) {
Keyboard kbd(keyboard.keyboard_model);

if (!kbd.ConnectToDevice()) {
Expand All @@ -43,7 +43,7 @@ int TurnKeyIds(char* key_ids, UINT8 n_keys, KeyValue onOrOff, unsigned char mess
kbd.SetActiveKeyIds(key_ids, n_keys);

if (onOrOff == kOn) {
kbd.TurnOnActiveKeys(*messages_sent);
kbd.TurnOnActiveKeys(messages_sent);
}
else {
kbd.TurnOffActiveKeys();
Expand Down Expand Up @@ -103,7 +103,7 @@ extern "C" {
return 0;
}

int TurnOnKeyIdsD(char* key_ids, UINT8 n_keys, unsigned char messages_sent[3][65], KeyboardInfo keyboard) {
int TurnOnKeyIdsD(char* key_ids, UINT8 n_keys, unsigned char* messages_sent, KeyboardInfo keyboard) {
return TurnKeyIds(key_ids, n_keys, kOn, messages_sent, keyboard);
}

Expand Down
8 changes: 6 additions & 2 deletions src/blink/keyboards/known_keyboards.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -12,13 +12,17 @@ std::vector<KeyboardInfo> known_keyboards = {
0x258a,
0x00c0,
"RK84",
rk84::max_key_id
rk84::max_key_id,
rk84::MESSAGE_LENGTH,
rk84::BULK_LED_VALUE_MESSAGES_COUNT
},
{
KeyboardModel::kSK80,
0x05ac,
0x024f,
"SK80",
sk80::max_key_id
sk80::max_key_id,
sk80::MESSAGE_LENGTH,
sk80::BULK_LED_VALUE_MESSAGES_COUNT
},
};
14 changes: 6 additions & 8 deletions src/blink/keyboards/sk80/sk80.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -90,17 +90,15 @@ namespace sk80 {
return;
}

std::cout << "DRY RUN:" << std::endl;

PrintMessagesInBuffer(*sk80::BULK_LED_HEADER_MESSAGES, sk80::BULK_LED_HEADER_MESSAGES_COUNT, sk80::MESSAGE_LENGTH);
//SendBufferToDeviceAndGetResp(this->device_handle, *sk80::BULK_LED_HEADER_MESSAGES, sk80::BULK_LED_HEADER_MESSAGES_COUNT, sk80::MESSAGE_LENGTH);
//PrintMessagesInBuffer(*sk80::BULK_LED_HEADER_MESSAGES, sk80::BULK_LED_HEADER_MESSAGES_COUNT, sk80::MESSAGE_LENGTH);
SendBufferToDeviceAndGetResp(this->device_handle, *sk80::BULK_LED_HEADER_MESSAGES, sk80::BULK_LED_HEADER_MESSAGES_COUNT, sk80::MESSAGE_LENGTH);

this->SetBytesInValuePackets(messages, key_value);
PrintMessagesInBuffer(messages, sk80::BULK_LED_VALUE_MESSAGES_COUNT, sk80::MESSAGE_LENGTH);
//SendBufferToDevice(this->device_handle, messages, sk80::BULK_LED_VALUE_MESSAGES_COUNT, sk80::MESSAGE_LENGTH);
//PrintMessagesInBuffer(messages, sk80::BULK_LED_VALUE_MESSAGES_COUNT, sk80::MESSAGE_LENGTH);
SendBufferToDevice(this->device_handle, messages, sk80::BULK_LED_VALUE_MESSAGES_COUNT, sk80::MESSAGE_LENGTH);

PrintMessagesInBuffer(*sk80::BULK_LED_FOOTER_MESSAGES, sk80::BULK_LED_FOOTER_MESSAGES_COUNT, sk80::MESSAGE_LENGTH);
//SendBufferToDevice(this->device_handle, *sk80::BULK_LED_FOOTER_MESSAGES, sk80::BULK_LED_FOOTER_MESSAGES_COUNT, sk80::MESSAGE_LENGTH);
//PrintMessagesInBuffer(*sk80::BULK_LED_FOOTER_MESSAGES, sk80::BULK_LED_FOOTER_MESSAGES_COUNT, sk80::MESSAGE_LENGTH);
SendBufferToDevice(this->device_handle, *sk80::BULK_LED_FOOTER_MESSAGES, sk80::BULK_LED_FOOTER_MESSAGES_COUNT, sk80::MESSAGE_LENGTH);
}

void SK80::SetKeyRGB(char key_id, unsigned char r, unsigned char g, unsigned char b) {
Expand Down
7 changes: 5 additions & 2 deletions src/blink/usb_functions.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,11 @@


void PrintMessageInBuffer(const unsigned char* buffer, size_t i, size_t message_length) {
for (size_t j = 0; j < message_length; j++) {
if (j % 8 == 0)
printf("\n");
// Print the wacky first byte out of order because it helps expose the true nature of our messages
printf("0x%02x", buffer[i * message_length + 0]);
for (size_t j = 1; j < message_length; j++) {
if ((j-1) % 8 == 0)
printf("\n");
printf("0x%02x ", buffer[i * message_length + j]);
}
Expand Down
12 changes: 8 additions & 4 deletions src/demo/activities/cycle_keyids.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ namespace demo {

void PrintKeyId(char key_id) {
cout << "\r" << std::string(12, ' ');
cout << "\r" << "KeyId: " << (int)key_id;
cout << "\r" << "KeyId: " << std::dec << (int)key_id;
}

char IncrementKeyId(char value, int incrementation, UINT8 max_key_id) {
Expand Down Expand Up @@ -44,8 +44,10 @@ int CycleKeyIds(KeyboardInfo keyboard) {
<< endl << endl;

//std::vector<std::string> key_names = { "f11" };
unsigned char messages_sent[3][65] = { 0 };
messages_sent[0][0] = { 2 }; // debugging, delete me

unsigned char* messages_sent = new unsigned char [keyboard.BULK_LED_VALUE_MESSAGES_COUNT * keyboard.MESSAGE_LENGTH];

//unsigned char messages_sent[3][keyboard.MESSAGE_LENGTH] = { 0 };
char key_ids[] = { 0x01 };

PrintKeyId(key_ids[0]);
Expand All @@ -71,7 +73,7 @@ int CycleKeyIds(KeyboardInfo keyboard) {
}

if (GetAsyncKeyState(VK_SPACE) & 0x8000) { // print packet buffer
CallPrintMessagesInBuffer(*messages_sent, 3, 65);
CallPrintMessagesInBuffer(messages_sent, 3, 65);

Sleep(200);
}
Expand All @@ -82,6 +84,8 @@ int CycleKeyIds(KeyboardInfo keyboard) {

Sleep(10);
}

delete[] messages_sent;
return 0;
}

Expand Down
4 changes: 2 additions & 2 deletions src/demo/blink_loader.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -85,15 +85,15 @@ void CallPrintMessagesInBuffer(unsigned char* buffer, size_t message_count, size
dll_func(buffer, message_count, message_length);
}

int CallTurnOnKeyIdsD(char* key_ids, UINT8 n_keys, unsigned char messagesSent[3][65], KeyboardInfo keyboard) {
int CallTurnOnKeyIdsD(char* key_ids, UINT8 n_keys, unsigned char* messagesSent, KeyboardInfo keyboard) {
HMODULE hModule = LoadLibrary(TEXT("blink.dll"));
if (!hModule) {
std::cerr << "Failed to load DLL" << std::endl;
return 1;
}

char funcName[] = "TurnOnKeyIdsD";
typedef int (*Func)(char* key_ids, UINT8 n_keys, unsigned char messagesSent[3][65], KeyboardInfo keyboard);
typedef int (*Func)(char* key_ids, UINT8 n_keys, unsigned char* messagesSent, KeyboardInfo keyboard);

Func dll_func = GetFunction<Func>(&hModule, funcName);
if (!dll_func) {
Expand Down
2 changes: 1 addition & 1 deletion src/demo/blink_loader.h
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ int test_dll(char* keyIds, int nKeys);
int CallDllTurnOnKeyNames(const std::vector<std::string>& key_names, KeyboardInfo keyboard);
int CallDllTurnOffKeyNames(const std::vector<std::string>& key_names, KeyboardInfo keyboard);
int CallTurnOnKeyIds(char* key_ids, UINT8 n_keys);
int CallTurnOnKeyIdsD(char* key_ids, UINT8 n_keys, unsigned char messagesSent[3][65], KeyboardInfo keyboard);
int CallTurnOnKeyIdsD(char* key_ids, UINT8 n_keys, unsigned char* messagesSent, KeyboardInfo keyboard);
void CallPrintMessagesInBuffer(unsigned char* buffer, size_t message_count, size_t message_length);
std::vector<KeyboardInfo> _ListAvailableKeyboards();

Expand Down
2 changes: 2 additions & 0 deletions test/keyboard_rk84_test.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,8 @@ namespace KeyboardRK84
EXPECT_EQ(abstr->target_device_path[0], '\\');
EXPECT_EQ(rk_84.device_info.vid, 0x258a);
EXPECT_EQ(abstr->device_info.vid, 0x258a);
EXPECT_EQ(rk_84.max_key_id, 96);
EXPECT_EQ(abstr->max_key_id, 96);
}

}
Expand Down
2 changes: 2 additions & 0 deletions test/keyboard_sk80_test.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -109,6 +109,8 @@ namespace KeyboardSK80
EXPECT_EQ(abstr->device_info.vid, 0x05ac);
EXPECT_EQ(sk_80.device_info.pid, 0x024f);
EXPECT_EQ(abstr->device_info.pid, 0x024f);
EXPECT_EQ(sk_80.max_key_id, 79);
EXPECT_EQ(abstr->max_key_id, 79);
}

}
Expand Down

0 comments on commit 4df6a19

Please sign in to comment.