 3da8d46a07
			
		
	
	
		3da8d46a07
		
	
	
	
	
		
			
			* If RGBLIGHT_EFFECT_BREATHE_CENTER is undefined, use fixed breathe table instead of exp() and sin() * Change rgblight breathing table size to be easily selectable. add RGBLIGHT_BREATHE_TABLE_SIZE macro for customize breathing effect.
		
			
				
	
	
		
			49 lines
		
	
	
	
		
			2 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			49 lines
		
	
	
	
		
			2 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| //
 | |
| // calculate rgblight_effect_breathe_table[] values
 | |
| //
 | |
| // this is host program for quantum/rgblight.c:void rgblight_effect_breathing();
 | |
| //
 | |
| // example:
 | |
| //  $ edit util/rgblight_breathing_table_calc.c
 | |
| //  $ cc -o util/rgblight_breathing_table_calc util/rgblight_breathing_table_calc.c
 | |
| //  $ ./util/rgblight_breathing_table_calc > keyboards/KEYBOARD_NAME/keymaps/KEYMAP_NAME/rgblight_breathe_table.h
 | |
| //
 | |
| #include <stdio.h>
 | |
| #include <math.h>
 | |
| #include <stdint.h>
 | |
| 
 | |
| /// customize breeathing effect part ///////////////////////////
 | |
| #define RGBLIGHT_EFFECT_BREATHE_CENTER 1.85  // 1 to 2.7
 | |
| #define RGBLIGHT_EFFECT_BREATHE_MAX    255   // 0 to 255
 | |
| ////////////////////////////////////////////////////////////////
 | |
| 
 | |
| int main(void) {
 | |
|     int pos, step;
 | |
|     int table[256];
 | |
|     for (pos = 0; pos < 256; pos ++ ) {
 | |
|         table[pos] = (uint8_t)(
 | |
|               (exp(sin((pos/255.0)*M_PI))- RGBLIGHT_EFFECT_BREATHE_CENTER/M_E)
 | |
|               * (RGBLIGHT_EFFECT_BREATHE_MAX/(M_E-1/M_E))
 | |
|               );
 | |
|     }
 | |
|     printf("#ifndef RGBLIGHT_EFFECT_BREATHE_TABLE\n");
 | |
|     printf("#define RGBLIGHT_EFFECT_BREATHE_TABLE\n\n");
 | |
|     printf("const uint8_t rgblight_effect_breathe_table[] PROGMEM = {\n");
 | |
|     printf("  /* #define RGBLIGHT_EFFECT_BREATHE_CENTER   %.2f */\n", RGBLIGHT_EFFECT_BREATHE_CENTER);
 | |
|     printf("  /* #define RGBLIGHT_EFFECT_BREATHE_MAX      %d */\n", RGBLIGHT_EFFECT_BREATHE_MAX);
 | |
| 
 | |
|     for (int s = 0, step = (1<<s); s < 3 ; s += 1, step = (1<<s) ) {
 | |
|         printf("\n #if RGBLIGHT_BREATHE_TABLE_SIZE == %d\n",
 | |
|                s == 0 ? 256:(s== 1 ? 128: 64));
 | |
|         for (pos = 0; pos < 256; pos += step ) {
 | |
|             printf("  0x%x%s", table[pos], (pos+step)>=256?"":"," );
 | |
|             if ((pos+step) % 8 == 0)
 | |
|                 printf("\n");
 | |
|         }
 | |
|         printf(" #endif /* %d bytes table */\n", s == 0 ? 256:(s== 1 ? 128: 64));
 | |
|     }
 | |
|     printf("};\n");
 | |
|     printf("\nstatic const int table_scale = 256/sizeof(rgblight_effect_breathe_table);\n");
 | |
|     printf("\n#endif /* RGBLIGHT_EFFECT_BREATHE_TABLE */\n");
 | |
|     return 0;
 | |
| }
 |