/** * Write device file "mode_custom" * * Sets the keyboard to custom mode whenever the file is written to */ static ssize_t razer_attr_write_mode_custom(struct device *dev, struct device_attribute *attr, const char *buf, size_t count) { struct usb_interface *intf = to_usb_interface(dev->parent); struct usb_device *usb_dev = interface_to_usbdev(intf); razer_reset(usb_dev); razer_set_custom_mode(usb_dev); return count; }
int main(int argc,char *argv[]) { uid_t uid = getuid(); if(uid != 0) printf("This program needs root to work correctly.\n"); struct razer_chroma *chroma = razer_open(); if(!chroma) exit(1); razer_set_input_handler(chroma,input_handler); razer_set_custom_mode(chroma); razer_clear_all(chroma->keys); razer_update_keys(chroma,chroma->keys); for(int i=0;i<10;i++) keys_history[i] = -1; signal(SIGINT,stop); signal(SIGKILL,stop); signal(SIGTERM,stop); effect(chroma); razer_close(chroma); }
void razer_update_keys(struct razer_chroma *chroma, struct razer_keys *keys) { int i; if(!chroma->update_keys_file) razer_open_update_keys_file(chroma); if(chroma->update_keys_file) { for(i=0;i<6;i++) { if(keys->update_mask &(1<<i)) fwrite((void*)&keys->rows[i],sizeof(struct razer_rgb_row),1,chroma->update_keys_file); } } #ifdef USE_DEBUGGING else printf("error setting mode to custom\n"); #endif fflush(chroma->update_keys_file); if(keys->update_mask) razer_set_custom_mode(chroma); keys->update_mask=0; }
int main(int argc,char *argv[]) { uid_t uid = getuid(); if(uid != 0) printf("input example needs root to work correctly.\n"); struct razer_chroma *chroma = razer_open(NULL,NULL); if(!chroma) exit(1); system("stty -echo"); razer_set_event_handler(chroma,event_handler); razer_set_custom_mode(chroma); razer_clear_all(chroma->active_device->leds); razer_update_leds(chroma,chroma->active_device->leds); for(int i=0;i<10;i++) keys_history[i] = -1; signal(SIGINT,stop); signal(SIGKILL,stop); signal(SIGTERM,stop); effect(chroma); razer_close(chroma); system("stty echo"); }
int main(int argc,char *argv[]) { struct razer_chroma *kbd=razer_open(NULL,NULL); if(!kbd) { printf("failed to initialize!!!\n"); exit(0); } razer_set_custom_mode(kbd); razer_clear_all(kbd->active_device->leds); razer_update_leds(kbd, kbd->active_device->leds); struct razer_rgb color; struct razer_pos pos; while(1) { int cmd; scanf("%u", &cmd); if(cmd == 1) { int x = 0, y = 0; int ir, ig, ib; printf("Enter x y r g b: "); scanf("%u %u %u %u %u", &x, &y, &ir, &ig, &ib); printf("Setting key at [%u,%u] to #%x%x%x...", x, y, ir, ig, ib); color.r = ir; color.g = ig; color.b = ib; pos.x = x; pos.y = y; razer_set_led_pos(kbd->active_device->leds, &pos, &color); razer_update_leds(kbd, kbd->active_device->leds); printf("Done!\n"); } if(cmd == 2) { char targs[] = ""; //dziala, char targs[255] int ir, ig, ib; printf("Enter r g b: "); scanf("%u %u %u", &ir, &ig, &ib); printf("Enter str: "); scanf("%s", targs); printf("Setting keys of [%s] to %u %u %u...\n", targs, ir, ig, ib); color.r = ir; color.g = ig; color.b = ib; for(unsigned int i = 0; i < strlen(targs); i++) { printf("Setting %c...\n", targs[i]); razer_convert_ascii_to_pos(targs[i],&pos); razer_set_led_pos(kbd->active_device->leds,&pos,&color); } razer_update_leds(kbd, kbd->active_device->leds); printf("Done!\n"); } if(cmd == 3) { int ir, ig, ib; printf("Enter r g b: "); scanf("%u %u %u", &ir, &ig, &ib); color.r = ir; color.g = ig; color.b = ib; printf("Setting keys to %u %u %u...\n", ir, ig, ib); razer_set_all(kbd->active_device->leds, &color); razer_update_leds(kbd, kbd->active_device->leds); printf("Done!\n"); } if(cmd==0) break; } printf("Exiting..."); razer_close(kbd); }
struct razer_daemon *daemon_open(void) { //signal(SIGINT,stop); //signal(SIGKILL,stop); //signal(SIGTERM,stop); struct razer_daemon *daemon = (struct razer_daemon*)malloc(sizeof(struct razer_daemon)); daemon->chroma = NULL; daemon->running = 1; daemon->is_paused = 0; daemon->fps = 12; daemon->libs_uid = 1; daemon->libs = list_Create(0,0); daemon->effects_uid = 1; daemon->effects = list_Create(0,0); daemon->fx_render_nodes_uid = 1; daemon->fx_render_nodes = list_Create(0,0);//list of all render_nodes available daemon->is_render_nodes_dirty = 0; daemon->render_nodes = list_Create(0,0); if(!(daemon->chroma=razer_open())) { free(daemon->chroma); list_Close(daemon->libs); list_Close(daemon->fx_render_nodes); list_Close(daemon->render_nodes); list_Close(daemon->effects); free(daemon); return(NULL); } #ifdef USE_DBUS daemon->dbus = NULL; #ifdef USE_DEBUGGING printf("dbus: opened\n"); #endif if(!daemon_dbus_open(daemon)) { free(daemon->chroma); list_Close(daemon->libs); list_Close(daemon->fx_render_nodes); list_Close(daemon->render_nodes); list_Close(daemon->effects); free(daemon); return(NULL); } if(!daemon_dbus_announce(daemon)) { free(daemon->chroma); list_Close(daemon->libs); list_Close(daemon->fx_render_nodes); list_Close(daemon->render_nodes); list_Close(daemon->effects); free(daemon); return(NULL); } #endif razer_set_input_handler(daemon->chroma,daemon_input_event_handler); daemon->chroma->tag = daemon; daemon->frame_buffer = razer_create_rgb_frame(); daemon->frame_buffer_linked_uid = 0; daemon->return_render_node = NULL; //TODO remember what i wanted to achieve with this variable ... :-) razer_set_custom_mode(daemon->chroma); razer_clear_all(daemon->chroma->keys); razer_update_keys(daemon->chroma,daemon->chroma->keys); //TODO Move to configuration options (dbus race condition present) #ifdef USE_DEBUGGING struct daemon_lib *lib = daemon_load_fx_lib(daemon,"daemon/fx/pez2001_collection_debug.so"); #else //void *lib = daemon_load_fx_lib(daemon,"daemon/fx/pez2001_collection.so"); struct daemon_lib *lib = daemon_load_fx_lib(daemon,"/usr/share/razer_bcd/fx/pez2001_collection.so"); #endif if(lib) daemon_register_lib(daemon,lib); #ifdef USE_DEBUGGING struct daemon_lib *blib = daemon_load_fx_lib(daemon,"daemon/fx/pez2001_light_blast_debug.so"); #else struct daemon_lib *blib = daemon_load_fx_lib(daemon,"/usr/share/razer_bcd/fx/pez2001_light_blast.so"); #endif if(lib) daemon_register_lib(daemon,blib); //daemon->render_node = daemon_create_render_node(daemon,daemon_get_effect(daemon,2),-1,-1,0,"First Render Node","Default Render Node"); daemon->render_node = daemon_create_render_node(daemon,daemon_get_effect(daemon,11),-1,-1,0,"First Render Node","Default Render Node"); daemon_register_render_node(daemon,daemon->render_node); daemon_compute_render_nodes(daemon); daemon_connect_frame_buffer(daemon,daemon->render_node); /*daemon->render_node = daemon_create_render_node(daemon,daemon_get_effect(daemon,3),-1,-1,0,"Second Test Render Node","Additional Testing Render Node"); daemon_register_render_node(daemon,daemon->render_node); daemon_compute_render_nodes(daemon); */ // Catch SIGTERM struct sigaction sigterm_action; memset(&sigterm_action, 0, sizeof(struct sigaction)); sigterm_action.sa_handler = got_sigterm_signal; sigaction(SIGTERM, &sigterm_action, NULL); return(daemon); }