#include "RedragonK556Controller.h" #include RedragonK556Controller::RedragonK556Controller(hid_device* dev_handle) { dev = dev_handle; } void RedragonK556Controller::SetKeyboardColors ( unsigned char * color_data, unsigned int size ) { unsigned int packet_size = 0; unsigned int packet_offset = 0; while(size > 0) { if(size >= REDRAGON_K556_MAX_PACKET_SIZE) { packet_size = REDRAGON_K556_MAX_PACKET_SIZE; } else { packet_size = size; } SendKeyboardData ( &color_data[packet_offset], packet_size, packet_offset ); size -= packet_size; packet_offset += packet_size; } } /*-------------------------------------------------------------------------------------------------*\ | Private packet sending functions. | \*-------------------------------------------------------------------------------------------------*/ void RedragonK556Controller::SendKeyboardBegin() { char usb_buf[64]; /*-----------------------------------------------------*\ | Zero out buffer | \*-----------------------------------------------------*/ memset(usb_buf, 0x00, sizeof(usb_buf)); /*-----------------------------------------------------*\ | Set up Keyboard Begin packet | \*-----------------------------------------------------*/ usb_buf[0x00] = 0x04; usb_buf[0x01] = 0x01; usb_buf[0x02] = 0x00; usb_buf[0x03] = 0x01; /*-----------------------------------------------------*\ | Send packet | \*-----------------------------------------------------*/ hid_write(dev, (unsigned char *)usb_buf, 64); hid_read(dev, (unsigned char *)usb_buf, 64); } void RedragonK556Controller::SendKeyboardData ( unsigned char * data, unsigned char data_size, unsigned short data_offset ) { char usb_buf[64]; /*-----------------------------------------------------*\ | Zero out buffer | \*-----------------------------------------------------*/ memset(usb_buf, 0x00, sizeof(usb_buf)); /*-----------------------------------------------------*\ | Set up Keyboard End packet | \*-----------------------------------------------------*/ usb_buf[0x00] = 0x04; usb_buf[0x01] = 0x11 + data_offset; usb_buf[0x02] = data_size; usb_buf[0x03] = ( data_size / 3 ) - 1; usb_buf[0x04] = data_size; usb_buf[0x05] = data_offset & 0x00FF; usb_buf[0x06] = data_offset >> 8; /*-----------------------------------------------------*\ | Copy in data bytes | \*-----------------------------------------------------*/ memcpy(&usb_buf[0x08], data, data_size); /*-----------------------------------------------------*\ | Send packet | \*-----------------------------------------------------*/ hid_write(dev, (unsigned char *)usb_buf, 64); hid_read(dev, (unsigned char *)usb_buf, 64); } void RedragonK556Controller::SendKeyboardMode ( unsigned char mode ) { char usb_buf[64]; /*-----------------------------------------------------*\ | Zero out buffer | \*-----------------------------------------------------*/ memset(usb_buf, 0x00, sizeof(usb_buf)); /*-----------------------------------------------------*\ | Set up Keyboard End packet | \*-----------------------------------------------------*/ usb_buf[0x00] = 0x04; usb_buf[0x01] = 0x00; usb_buf[0x02] = 0x00; usb_buf[0x03] = 0x06; usb_buf[0x04] = 0x01; usb_buf[0x08] = mode; /*-----------------------------------------------------*\ | Send packet | \*-----------------------------------------------------*/ hid_write(dev, (unsigned char *)usb_buf, 64); hid_read(dev, (unsigned char *)usb_buf, 64); } void RedragonK556Controller::SendKeyboardEnd() { char usb_buf[64]; /*-----------------------------------------------------*\ | Zero out buffer | \*-----------------------------------------------------*/ memset(usb_buf, 0x00, sizeof(usb_buf)); /*-----------------------------------------------------*\ | Set up Keyboard End packet | \*-----------------------------------------------------*/ usb_buf[0x00] = 0x04; usb_buf[0x01] = 0x02; usb_buf[0x02] = 0x00; usb_buf[0x03] = 0x02; /*-----------------------------------------------------*\ | Send packet | \*-----------------------------------------------------*/ hid_write(dev, (unsigned char *)usb_buf, 64); hid_read(dev, (unsigned char *)usb_buf, 64); }