static void _cmd_get(usbdevice* kb, usbmode* mode, int nnumber, const char* setting){ usbprofile* profile = kb->profile; if(!strcmp(setting, ":mode")){ // Get the current mode number nprintf(kb, nnumber, mode, "switch\n"); return; } else if(!strcmp(setting, ":rgb")){ // Get the current RGB settings char* rgb = printrgb(&mode->light, kb); nprintf(kb, nnumber, mode, "rgb %s\n", rgb); free(rgb); return; } else if(!strcmp(setting, ":hwrgb")){ // Get the current hardware RGB settings HW_STANDARD; char* rgb = printrgb(kb->hw->light + index, kb); nprintf(kb, nnumber, mode, "hwrgb %s\n", rgb); free(rgb); return; } else if(!strcmp(setting, ":profilename")){ // Get the current profile name char* name = getprofilename(profile); nprintf(kb, nnumber, 0, "profilename %s\n", name[0] ? name : "Unnamed"); free(name); } else if(!strcmp(setting, ":name")){ // Get the current mode name char* name = getmodename(mode); nprintf(kb, nnumber, mode, "name %s\n", name[0] ? name : "Unnamed"); free(name); } else if(!strcmp(setting, ":hwprofilename")){ // Get the current hardware profile name if(!kb->hw) return; char* name = gethwprofilename(kb->hw); nprintf(kb, nnumber, 0, "hwprofilename %s\n", name[0] ? name : "Unnamed"); free(name); } else if(!strcmp(setting, ":hwname")){ // Get the current hardware mode name HW_STANDARD; char* name = gethwmodename(kb->hw, index); nprintf(kb, nnumber, mode, "hwname %s\n", name[0] ? name : "Unnamed"); free(name); } else if(!strcmp(setting, ":profileid")){ // Get the current profile ID char* guid = getid(&profile->id); int modified; memcpy(&modified, &profile->id.modified, sizeof(modified)); nprintf(kb, nnumber, 0, "profileid %s %x\n", guid, modified); free(guid); } else if(!strcmp(setting, ":id")){ // Get the current mode ID char* guid = getid(&mode->id); int modified; memcpy(&modified, &mode->id.modified, sizeof(modified)); nprintf(kb, nnumber, mode, "id %s %x\n", guid, modified); free(guid); } else if(!strcmp(setting, ":hwprofileid")){ // Get the current hardware profile ID if(!kb->hw) return; char* guid = getid(&kb->hw->id[0]); int modified; memcpy(&modified, &kb->hw->id[0].modified, sizeof(modified)); nprintf(kb, nnumber, 0, "hwprofileid %s %x\n", guid, modified); free(guid); } else if(!strcmp(setting, ":hwid")){ // Get the current hardware mode ID HW_STANDARD; char* guid = getid(&kb->hw->id[index + 1]); int modified; memcpy(&modified, &kb->hw->id[index + 1].modified, sizeof(modified)); nprintf(kb, nnumber, mode, "hwid %s %x\n", guid, modified); free(guid); } else if(!strcmp(setting, ":keys")){ // Get the current state of all keys for(int i = 0; i < N_KEYS_INPUT; i++){ if(!keymap[i].name) continue; int byte = i / 8, bit = 1 << (i & 7); uchar state = kb->input.keys[byte] & bit; nprintkey(kb, nnumber, i, state); } } else if(!strcmp(setting, ":i")){ // Get the current state of all indicator LEDs nprintind(kb, nnumber, I_NUM, kb->ileds & I_NUM); nprintind(kb, nnumber, I_CAPS, kb->ileds & I_CAPS); nprintind(kb, nnumber, I_SCROLL, kb->ileds & I_SCROLL); } else if(!strcmp(setting, ":dpi")){ // Get the current DPI levels char* dpi = printdpi(&mode->dpi, kb); nprintf(kb, nnumber, mode, "dpi %s\n", dpi); free(dpi); return; } else if(!strcmp(setting, ":hwdpi")){ // Get the current hardware DPI levels HW_STANDARD; char* dpi = printdpi(kb->hw->dpi + index, kb); nprintf(kb, nnumber, mode, "hwdpi %s\n", dpi); free(dpi); return; } else if(!strcmp(setting, ":dpisel")){ // Get the currently-selected DPI nprintf(kb, nnumber, mode, "dpisel %d\n", mode->dpi.current); } else if(!strcmp(setting, ":hwdpisel")){ // Get the currently-selected hardware DPI HW_STANDARD; nprintf(kb, nnumber, mode, "hwdpisel %d\n", kb->hw->dpi[index].current); } else if(!strcmp(setting, ":lift")){ // Get the mouse lift height nprintf(kb, nnumber, mode, "lift %d\n", mode->dpi.lift); } else if(!strcmp(setting, ":hwlift")){ // Get the hardware lift height HW_STANDARD; nprintf(kb, nnumber, mode, "hwlift %d\n", kb->hw->dpi[index].lift); } else if(!strcmp(setting, ":snap")){ // Get the angle snap status nprintf(kb, nnumber, mode, "snap %s\n", mode->dpi.snap ? "on" : "off"); } else if(!strcmp(setting, ":hwsnap")){ // Get the hardware angle snap status HW_STANDARD; nprintf(kb, nnumber, mode, "hwsnap %s\n", kb->hw->dpi[index].snap ? "on" : "off"); } }
void getinfo(usbdevice* kb, usbmode* mode, int nnumber, const char* setting){ if(!strcmp(setting, ":hello")){ if(kb && mode) return; nrprintf(nnumber, "hello\n"); return; } else if(!strcmp(setting, ":fps")){ if(kb && mode) return; nrprintf(nnumber, "fps %d\n", fps); return; } else if(!strcmp(setting, ":layout")){ if(kb && mode) nprintf(kb, nnumber, 0, "layout %s\n", getmapname(kb->profile.keymap)); else nrprintf(nnumber, "layout %s\n", getmapname(keymap_system)); return; } else if(!kb || !mode) // Only FPS and layout can be printed without an active mode return; usbprofile* profile = &kb->profile; if(!strcmp(setting, ":mode")){ // Get the current mode number nprintf(kb, nnumber, mode, "switch\n"); return; } else if(!strcmp(setting, ":rgb")){ // Get the current RGB settings char* rgb = printrgb(&mode->light, profile->keymap); nprintf(kb, nnumber, mode, "rgb %s\n", rgb); free(rgb); return; } else if(!strcmp(setting, ":rgbon")){ // Get the current RGB status if(mode->light.enabled) nprintf(kb, nnumber, mode, "rgb on\n"); else nprintf(kb, nnumber, mode, "rgb off\n"); return; } else if(!strcmp(setting, ":hwrgb")){ // Get the current hardware RGB settings if(!kb->hw) return; unsigned index = INDEX_OF(mode, profile->mode); // Make sure the mode number is valid HWMODE_OR_RETURN(kb, index); // Get the mode from the hardware store char* rgb = printrgb(kb->hw->light + index, profile->keymap); nprintf(kb, nnumber, mode, "hwrgb %s\n", rgb); free(rgb); return; } else if(!strcmp(setting, ":profilename")){ // Get the current profile name char* name = getprofilename(profile); nprintf(kb, nnumber, 0, "profilename %s\n", name[0] ? name : "Unnamed"); free(name); } else if(!strcmp(setting, ":name")){ // Get the current mode name char* name = getmodename(mode); nprintf(kb, nnumber, mode, "name %s\n", name[0] ? name : "Unnamed"); free(name); } else if(!strcmp(setting, ":hwprofilename")){ // Get the current hardware profile name if(!kb->hw) return; char* name = gethwprofilename(kb->hw); nprintf(kb, nnumber, 0, "hwprofilename %s\n", name[0] ? name : "Unnamed"); free(name); } else if(!strcmp(setting, ":hwname")){ // Get the current hardware mode name if(!kb->hw) return; unsigned index = INDEX_OF(mode, profile->mode); HWMODE_OR_RETURN(kb, index); char* name = gethwmodename(kb->hw, index); nprintf(kb, nnumber, mode, "hwname %s\n", name[0] ? name : "Unnamed"); free(name); } else if(!strcmp(setting, ":profileid")){ // Get the current profile ID char* guid = getid(&profile->id); int modified; memcpy(&modified, &profile->id.modified, sizeof(modified)); nprintf(kb, nnumber, 0, "profileid %s %x\n", guid, modified); free(guid); } else if(!strcmp(setting, ":id")){ // Get the current mode ID char* guid = getid(&mode->id); int modified; memcpy(&modified, &mode->id.modified, sizeof(modified)); nprintf(kb, nnumber, mode, "id %s %x\n", guid, modified); free(guid); } else if(!strcmp(setting, ":hwprofileid")){ // Get the current hardware profile ID if(!kb->hw) return; char* guid = getid(&kb->hw->id[0]); int modified; memcpy(&modified, &kb->hw->id[0].modified, sizeof(modified)); nprintf(kb, nnumber, 0, "hwprofileid %s %x\n", guid, modified); free(guid); } else if(!strcmp(setting, ":hwid")){ // Get the current hardware mode ID if(!kb->hw) return; unsigned index = INDEX_OF(mode, profile->mode); HWMODE_OR_RETURN(kb, index); char* guid = getid(&kb->hw->id[index + 1]); int modified; memcpy(&modified, &kb->hw->id[index + 1].modified, sizeof(modified)); nprintf(kb, nnumber, mode, "hwid %s %x\n", guid, modified); free(guid); } }