| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276 |
- #include "u8g2.h"
- #include <stdio.h>
- #define LUT_ARRAY_LEN 20
- #define LUT_WAVE_CNT 4
- /*
- level
- 0: neutral, middle
- 1: upper line
- 2: lower line
-
- */
- uint8_t lut_level[LUT_WAVE_CNT][LUT_ARRAY_LEN];
- uint8_t lut_time[LUT_ARRAY_LEN];
- #define LUT_DY 3
- uint8_t lut_time_to_width[16] =
- {
- 2, // 0
- 2, // 1
- 2, // 2
- 2, // 3
- 3, // 4
- 3, // 5
- 3, // 6
- 3, // 7
- 4, // 8
- 4, // 9
- 4, // 10
- 4, // 11
- 5, // 12
- 5, // 13
- 5, // 14
- 5, // 15
- };
- u8g2_uint_t get_dx(uint8_t i)
- {
- //return 5;
- return lut_time_to_width[lut_time[i]];
- }
- void read_lut(const uint8_t *lut)
- {
- uint8_t i;
- for ( i = 0; i < LUT_ARRAY_LEN; i++ )
- {
- lut_level[0][i] = lut[i] & 3;
- lut_level[1][i] = (lut[i]>>2) & 3;
- lut_level[2][i] = (lut[i]>>4) & 3;
- lut_level[3][i] = (lut[i]>>6) & 3;
-
- }
- for ( i = 0; i < LUT_ARRAY_LEN/2; i++ )
- {
- lut_time[i*2 + 0] = lut[LUT_ARRAY_LEN+i] & 15;
- lut_time[i*2 + 1] = (lut[LUT_ARRAY_LEN+i]>>4) & 15;
- }
- }
- void draw_lut_wave(u8g2_t *u8g2, uint8_t w, uint8_t cx, u8g2_uint_t y)
- {
- uint8_t i;
- u8g2_uint_t x1, y1;
- u8g2_uint_t x2, y2;
- x1 = 18;
- y1 = y;
- u8g2_DrawGlyph(u8g2, 2,y+2, (w&2)?'1':'0');
- u8g2_DrawGlyph(u8g2, 8,y+2, (w&1)?'1':'0');
- for( i = 0; i < LUT_ARRAY_LEN; i++ )
- {
- x2 = x1 + get_dx(i);
- y2 = y;
- if ( lut_level[w][i] == 1)
- y2 -= LUT_DY-1;
- else if ( lut_level[w][i] == 2 )
- y2 += LUT_DY-1;
- if ( y1 != y2 )
- u8g2_DrawLine(u8g2, x1, y1, x1, y2);
- u8g2_DrawHLine(u8g2, x1, y2, x2-x1+1);
-
- if ( i == cx )
- {
- u8g2_DrawHLine(u8g2, x1, y-LUT_DY-1, x2-x1+1);
- u8g2_DrawHLine(u8g2, x1, y+LUT_DY+1, x2-x1+1);
- }
-
- x1 = x2;
- y1 = y2;
- }
- }
- void draw_all_lut(u8g2_t *u8g2, uint8_t cx, uint8_t cy)
- {
- uint8_t i;
- uint16_t total;
- u8g2_uint_t x, y;
- u8g2_uint_t xs = 1;
- y = LUT_DY +1;
- for( i = 0; i < LUT_WAVE_CNT; i++ )
- {
- if ( i == cy )
- draw_lut_wave(u8g2, i, cx, y);
- else
- draw_lut_wave(u8g2, i, 255, y); // 255: no cursor
-
- y += (LUT_DY+2)*2;
- }
- total = 0;
- for( i = 0; i < LUT_ARRAY_LEN; i++ )
- total += lut_time[i];
- y+=1;
- if ( cy == LUT_WAVE_CNT )
- {
- u8g2_SetDrawColor(u8g2, 0);
- }
- else
- {
- u8g2_SetDrawColor(u8g2, 1);
- }
- x = u8g2_DrawStr(u8g2, xs, y, " TP[");
- x += u8g2_DrawStr(u8g2, x, y, u8x8_u8toa( cx, 2));
- x += u8g2_DrawStr(u8g2, x, y, "]=");
- x += u8g2_DrawStr(u8g2, x, y, u8x8_u8toa( lut_time[cx], 2));
- x += u8g2_DrawStr(u8g2, x, y, " ");
- x += u8g2_DrawStr(u8g2, x, y, " total=");
- x += u8g2_DrawStr(u8g2, x, y, u8x8_u16toa( total, 3));
- x += u8g2_DrawStr(u8g2, x, y, " ");
-
- y+=8;
- if ( cy == LUT_WAVE_CNT+1 )
- {
- u8g2_SetDrawColor(u8g2, 0);
- }
- else
- {
- u8g2_SetDrawColor(u8g2, 1);
- }
- x = u8g2_DrawStr(u8g2, xs, y, " Test ");
- y+=8;
- if ( cy == LUT_WAVE_CNT+2 )
- {
- u8g2_SetDrawColor(u8g2, 0);
- }
- else
- {
- u8g2_SetDrawColor(u8g2, 1);
- }
- x = u8g2_DrawStr(u8g2, xs, y, " Print ");
- u8g2_SetDrawColor(u8g2, 1);
-
- }
- void init_lut(void)
- {
- uint8_t i, j;
- for( i = 0; i < LUT_ARRAY_LEN; i++ )
- {
- for( j = 0; j < LUT_WAVE_CNT; j++ )
- lut_level[j][i] = 0;
- lut_time[i] = 0;
- }
-
- }
- uint8_t edit_lut(u8g2_t *u8g2)
- {
- uint8_t event;
- uint8_t cx, cy;
- u8g2_SetFont(u8g2, u8g2_font_5x7_mr);
- u8g2_SetFontMode(u8g2, 0);
- u8g2_SetFontDirection(u8g2, 0);
- cx = 0;
- cy = 0;
- for(;;)
- {
- u8g2_FirstPage(u8g2);
- do
- {
- draw_all_lut(u8g2, cx, cy);
- } while( u8g2_NextPage(u8g2) );
- for(;;)
- {
- event = u8x8_GetMenuEvent(u8g2_GetU8x8(u8g2));
- if ( event == U8X8_MSG_GPIO_MENU_SELECT )
- {
- if ( cx < LUT_ARRAY_LEN && cy < LUT_WAVE_CNT )
- {
- lut_level[cy][cx]++;
- if ( lut_level[cy][cx] >= 3 )
- lut_level[cy][cx] = 0;
- }
- else
- {
- if ( cy == LUT_WAVE_CNT )
- {
- lut_time[cx]++;
- if ( lut_time[cx] >= 16 )
- lut_time[cx] = 0;
- }
- }
- break;
- }
- else if ( event == U8X8_MSG_GPIO_MENU_HOME )
- return 0;
- else if ( event == U8X8_MSG_GPIO_MENU_NEXT )
- {
- cx++;
- if ( cx >= LUT_ARRAY_LEN )
- cx = 0;
- break;
- }
- else if ( event == U8X8_MSG_GPIO_MENU_DOWN )
- {
- cy++;
- if ( cy >= LUT_WAVE_CNT+3 )
- cy = 0;
- break;
- }
- else if ( event == U8X8_MSG_GPIO_MENU_PREV )
- {
- if ( cx == 0 )
- cx = LUT_ARRAY_LEN;
- cx--;
- break;
- }
- else if ( event == U8X8_MSG_GPIO_MENU_UP )
- {
- if ( cy == 0 )
- cy = LUT_WAVE_CNT+3;
- cy--;
- break;
- }
- }
- }
- return 0;
- }
- u8g2_t u8g2;
- const uint8_t LUTDefault_full[31] =
- {
- 0x50, 0xAA, 0x55, 0xAA, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0xFF, 0xFF, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
- };
- int main(void)
- {
- u8g2_SetupBuffer_SDL_128x64_4(&u8g2, &u8g2_cb_r0);
-
- u8x8_InitDisplay(u8g2_GetU8x8(&u8g2));
- u8x8_SetPowerSave(u8g2_GetU8x8(&u8g2), 0);
-
- init_lut();
- read_lut(LUTDefault_full);
- edit_lut(&u8g2);
-
-
- return 0;
- }
|