diff --git a/Core/Example/gfx_oled_example.c b/Core/Example/gfx_oled_example.c
index be678b3..9b73511 100644
--- a/Core/Example/gfx_oled_example.c
+++ b/Core/Example/gfx_oled_example.c
@@ -3,15 +3,15 @@
int menu_white_theme = 0;
//#define SINE_EXAMPLE
-//#define ECG_EXAMPLE
-#define PLAYER_EXAMPLE
+#define ECG_EXAMPLE
+//#define PLAYER_EXAMPLE
#define ECG_SIZE 550
// Примерный массив, симулирующий ЭКГ-сигнал (нормализованный от 0 до 1)
-const float ecg_data[ECG_SIZE] = {1.05893, 0.999357, 0.933132, 0.744792, 0.664672, 0.328846, 0.136133, -0.00837916, -0.131494,
+float ecg_data[ECG_SIZE] = {1.05893, 0.999357, 0.933132, 0.744792, 0.664672, 0.328846, 0.136133, -0.00837916, -0.131494,
-0.1437, -0.182276, -0.215992, -0.128979, -0.131278, -0.0675223, 0.0027252, 0.0467067, -0.078859, -0.0658536, 0.0626352,
-0.0462435, 0.0476623, 0.0535328, 0.122938, 0.0501136, 0.034033, 0.0919253, 0.108374, 0.0667457, 0.0351678, -0.00115748,
0.0896459, 0.0288452, -0.0102636, 0.136738, 0.0397245, 0.0856079, 0.141222, 0.0826385, 0.165799, 0.105852, 0.172638,
@@ -63,94 +63,15 @@ const float ecg_data[ECG_SIZE] = {1.05893, 0.999357, 0.933132, 0.744792, 0.66467
void GFX_Draw_LoopIcon(uint8_t *Buffer_Frame, uint8_t x, uint8_t y, uint8_t width, uint8_t height, uint8_t pxColor);
GFXIconsTypeDef icons;
-
-void Example_GFX_IconInit(void)
-{
- // play
- icons.StopPlay.stop.xPos1 = play_icon_x_left-1;
- icons.StopPlay.stop.yPos1 = play_icon_y_up;
- icons.StopPlay.stop.xPos2 = play_icon_x_left-1;
- icons.StopPlay.stop.yPos2 = play_icon_y_down;
- icons.StopPlay.stop.xPos3 = play_icon_x_rigth+1;
- icons.StopPlay.stop.yPos3 = play_icon_y_mid;
- icons.StopPlay.stop.pxColor = 1;
-
- // stop
- icons.StopPlay.play_lines[0].xPos_Start = play_icon_x_left+1;
- icons.StopPlay.play_lines[0].yPos_Start = play_icon_y_up;
- icons.StopPlay.play_lines[0].xPos_End = play_icon_x_left+1;
- icons.StopPlay.play_lines[0].yPos_End = play_icon_y_down;
- icons.StopPlay.play_lines[0].pxColor = 1;
- icons.StopPlay.play_lines[1].xPos_Start = play_icon_x_rigth;
- icons.StopPlay.play_lines[1].yPos_Start = play_icon_y_up;
- icons.StopPlay.play_lines[1].xPos_End = play_icon_x_rigth;
- icons.StopPlay.play_lines[1].yPos_End = play_icon_y_down;
- icons.StopPlay.play_lines[1].pxColor = 1;
-
- // stop/play pressed
- icons.StopPlay.PressedArea.selected_Width = selected_width;
- icons.StopPlay.PressedArea.xPos_Start = play_icon_x_left-1-selected_width;
- icons.StopPlay.PressedArea.yPos_Start = play_icon_y_up-selected_width;
- icons.StopPlay.PressedArea.area_Width = play_icon_x_rigth+2-(play_icon_x_left-1)+2*selected_width+1;
- icons.StopPlay.PressedArea.area_Height = play_icon_y_down-play_icon_y_up+2*selected_width+1;
-
- // forward
- icons.Forward.line.xPos_Start = forward_icon_x_rigth;
- icons.Forward.line.yPos_Start = forward_icon_y_up;
- icons.Forward.line.xPos_End = forward_icon_x_rigth;
- icons.Forward.line.yPos_End = forward_icon_y_down;
- icons.Forward.line.pxColor = 1;
- icons.Forward.trig.xPos1 = forward_icon_x_left;
- icons.Forward.trig.yPos1 = forward_icon_y_up;
- icons.Forward.trig.xPos2 = forward_icon_x_left;
- icons.Forward.trig.yPos2 = forward_icon_y_down;
- icons.Forward.trig.xPos3 = forward_icon_x_rigth-1;
- icons.Forward.trig.yPos3 = forward_icon_y_mid;
- icons.Forward.trig.pxColor = 1;
-
- // forward pressed
- icons.Forward.PressedArea.selected_Width = selected_width;
- icons.Forward.PressedArea.xPos_Start = forward_icon_x_left-selected_width;
- icons.Forward.PressedArea.yPos_Start = forward_icon_y_up-selected_width;
- icons.Forward.PressedArea.area_Width = forward_icon_x_rigth-(forward_icon_x_left)+2*selected_width+1;
- icons.Forward.PressedArea.area_Height = forward_icon_y_down-forward_icon_y_up+2*selected_width+1;
-
- // backward
- icons.Backward.line.xPos_Start = backward_icon_x_left;
- icons.Backward.line.yPos_Start = backward_icon_y_up;
- icons.Backward.line.xPos_End = backward_icon_x_left;
- icons.Backward.line.yPos_End = backward_icon_y_down;
- icons.Backward.line.pxColor = 1;
- icons.Backward.trig.xPos1 = backward_icon_x_rigth;
- icons.Backward.trig.yPos1 = backward_icon_y_up;
- icons.Backward.trig.xPos2 = backward_icon_x_rigth;
- icons.Backward.trig.yPos2 = backward_icon_y_down;
- icons.Backward.trig.xPos3 = backward_icon_x_left+1;
- icons.Backward.trig.yPos3 = backward_icon_y_mid;
- icons.Backward.trig.pxColor = 1;
-
- // backward pressed
- icons.Backward.PressedArea.xPos_Start = backward_icon_x_left-selected_width;
- icons.Backward.PressedArea.yPos_Start = backward_icon_y_up-selected_width;
- icons.Backward.PressedArea.area_Width = backward_icon_x_rigth-(backward_icon_x_left)+2*selected_width+1;
- icons.Backward.PressedArea.area_Height = backward_icon_y_down-backward_icon_y_up+2*selected_width+1;
-
- // loop
- icons.Loop.xPos_Start = loop_icon_x_start;
- icons.Loop.yPos_Start = loop_icon_y_start;
- icons.Loop.icon_Width = loop_icon_width;
- icons.Loop.icon_Height = loop_icon_height;
-
- // loop pressed
- icons.Loop.PressedArea.xPos_Start = loop_icon_x_start+3;
- icons.Loop.PressedArea.yPos_Start = loop_icon_y_start+3;
- icons.Loop.PressedArea.area_Width = loop_icon_width-5;
- icons.Loop.PressedArea.area_Height = loop_icon_height-5;
-// иконка зацикливания
- GFX_Draw_LoopIcon(oled_buf, loop_icon_x_start, loop_icon_y_start, loop_icon_width, loop_icon_height, 1);
-
-}
+GFX_PlotterFloatHandleTypeDef plotter;
+void Example_GFX_Init(void)
+{
+ Example_GFX_PlotterInit();
+ Example_GFX_IconInit();
+ oled_init();
+}
+
void Example_OLED_GFX_Update(PlayerTypeDef *player)
{
@@ -170,54 +91,11 @@ float ecg_cnt_step = 1;
float ecg_scale = 16;
void Example_GFX_CreateFrame(PlayerTypeDef *player)
{
-#if defined(SINE_EXAMPLE) || defined(ECG_EXAMPLE)
- static float sine_cnt;
- static int display_cnt;
- static int pix_y_prev = 0;
+#if defined(SINE_EXAMPLE) || defined(ECG_EXAMPLE)
+ GFX_Draw_Plotter(oled_buf, &plotter);
-#if defined(SINE_EXAMPLE)
- int pix_y = (int)((float)(sinf(sine_cnt)+shift)*((float)32/(1+shift)));
-#elif defined(ECG_EXAMPLE)
- int pix_y = (ecg_data[(int)ecg_cnt]*ecg_scale)+16;
- ecg_cnt += ecg_cnt_step;
- if(ecg_cnt > ECG_SIZE)
- ecg_cnt = 0;
-#endif
-
- if(pix_y - pix_y_prev > 0)
- {
- for(int y = pix_y_prev+1; y <= pix_y; y++)
- {
- if(y<=32)
- GFX_Draw_Pixel(oled_buf, display_cnt, 32 - y, 1);
- }
- }
- else if (pix_y - pix_y_prev < 0)
- {
- for(int y = pix_y_prev-1; y >= pix_y; y--)
- {
- if(y<=32)
- GFX_Draw_Pixel(oled_buf, display_cnt, 32 - y, 1);
- }
- }
- else
- GFX_Draw_Pixel(oled_buf, display_cnt, 32 - pix_y, 1);
-
- display_cnt++;
-
-
-
- sine_cnt += sine_cnt_step;
- pix_y_prev = pix_y;
-
- if(display_cnt>GFX_BufferWidth)
- {
- display_cnt = 0;
- GFX_Clean_Buffer_Frame(oled_buf, sizeof(oled_buf));
-
- }
#elif defined(PLAYER_EXAMPLE)
- GFX_Clean_Buffer_Frame(oled_buf, sizeof(oled_buf));
+ GFX_Clean_Buffer_Frame(oled_buf);
// название песни
GFX_Output_String(oled_buf, 0, 0, "Harry Potter Theme", 0, 0);
@@ -312,3 +190,115 @@ void GFX_Draw_LoopIcon(uint8_t *Buffer_Frame, uint8_t x, uint8_t y, uint8_t widt
__GFX_Draw_Line(Buffer_Frame, x + r+spot_width, y + height, x + r + arr_size+spot_width, y + height - arr_size, pxColor); // Нижняя стрелка
__GFX_Draw_Line(Buffer_Frame, x + r+spot_width, y + height, x + r + arr_size+spot_width, y + height + arr_size, pxColor);
}
+
+
+
+void Example_GFX_PlotterInit(void)
+{
+ plotter.xPos = 2;
+ plotter.yPos = 0;
+ plotter.plotWidth = 120;
+ plotter.plotHeight = 32;
+ plotter.plotXAxis = 1;
+ plotter.plotYAxis = 1;
+
+#if defined(SINE_EXAMPLE)
+
+ int pix_y = (int)((float)(sinf(sine_cnt)+shift)*((float)32/(1+shift)));
+#elif defined(ECG_EXAMPLE)
+
+ plotter.pDataPtr = ecg_data;
+ plotter.dataMax = 1.1;
+ plotter.dataSize = 550;
+ plotter.signedData = 1;
+ plotter.plotShift = 0;
+ plotter.plotSpeed = 2.5;
+#endif
+
+}
+void Example_GFX_IconInit(void)
+{
+ // play
+ icons.StopPlay.stop.xPos1 = play_icon_x_left-1;
+ icons.StopPlay.stop.yPos1 = play_icon_y_up;
+ icons.StopPlay.stop.xPos2 = play_icon_x_left-1;
+ icons.StopPlay.stop.yPos2 = play_icon_y_down;
+ icons.StopPlay.stop.xPos3 = play_icon_x_rigth+1;
+ icons.StopPlay.stop.yPos3 = play_icon_y_mid;
+ icons.StopPlay.stop.pxColor = 1;
+
+ // stop
+ icons.StopPlay.play_lines[0].xPos_Start = play_icon_x_left+1;
+ icons.StopPlay.play_lines[0].yPos_Start = play_icon_y_up;
+ icons.StopPlay.play_lines[0].xPos_End = play_icon_x_left+1;
+ icons.StopPlay.play_lines[0].yPos_End = play_icon_y_down;
+ icons.StopPlay.play_lines[0].pxColor = 1;
+ icons.StopPlay.play_lines[1].xPos_Start = play_icon_x_rigth;
+ icons.StopPlay.play_lines[1].yPos_Start = play_icon_y_up;
+ icons.StopPlay.play_lines[1].xPos_End = play_icon_x_rigth;
+ icons.StopPlay.play_lines[1].yPos_End = play_icon_y_down;
+ icons.StopPlay.play_lines[1].pxColor = 1;
+
+ // stop/play pressed
+ icons.StopPlay.PressedArea.selected_Width = selected_width;
+ icons.StopPlay.PressedArea.xPos_Start = play_icon_x_left-1-selected_width;
+ icons.StopPlay.PressedArea.yPos_Start = play_icon_y_up-selected_width;
+ icons.StopPlay.PressedArea.area_Width = play_icon_x_rigth+2-(play_icon_x_left-1)+2*selected_width+1;
+ icons.StopPlay.PressedArea.area_Height = play_icon_y_down-play_icon_y_up+2*selected_width+1;
+
+ // forward
+ icons.Forward.line.xPos_Start = forward_icon_x_rigth;
+ icons.Forward.line.yPos_Start = forward_icon_y_up;
+ icons.Forward.line.xPos_End = forward_icon_x_rigth;
+ icons.Forward.line.yPos_End = forward_icon_y_down;
+ icons.Forward.line.pxColor = 1;
+ icons.Forward.trig.xPos1 = forward_icon_x_left;
+ icons.Forward.trig.yPos1 = forward_icon_y_up;
+ icons.Forward.trig.xPos2 = forward_icon_x_left;
+ icons.Forward.trig.yPos2 = forward_icon_y_down;
+ icons.Forward.trig.xPos3 = forward_icon_x_rigth-1;
+ icons.Forward.trig.yPos3 = forward_icon_y_mid;
+ icons.Forward.trig.pxColor = 1;
+
+ // forward pressed
+ icons.Forward.PressedArea.selected_Width = selected_width;
+ icons.Forward.PressedArea.xPos_Start = forward_icon_x_left-selected_width;
+ icons.Forward.PressedArea.yPos_Start = forward_icon_y_up-selected_width;
+ icons.Forward.PressedArea.area_Width = forward_icon_x_rigth-(forward_icon_x_left)+2*selected_width+1;
+ icons.Forward.PressedArea.area_Height = forward_icon_y_down-forward_icon_y_up+2*selected_width+1;
+
+ // backward
+ icons.Backward.line.xPos_Start = backward_icon_x_left;
+ icons.Backward.line.yPos_Start = backward_icon_y_up;
+ icons.Backward.line.xPos_End = backward_icon_x_left;
+ icons.Backward.line.yPos_End = backward_icon_y_down;
+ icons.Backward.line.pxColor = 1;
+ icons.Backward.trig.xPos1 = backward_icon_x_rigth;
+ icons.Backward.trig.yPos1 = backward_icon_y_up;
+ icons.Backward.trig.xPos2 = backward_icon_x_rigth;
+ icons.Backward.trig.yPos2 = backward_icon_y_down;
+ icons.Backward.trig.xPos3 = backward_icon_x_left+1;
+ icons.Backward.trig.yPos3 = backward_icon_y_mid;
+ icons.Backward.trig.pxColor = 1;
+
+ // backward pressed
+ icons.Backward.PressedArea.xPos_Start = backward_icon_x_left-selected_width;
+ icons.Backward.PressedArea.yPos_Start = backward_icon_y_up-selected_width;
+ icons.Backward.PressedArea.area_Width = backward_icon_x_rigth-(backward_icon_x_left)+2*selected_width+1;
+ icons.Backward.PressedArea.area_Height = backward_icon_y_down-backward_icon_y_up+2*selected_width+1;
+
+ // loop
+ icons.Loop.xPos_Start = loop_icon_x_start;
+ icons.Loop.yPos_Start = loop_icon_y_start;
+ icons.Loop.icon_Width = loop_icon_width;
+ icons.Loop.icon_Height = loop_icon_height;
+
+ // loop pressed
+ icons.Loop.PressedArea.xPos_Start = loop_icon_x_start+3;
+ icons.Loop.PressedArea.yPos_Start = loop_icon_y_start+3;
+ icons.Loop.PressedArea.area_Width = loop_icon_width-5;
+ icons.Loop.PressedArea.area_Height = loop_icon_height-5;
+// иконка зацикливания
+ GFX_Draw_LoopIcon(oled_buf, loop_icon_x_start, loop_icon_y_start, loop_icon_width, loop_icon_height, 1);
+
+}
diff --git a/Core/Example/gfx_oled_example.h b/Core/Example/gfx_oled_example.h
index e3a7b62..6be1697 100644
--- a/Core/Example/gfx_oled_example.h
+++ b/Core/Example/gfx_oled_example.h
@@ -105,6 +105,8 @@ typedef struct
}GFXIconsTypeDef;
+void Example_GFX_Init(void);
+void Example_GFX_PlotterInit(void);
void Example_GFX_IconInit(void);
void Example_GFX_CreateFrame(PlayerTypeDef *player);
void Example_OLED_GFX_Update(PlayerTypeDef *player);
diff --git a/Core/GFX_Lib/gfx_lib.c b/Core/GFX_Lib/gfx_lib.c
index 855b446..583bff9 100644
--- a/Core/GFX_Lib/gfx_lib.c
+++ b/Core/GFX_Lib/gfx_lib.c
@@ -17,13 +17,35 @@
uint8_t chSpacing = 0; //межсимвольный интервал в px
/* функция очистки буфера кадра */
-void GFX_Clean_Buffer_Frame(uint8_t *Buffer_Frame, uint32_t Buffer_Frame_Size)
+void GFX_Clean_Buffer_Frame(uint8_t *Buffer_Frame)
{
if(Buffer_Frame == NULL)
return;
- memset(Buffer_Frame, 0x00, Buffer_Frame_Size);
+ memset(Buffer_Frame, 0x00, GFX_BufferHeight*GFX_BufferWidth/8);
}
+/* Функция очистки прямоугольной области */
+void GFX_Clean_Area(uint8_t *Buffer_Frame, uint16_t xPos_Start, uint16_t yPos_Start, uint16_t width, uint16_t height)
+{
+ if(Buffer_Frame == NULL)
+ return;
+
+ if ((xPos_Start+width > GFX_BufferWidth)||(xPos_Start < 0)||(yPos_Start+ height> GFX_BufferHeight)||(yPos_Start < 0))
+ {
+ //если значения по x и y больше пределов то выходим из функции
+ return;
+ }
+ for (uint16_t xPos = xPos_Start; xPos < xPos_Start + width; xPos++)
+ {
+ for(uint16_t yPos = yPos_Start; yPos < yPos_Start + height; yPos++)
+ {
+ uint16_t arrayPos = xPos + ((yPos/8)*GFX_BufferWidth);
+ Buffer_Frame[arrayPos] &= ~(1 << (yPos % 8)); // Очищаем бит, отвечающий за пиксель
+ }
+ }
+}
+
+
/* функция прорисовки пикселя */
void GFX_Draw_Pixel(uint8_t *Buffer_Frame, uint8_t xPos, uint8_t yPos, uint8_t pxColor)
{
@@ -377,6 +399,17 @@ void GFX_Draw_Triangle(uint8_t *Buffer_Frame, GFX_TriangleHandleTypeDef *hTriang
__GFX_Draw_Line(Buffer_Frame, xPos2, yPos2, xPos3, yPos3, pxColor);
__GFX_Draw_Line(Buffer_Frame, xPos3, yPos3, xPos1, yPos1, pxColor);
}
+/* функция рисования стрелки */
+void GFX_Draw_Arrow(uint8_t *Buffer_Frame, GFX_ArrowHandleTypeDef *hArrow)
+{
+ uint8_t xPos = hArrow->xPos;
+ uint8_t yPos = hArrow->yPos;
+ uint8_t size = hArrow->size;
+ uint16_t angle = hArrow->angle;
+ uint8_t pxColor = hArrow->pxColor;
+
+ __GFX_Draw_Arrow(Buffer_Frame, xPos, yPos, size, angle, pxColor);
+}
/* Функция рисования дуги (четверти окружности) */
void GFX_Draw_Arc(uint8_t *Buffer_Frame, GFX_ArcHandleTypeDef *hArc)
@@ -401,6 +434,116 @@ void GFX_Draw_Arc(uint8_t *Buffer_Frame, GFX_ArcHandleTypeDef *hArc)
}
}
+
+/* Функция вывода графика */
+void GFX_Draw_Plotter(uint8_t *Buffer_Frame, GFX_PlotterFloatHandleTypeDef *hPlot)
+{
+ if((Buffer_Frame == NULL) || (hPlot == NULL))
+ return;
+ if((hPlot->plotHeight == NULL) || (hPlot->plotWidth == NULL))
+ return;
+ if((hPlot->yPos + hPlot->plotHeight == NULL) || (hPlot->xPos + hPlot->plotWidth == NULL))
+ return;
+
+ if(hPlot->__initialized == 0)
+ {
+ hPlot->__initialized = 1;
+ hPlot->plotInd = 0;
+ GFX_Clean_Buffer_Frame(Buffer_Frame);
+ if(hPlot->plotXAxis)
+ {
+ __GFX_Draw_Line(Buffer_Frame, hPlot->xPos, hPlot->yPos+hPlot->plotHeight/2, hPlot->xPos+hPlot->plotWidth-1, hPlot->yPos+hPlot->plotHeight/2, 1);
+ __GFX_Draw_Arrow(Buffer_Frame, hPlot->xPos+hPlot->plotWidth-1, hPlot->yPos+hPlot->plotHeight/2, 2, 0, 1);
+
+ }
+ if(hPlot->plotYAxis)
+ {
+ __GFX_Draw_Line(Buffer_Frame, hPlot->xPos, hPlot->yPos, hPlot->xPos, hPlot->yPos+hPlot->plotHeight-1, 1);
+ __GFX_Draw_Arrow(Buffer_Frame, hPlot->xPos, hPlot->yPos, 2, 90, 1);
+ }
+ if(hPlot->plotFrame)
+ {
+ __GFX_Draw_Rectangle(Buffer_Frame, hPlot->xPos, hPlot->yPos, hPlot->plotWidth-1, hPlot->plotHeight-1, 1);
+ }
+ }
+
+
+ /* Подготовка к выводу графика */
+ if((hPlot->pixX < hPlot->xPos) || (hPlot->pixX >= hPlot->plotWidth))
+ {
+ hPlot->pixX = hPlot->xPos;
+ GFX_Clean_Area(Buffer_Frame, hPlot->xPos, hPlot->yPos, hPlot->plotWidth, hPlot->plotHeight);
+
+ if(hPlot->plotXAxis)
+ {
+ __GFX_Draw_Line(Buffer_Frame, hPlot->xPos, hPlot->yPos+hPlot->plotHeight/2, hPlot->xPos+hPlot->plotWidth-1, hPlot->yPos+hPlot->plotHeight/2, 1);
+ __GFX_Draw_Arrow(Buffer_Frame, hPlot->xPos+hPlot->plotWidth-1, hPlot->yPos+hPlot->plotHeight/2, 2, 0, 1);
+
+ }
+ if(hPlot->plotYAxis)
+ {
+ __GFX_Draw_Line(Buffer_Frame, hPlot->xPos, hPlot->yPos, hPlot->xPos, hPlot->yPos+hPlot->plotHeight-1, 1);
+ __GFX_Draw_Arrow(Buffer_Frame, hPlot->xPos, hPlot->yPos, 2, 90, 1);
+ }
+ if(hPlot->plotFrame)
+ {
+ __GFX_Draw_Rectangle(Buffer_Frame, hPlot->xPos, hPlot->yPos, hPlot->plotWidth-1, hPlot->plotHeight-1, 1);
+ }
+ }
+
+
+ /* Расчет позиции пикселя */
+ float pix_y_float = (hPlot->pDataPtr[(int)hPlot->plotInd]);
+ // масштабирование под размеры графика
+ hPlot->pixY = (pix_y_float/hPlot->dataMax)*(hPlot->plotHeight);
+ // если график должен быть знаковым, то уменьшаем машстаб еще в два раза
+ if(hPlot->signedData)
+ hPlot->pixY = (hPlot->pixY + hPlot->plotHeight)/2;
+ // инвертирование y потому что он считается сверху вниз
+ uint8_t plot_y_down = hPlot->yPos + hPlot->plotHeight;
+ hPlot->pixY = plot_y_down - hPlot->pixY;
+ // Сдвиг графика
+ hPlot->pixY += hPlot->plotShift;
+
+
+ /* Вывод пикселя позиции пикселя */
+ // Передний фронт
+ if(hPlot->pixY - hPlot->prevPixY > 0)
+ {
+ /* Цикл для заполнения пикселей по вертикали, когда фронт очень резкий */
+ for(int y = hPlot->prevPixY+1; y <= hPlot->pixY; y++)
+ {
+ if((y<=hPlot->yPos+hPlot->plotHeight) && (y>=hPlot->yPos))
+ GFX_Draw_Pixel(Buffer_Frame, hPlot->pixX, y, 1);
+ }
+ }// Задний фронт
+ else if (hPlot->pixY - hPlot->prevPixY < 0)
+ {
+ /* Цикл для заполнения пикселей по вертикали, когда фронт очень резкий */
+ for(int y = hPlot->prevPixY-1; y >= hPlot->pixY; y--)
+ {
+ if((y<=hPlot->yPos+hPlot->plotHeight) && (y>=hPlot->yPos))
+ GFX_Draw_Pixel(Buffer_Frame, hPlot->pixX, y, 1);
+ }
+ }// Плато
+ else
+ {
+ if((hPlot->pixY<=hPlot->yPos+hPlot->plotHeight) && (hPlot->pixY>=hPlot->yPos))
+ GFX_Draw_Pixel(Buffer_Frame, hPlot->pixX, hPlot->pixY, 1);
+ }
+
+ /* Смещение графика далее */
+ hPlot->pixX++;
+ hPlot->plotInd += hPlot->plotSpeed;
+ if(hPlot->plotInd >= hPlot->dataSize)
+ hPlot->plotInd -= hPlot->dataSize;
+
+ if(hPlot->plotInd < 0)
+ hPlot->plotInd += hPlot->dataSize;
+
+ hPlot->prevPixY = hPlot->pixY;
+}
+
/* Функция инвертирования прямоугольной области */
void GFX_Invertion_Display(uint8_t *Buffer_Frame)
{
@@ -547,6 +690,66 @@ void __GFX_Draw_Triangle(uint8_t *Buffer_Frame,
__GFX_Draw_Line(Buffer_Frame, xPos3, yPos3, xPos1, yPos1, pxColor);
}
+/* функция рисования стрелки */
+void __GFX_Draw_Arrow(uint8_t *Buffer_Frame, uint8_t xPos, uint8_t yPos, uint8_t size, uint16_t angle, uint8_t pxColor)
+{
+ int16_t x1, y1, x2, y2, x3, y3;
+
+ if(angle == 0) // >
+ {
+ x1 = xPos;
+ y1 = yPos;
+ x2 = xPos - size;
+ y2 = yPos - size;
+ x3 = xPos - size;
+ y3 = yPos + size;
+ }
+ else if(angle == 180) // <
+ {
+ x1 = xPos;
+ y1 = yPos;
+ x2 = xPos + size;
+ y2 = yPos - size;
+ x3 = xPos + size;
+ y3 = yPos + size;
+ }
+ else if(angle == 270) // ^
+ {
+ x1 = xPos;
+ y1 = yPos;
+ x2 = xPos - size;
+ y2 = yPos - size;
+ x3 = xPos + size;
+ y3 = yPos - size;
+
+ }
+ else if(angle == 90) // v
+ {
+ x1 = xPos;
+ y1 = yPos;
+ x2 = xPos - size;
+ y2 = yPos + size;
+ x3 = xPos + size;
+ y3 = yPos + size;
+
+ }
+
+ if(x1 < 0)
+ x1 = 0;
+ if(x2 < 0)
+ x2 = 0;
+ if(x3 < 0)
+ x3 = 0;
+ if(y1 < 0)
+ y1 = 0;
+ if(y2 < 0)
+ y2 = 0;
+ if(y3 < 0)
+ y3 = 0;
+
+ __GFX_Draw_Line(Buffer_Frame, x1, y1, x2, y2, pxColor);
+ __GFX_Draw_Line(Buffer_Frame, x1, y1, x3, y3, pxColor);
+}
/* Функция рисования дуги (четверти окружности) */
void __GFX_Draw_Arc(uint8_t *Buffer_Frame, uint8_t xPos, uint8_t yPos, uint8_t radius, uint16_t startAngle, uint16_t endAngle, uint8_t pxColor)
{
diff --git a/Core/GFX_Lib/gfx_lib.h b/Core/GFX_Lib/gfx_lib.h
index f1d6f87..0fb1a1f 100644
--- a/Core/GFX_Lib/gfx_lib.h
+++ b/Core/GFX_Lib/gfx_lib.h
@@ -31,8 +31,6 @@ typedef struct
uint8_t yPos_End;
uint8_t pxColor;
}GFX_LineHandleTypeDef;
-
-
typedef struct
{
uint8_t xPos_Start;
@@ -51,7 +49,6 @@ typedef struct
uint8_t pxColor;
uint8_t Filled;
}GFX_CircleHandleTypeDef;
-
typedef struct
{
uint8_t xPos1;
@@ -63,6 +60,17 @@ typedef struct
uint8_t pxColor;
uint8_t Filled;
}GFX_TriangleHandleTypeDef;
+
+typedef struct
+{
+ uint8_t xPos;
+ uint8_t yPos;
+ uint8_t size;
+ uint16_t angle;
+ uint8_t pxColor;
+ uint8_t Filled;
+}GFX_ArrowHandleTypeDef;
+
typedef struct
{
uint8_t xPos;
@@ -74,10 +82,36 @@ typedef struct
uint8_t Filled;
}GFX_ArcHandleTypeDef;
+typedef struct
+{
+ uint8_t xPos;
+ uint8_t yPos;
+ uint8_t plotHeight;
+ uint8_t plotWidth;
+
+ float *pDataPtr;
+ uint32_t dataSize;
+ float dataMax;
+
+ float plotSpeed;
+ float plotInd;
+ uint8_t plotShift;
+ uint8_t pixX;
+ int32_t pixY;
+ uint8_t prevPixY;
+
+ unsigned signedData:1;
+ unsigned plotFrame:1;
+ unsigned plotXAxis:1;
+ unsigned plotYAxis:1;
+ unsigned __initialized:1;
+}GFX_PlotterFloatHandleTypeDef;
+
/* прототипы функций */
-void GFX_Clean_Buffer_Frame(uint8_t *Buffer_Frame, uint32_t Buffer_Frame_Size);
+void GFX_Clean_Buffer_Frame(uint8_t *Buffer_Frame);
+void GFX_Clean_Area(uint8_t *Buffer_Frame, uint16_t xPos_Start, uint16_t yPos_Start, uint16_t width, uint16_t height);
void GFX_Draw_Pixel(uint8_t *Buffer_Frame, uint8_t xPos, uint8_t yPos, uint8_t pxColor);
void GFX_Invertion_Area(uint8_t *Buffer_Frame, uint16_t xPos_Start, uint16_t yPos_Start, uint16_t width, uint16_t height);
void GFX_Invertion_Display(uint8_t *Buffer_Frame);
@@ -90,7 +124,9 @@ void GFX_Draw_Line(uint8_t *Buffer_Frame, GFX_LineHandleTypeDef *hLine);
void GFX_Draw_Rectangle(uint8_t *Buffer_Frame, GFX_RectangleHandleTypeDef *hRectangle);
void GFX_Draw_Circle(uint8_t *Buffer_Frame, GFX_CircleHandleTypeDef *hCircle);
void GFX_Draw_Triangle(uint8_t *Buffer_Frame, GFX_TriangleHandleTypeDef *hTriangle);
+void GFX_Draw_Arrow(uint8_t *Buffer_Frame, GFX_ArrowHandleTypeDef *hArrow);
void GFX_Draw_Arc(uint8_t *Buffer_Frame, GFX_ArcHandleTypeDef *hArc);
+void GFX_Draw_Plotter(uint8_t *Buffer_Frame, GFX_PlotterFloatHandleTypeDef *hPlot);
@@ -104,5 +140,6 @@ void __GFX_Draw_Triangle(uint8_t *Buffer_Frame,
uint8_t xPos2, uint8_t yPos2,
uint8_t xPos3, uint8_t yPos3,
uint8_t pxColor);
+void __GFX_Draw_Arrow(uint8_t *Buffer_Frame, uint8_t xPos, uint8_t yPos, uint8_t size, uint16_t angle, uint8_t pxColor);
void __GFX_Draw_Arc(uint8_t *Buffer_Frame, uint8_t xPos, uint8_t yPos, uint8_t radius, uint16_t startAngle, uint16_t endAngle, uint8_t pxColor);
#endif /* INC_PIXEL_GRAPHICS_H_ */
diff --git a/Core/Src/main.c b/Core/Src/main.c
index 014972d..922de07 100644
--- a/Core/Src/main.c
+++ b/Core/Src/main.c
@@ -90,7 +90,7 @@ int main(void)
MX_I2C1_Init();
/* USER CODE BEGIN 2 */
Menu_Control_Init(&player);
- Example_GFX_IconInit();
+ Example_GFX_Init();
/* USER CODE END 2 */
/* Infinite loop */
diff --git a/MDK-ARM/gfx_lcd.uvguix.I b/MDK-ARM/gfx_lcd.uvguix.I
index 3613562..2d91afe 100644
--- a/MDK-ARM/gfx_lcd.uvguix.I
+++ b/MDK-ARM/gfx_lcd.uvguix.I
@@ -15,7 +15,7 @@
38003
Registers
- 122 100
+ 122 78
346
@@ -70,7 +70,7 @@
466
Source Browser
500
- 166
+ 300
@@ -93,25 +93,25 @@
2
3
- -32000
- -32000
+ -1
+ -1
-1
-1
- 879
- 500
- 1760
- 1616
+ 44
+ -71
+ 1189
+ 737
0
- 1268
- 0100000004000000010000000100000001000000010000000000000002000000000000000100000001000000000000002800000028000000010000000B000000020000000100000047463A5C576F726B5C50726F6A656374735C53544D5C456C656D656E746172795C6766785F6C63645C436F72655C4578616D706C655C6766785F6F6C65645F6578616D706C652E6800000000126766785F6F6C65645F6578616D706C652E6800000000C5D4F200FFFFFFFF45463A5C576F726B5C50726F6A656374735C53544D5C456C656D656E746172795C6766785F6C63645C4D444B2D41524D5C737461727475705F73746D33326631303378622E730000000015737461727475705F73746D33326631303378622E7300000000FFDC7800FFFFFFFF37463A5C576F726B5C50726F6A656374735C53544D5C456C656D656E746172795C6766785F6C63645C436F72655C5372635C6D61696E2E6300000000066D61696E2E6300000000BECEA100FFFFFFFF45463A5C576F726B5C50726F6A656374735C53544D5C456C656D656E746172795C6766785F6C63645C436F72655C4578616D706C655C6D656E755F696E746572666163652E6300000000106D656E755F696E746572666163652E6300000000F0A0A100FFFFFFFF43463A5C576F726B5C50726F6A656374735C53544D5C456C656D656E746172795C6766785F6C63645C436F72655C4578616D706C655C67656E6572616C5F6770696F2E63000000000E67656E6572616C5F6770696F2E6300000000BCA8E100FFFFFFFF3F463A5C576F726B5C50726F6A656374735C53544D5C456C656D656E746172795C6766785F6C63645C436F72655C4F4C45445F4472697665725C6F6C65642E6300000000066F6C65642E6300000000F7B88600FFFFFFFF3F463A5C576F726B5C50726F6A656374735C53544D5C456C656D656E746172795C6766785F6C63645C436F72655C4F4C45445F4472697665725C6F6C65642E6800000000066F6C65642E6800000000D9ADC200FFFFFFFF5D463A5C576F726B5C50726F6A656374735C53544D5C456C656D656E746172795C6766785F6C63645C447269766572735C53544D3332463178785F48414C5F4472697665725C5372635C73746D3332663178785F68616C5F6770696F2E63000000001473746D3332663178785F68616C5F6770696F2E6300000000A5C2D700FFFFFFFF47463A5C576F726B5C50726F6A656374735C53544D5C456C656D656E746172795C6766785F6C63645C436F72655C4578616D706C655C6766785F6F6C65645F6578616D706C652E6300000000126766785F6F6C65645F6578616D706C652E6300000000B3A6BE00FFFFFFFF43463A5C576F726B5C50726F6A656374735C53544D5C456C656D656E746172795C6766785F6C63645C436F72655C4578616D706C655C67656E6572616C5F6770696F2E68000000000E67656E6572616C5F6770696F2E6800000000EAD6A300FFFFFFFF3E463A5C576F726B5C50726F6A656374735C53544D5C456C656D656E746172795C6766785F6C63645C436F72655C4746585F4C69625C6766785F6C69622E6300000000096766785F6C69622E6300000000EAD6A300FFFFFFFF0100000010000000C5D4F200FFDC7800BECEA100F0A0A100BCA8E1009CC1B600F7B88600D9ADC200A5C2D700B3A6BE00EAD6A300F6FA7D00B5E99D005FC3CF00C1838300CACAD5000100000000000000020000000F010000660000009006000095020000
+ 1502
+ 0100000004000000010000000100000001000000010000000000000002000000000000000100000001000000000000002800000028000000010000000E000000080000000100000047463A5C576F726B5C50726F6A656374735C53544D5C456C656D656E746172795C6766785F6C63645C436F72655C4578616D706C655C6766785F6F6C65645F6578616D706C652E6800000000126766785F6F6C65645F6578616D706C652E6800000000C5D4F200FFFFFFFF45463A5C576F726B5C50726F6A656374735C53544D5C456C656D656E746172795C6766785F6C63645C4D444B2D41524D5C737461727475705F73746D33326631303378622E730000000015737461727475705F73746D33326631303378622E7300000000FFDC7800FFFFFFFF37463A5C576F726B5C50726F6A656374735C53544D5C456C656D656E746172795C6766785F6C63645C436F72655C5372635C6D61696E2E6300000000066D61696E2E6300000000BECEA100FFFFFFFF45463A5C576F726B5C50726F6A656374735C53544D5C456C656D656E746172795C6766785F6C63645C436F72655C4578616D706C655C6D656E755F696E746572666163652E6300000000106D656E755F696E746572666163652E6300000000F0A0A100FFFFFFFF43463A5C576F726B5C50726F6A656374735C53544D5C456C656D656E746172795C6766785F6C63645C436F72655C4578616D706C655C67656E6572616C5F6770696F2E63000000000E67656E6572616C5F6770696F2E6300000000BCA8E100FFFFFFFF3F463A5C576F726B5C50726F6A656374735C53544D5C456C656D656E746172795C6766785F6C63645C436F72655C4F4C45445F4472697665725C6F6C65642E6300000000066F6C65642E63000000009CC1B600FFFFFFFF3F463A5C576F726B5C50726F6A656374735C53544D5C456C656D656E746172795C6766785F6C63645C436F72655C4F4C45445F4472697665725C6F6C65642E6800000000066F6C65642E6800000000F7B88600FFFFFFFF5D463A5C576F726B5C50726F6A656374735C53544D5C456C656D656E746172795C6766785F6C63645C447269766572735C53544D3332463178785F48414C5F4472697665725C5372635C73746D3332663178785F68616C5F6770696F2E63000000001473746D3332663178785F68616C5F6770696F2E6300000000D9ADC200FFFFFFFF47463A5C576F726B5C50726F6A656374735C53544D5C456C656D656E746172795C6766785F6C63645C436F72655C4578616D706C655C6766785F6F6C65645F6578616D706C652E6300000000126766785F6F6C65645F6578616D706C652E6300000000A5C2D700FFFFFFFF43463A5C576F726B5C50726F6A656374735C53544D5C456C656D656E746172795C6766785F6C63645C436F72655C4578616D706C655C67656E6572616C5F6770696F2E68000000000E67656E6572616C5F6770696F2E6800000000B3A6BE00FFFFFFFF3E463A5C576F726B5C50726F6A656374735C53544D5C456C656D656E746172795C6766785F6C63645C436F72655C4746585F4C69625C6766785F6C69622E6300000000096766785F6C69622E6300000000EAD6A300FFFFFFFF3E463A5C576F726B5C50726F6A656374735C53544D5C456C656D656E746172795C6766785F6C63645C436F72655C4746585F4C69625C6766785F6C69622E6800000000096766785F6C69622E6800000000F6FA7D00FFFFFFFF28433A5C4B65696C5F76355C41524D5C41524D434C414E475C696E636C7564655C737464696E742E680000000008737464696E742E6800000000B5E99D00FFFFFFFF37463A5C576F726B5C50726F6A656374735C53544D5C456C656D656E746172795C6766785F6C63645C436F72655C5372635C6770696F2E6300000000066770696F2E63000000005FC3CF00FFFFFFFF0100000010000000C5D4F200FFDC7800BECEA100F0A0A100BCA8E1009CC1B600F7B88600D9ADC200A5C2D700B3A6BE00EAD6A300F6FA7D00B5E99D005FC3CF00C1838300CACAD5000100000000000000020000000F010000660000009006000095020000
@@ -1710,11 +1710,11 @@
0
16
- 0400000000000000D50300001C000000
+ 0000000000000000D10300001C000000
16
- 0A0000000A0000006E0000006E000000
+ E7FFFFFF3D000000B503000075000000
@@ -1747,7 +1747,7 @@
476
0
8192
- 1
+ 2
16
000000001C000000E701000038000000
@@ -1767,10 +1767,10 @@
612
0
8192
- 2
+ 1
16
- 00000000380000006F02000054000000
+ 000000001C0000006F02000038000000
16
@@ -1805,8 +1805,8 @@
59392
File
- 2629
- 00200000010000002800FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000000000000000000000000000000000000000100000001000000018001E100000000000001000000000000000000000000000000000100000001000000018003E1000000000000020000000000000000000000000000000001000000010000000180CD7F0000000000000300000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018023E100000000040004000000000000000000000000000000000100000001000000018022E100000000040005000000000000000000000000000000000100000001000000018025E10000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001802BE10000000004000700000000000000000000000000000000010000000100000001802CE10000000004000800000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001807A8A0000000000000900000000000000000000000000000000010000000100000001807B8A0000000004000A00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180D3B00000000000000B000000000000000000000000000000000100000001000000018015B10000000004000C0000000000000000000000000000000001000000010000000180F4B00000000004000D000000000000000000000000000000000100000001000000018036B10000000004000E00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FF88000000000400460000000000000000000000000000000001000000010000000180FE880000000004004500000000000000000000000000000000010000000100000001800B810000000004001300000000000000000000000000000000010000000100000001800C810000000004001400000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180F0880000020000000F000000000000000000000000000000000100000001000000FFFF0100120043555646696E64436F6D626F427574746F6EE803000000000000000000000000000000000000000000000001000000010000009600000002002050000000000A6766785F627566666572960000000000000006000A6766785F62756666657204706C61790973746F705F6C696E650647726170685F085F5F47726170685F0F5F5F4746585F447261775F4C696E65000000000000000000000000000000000000000000000000018024E10000000000001100000000000000000000000000000000010000000100000001800A810000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E2280000002000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B46350000000000000000000000000100000001000000000000000000000001000000020021802280000000000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B4635000000000000000000000000010000000100000000000000000000000100000000002180E0010000000000007500000021456E65726779204D6561737572656D656E742026776974686F75742044656275670000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C488000000000000160000000000000000000000000000000001000000010000000180C988000000000400180000000000000000000000000000000001000000010000000180C788000000000000190000000000000000000000000000000001000000010000002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000003002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000000002180E50100000000000078000000264B696C6C20416C6C20427265616B706F696E747320696E204163746976652050726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180E601000000000000790000002F4B696C6C20416C6C20427265616B706F696E747320696E204D756C74692D50726F6A65637420576F726B73706163650000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000021804C010000020001001A0000000F2650726F6A6563742057696E646F77000000000000000000000000010000000100000000000000000000000100000008002180DD880000000000001A0000000750726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180DC8B0000000000003A00000005426F6F6B73000000000000000000000000010000000100000000000000000000000100000000002180E18B0000000000003B0000000946756E6374696F6E73000000000000000000000000010000000100000000000000000000000100000000002180E28B000000000000400000000954656D706C6174657300000000000000000000000001000000010000000000000000000000010000000000218018890000000000003D0000000E536F757263652042726F777365720000000000000000000000000100000001000000000000000000000001000000000021800000000000000400FFFFFFFF00000000000000000001000000000000000100000000000000000000000100000000002180D988000000000000390000000C4275696C64204F7574707574000000000000000000000000010000000100000000000000000000000100000000002180E38B000000000000410000000B46696E64204F75747075740000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FB7F0000000000001B000000000000000000000000000000000100000001000000000000000446696C65C6030000
+ 2916
+ 00200000010000002800FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000000000000000000000000000000000000000100000001000000018001E100000000000001000000000000000000000000000000000100000001000000018003E1000000000000020000000000000000000000000000000001000000010000000180CD7F0000000000000300000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018023E100000000040004000000000000000000000000000000000100000001000000018022E100000000040005000000000000000000000000000000000100000001000000018025E10000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001802BE10000000000000700000000000000000000000000000000010000000100000001802CE10000000004000800000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001807A8A0000000000000900000000000000000000000000000000010000000100000001807B8A0000000000000A00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180D3B00000000000000B000000000000000000000000000000000100000001000000018015B10000000004000C0000000000000000000000000000000001000000010000000180F4B00000000004000D000000000000000000000000000000000100000001000000018036B10000000004000E00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FF88000000000400460000000000000000000000000000000001000000010000000180FE880000000004004500000000000000000000000000000000010000000100000001800B810000000004001300000000000000000000000000000000010000000100000001800C810000000004001400000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180F0880000020000000F000000000000000000000000000000000100000001000000FFFF0100120043555646696E64436F6D626F427574746F6EE803000000000000000000000000000000000000000000000001000000010000009600000002002050000000000D5F5F696E697469616C697A6564960000000000000012000D5F5F696E697469616C697A6564164746585F436C65616E5F4275666665725F4672616D65184746585F506C6F7474657248616E646C6554797065446566064865696774680E70726573735F6261636B776172640D70726573735F666F727761726419464F4E545F5441484F4D415F385F434841525F48454947485417464F4E545F5441484F4D415F385F464F4E545F545950450753616D706C65540E6D6963726F737465705F636E74310C47726170685F4865696768740F4C43445F4372656174654672616D650643535F73657414535049446973705F53656E645F436F6D6D616E640D666F6E745F7461686F6D615F38096E6F745F666F756E641544616C6C61735F57726974655573657242797465731344414C4C41535F555345525F425954455F3132000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000018024E10000000000001100000000000000000000000000000000010000000100000001800A810000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E2280000002000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B46350000000000000000000000000100000001000000000000000000000001000000020021802280000000000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B4635000000000000000000000000010000000100000000000000000000000100000000002180E0010000000000007500000021456E65726779204D6561737572656D656E742026776974686F75742044656275670000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C488000000000000160000000000000000000000000000000001000000010000000180C988000000000400180000000000000000000000000000000001000000010000000180C788000000000000190000000000000000000000000000000001000000010000002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000003002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000000002180E50100000000000078000000264B696C6C20416C6C20427265616B706F696E747320696E204163746976652050726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180E601000000000000790000002F4B696C6C20416C6C20427265616B706F696E747320696E204D756C74692D50726F6A65637420576F726B73706163650000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000021804C010000020001001A0000000F2650726F6A6563742057696E646F77000000000000000000000000010000000100000000000000000000000100000008002180DD880000000000001A0000000750726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180DC8B0000000000003A00000005426F6F6B73000000000000000000000000010000000100000000000000000000000100000000002180E18B0000000000003B0000000946756E6374696F6E73000000000000000000000000010000000100000000000000000000000100000000002180E28B000000000000400000000954656D706C6174657300000000000000000000000001000000010000000000000000000000010000000000218018890000000000003D0000000E536F757263652042726F777365720000000000000000000000000100000001000000000000000000000001000000000021800000000000000400FFFFFFFF00000000000000000001000000000000000100000000000000000000000100000000002180D988000000000000390000000C4275696C64204F7574707574000000000000000000000000010000000100000000000000000000000100000000002180E38B000000000000410000000B46696E64204F75747075740000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FB7F0000000000001B000000000000000000000000000000000100000001000000000000000446696C65C6030000
1423
@@ -3448,14 +3448,14 @@
966
0
8192
- 0
+ 1
16
0000000000000000D10300001C000000
16
- 0A0000000A0000006E0000006E000000
+ 0A0000000A000000D803000042000000
@@ -3488,10 +3488,10 @@
476
0
8192
- 1
+ 0
16
- 000000001C000000E701000038000000
+ 0000000000000000E70100001C000000
16
@@ -3546,8 +3546,8 @@
59392
File
- 2629
- 00200000010000002800FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000000000000000000000000000000000000000100000001000000018001E100000000000001000000000000000000000000000000000100000001000000018003E1000000000000020000000000000000000000000000000001000000010000000180CD7F0000000000000300000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018023E100000000040004000000000000000000000000000000000100000001000000018022E100000000040005000000000000000000000000000000000100000001000000018025E10000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001802BE10000000004000700000000000000000000000000000000010000000100000001802CE10000000004000800000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001807A8A0000000000000900000000000000000000000000000000010000000100000001807B8A0000000004000A00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180D3B00000000000000B000000000000000000000000000000000100000001000000018015B10000000004000C0000000000000000000000000000000001000000010000000180F4B00000000004000D000000000000000000000000000000000100000001000000018036B10000000004000E00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FF88000000000400460000000000000000000000000000000001000000010000000180FE880000000004004500000000000000000000000000000000010000000100000001800B810000000004001300000000000000000000000000000000010000000100000001800C810000000004001400000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180F0880000020000000F000000000000000000000000000000000100000001000000FFFF0100120043555646696E64436F6D626F427574746F6EE803000000000000000000000000000000000000000000000001000000010000009600000002002050000000000A6766785F627566666572960000000000000006000A6766785F62756666657204706C61790973746F705F6C696E650647726170685F085F5F47726170685F0F5F5F4746585F447261775F4C696E65000000000000000000000000000000000000000000000000018024E10000000000001100000000000000000000000000000000010000000100000001800A810000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E2280000002000100150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B46350000000000000000000000000100000001000000000000000000000001000000020021802280000000000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B4635000000000000000000000000010000000100000000000000000000000100000000002180E0010000000000007500000021456E65726779204D6561737572656D656E742026776974686F75742044656275670000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C488000000000000160000000000000000000000000000000001000000010000000180C988000000000400180000000000000000000000000000000001000000010000000180C788000000000000190000000000000000000000000000000001000000010000002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000003002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000000002180E50100000000000078000000264B696C6C20416C6C20427265616B706F696E747320696E204163746976652050726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180E601000000000000790000002F4B696C6C20416C6C20427265616B706F696E747320696E204D756C74692D50726F6A65637420576F726B73706163650000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000021804C010000020001001A0000000F2650726F6A6563742057696E646F77000000000000000000000000010000000100000000000000000000000100000008002180DD880000000000001A0000000750726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180DC8B0000000000003A00000005426F6F6B73000000000000000000000000010000000100000000000000000000000100000000002180E18B0000000000003B0000000946756E6374696F6E73000000000000000000000000010000000100000000000000000000000100000000002180E28B000000000000400000000954656D706C6174657300000000000000000000000001000000010000000000000000000000010000000000218018890000000000003D0000000E536F757263652042726F777365720000000000000000000000000100000001000000000000000000000001000000000021800000000000000400FFFFFFFF00000000000000000001000000000000000100000000000000000000000100000000002180D988000000000000390000000C4275696C64204F7574707574000000000000000000000000010000000100000000000000000000000100000000002180E38B000000000000410000000B46696E64204F75747075740000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FB7F0000000000001B000000000000000000000000000000000100000001000000000000000446696C65C6030000
+ 2916
+ 00200000010000002800FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000000000000000000000000000000000000000100000001000000018001E100000000000001000000000000000000000000000000000100000001000000018003E1000000000000020000000000000000000000000000000001000000010000000180CD7F0000000000000300000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018023E100000000040004000000000000000000000000000000000100000001000000018022E100000000040005000000000000000000000000000000000100000001000000018025E10000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001802BE10000000000000700000000000000000000000000000000010000000100000001802CE10000000004000800000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001807A8A0000000000000900000000000000000000000000000000010000000100000001807B8A0000000000000A00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180D3B00000000000000B000000000000000000000000000000000100000001000000018015B10000000004000C0000000000000000000000000000000001000000010000000180F4B00000000004000D000000000000000000000000000000000100000001000000018036B10000000004000E00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FF88000000000400460000000000000000000000000000000001000000010000000180FE880000000004004500000000000000000000000000000000010000000100000001800B810000000004001300000000000000000000000000000000010000000100000001800C810000000004001400000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180F0880000020000000F000000000000000000000000000000000100000001000000FFFF0100120043555646696E64436F6D626F427574746F6EE803000000000000000000000000000000000000000000000001000000010000009600000002002050000000000D5F5F696E697469616C697A6564960000000000000012000D5F5F696E697469616C697A6564164746585F436C65616E5F4275666665725F4672616D65184746585F506C6F7474657248616E646C6554797065446566064865696774680E70726573735F6261636B776172640D70726573735F666F727761726419464F4E545F5441484F4D415F385F434841525F48454947485417464F4E545F5441484F4D415F385F464F4E545F545950450753616D706C65540E6D6963726F737465705F636E74310C47726170685F4865696768740F4C43445F4372656174654672616D650643535F73657414535049446973705F53656E645F436F6D6D616E640D666F6E745F7461686F6D615F38096E6F745F666F756E641544616C6C61735F57726974655573657242797465731344414C4C41535F555345525F425954455F3132000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000018024E10000000000001100000000000000000000000000000000010000000100000001800A810000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E2280000002000100150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B46350000000000000000000000000100000001000000000000000000000001000000020021802280000000000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B4635000000000000000000000000010000000100000000000000000000000100000000002180E0010000000000007500000021456E65726779204D6561737572656D656E742026776974686F75742044656275670000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C488000000000000160000000000000000000000000000000001000000010000000180C988000000000400180000000000000000000000000000000001000000010000000180C788000000000000190000000000000000000000000000000001000000010000002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000003002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000000002180E50100000000000078000000264B696C6C20416C6C20427265616B706F696E747320696E204163746976652050726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180E601000000000000790000002F4B696C6C20416C6C20427265616B706F696E747320696E204D756C74692D50726F6A65637420576F726B73706163650000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000021804C010000020001001A0000000F2650726F6A6563742057696E646F77000000000000000000000000010000000100000000000000000000000100000008002180DD880000000000001A0000000750726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180DC8B0000000000003A00000005426F6F6B73000000000000000000000000010000000100000000000000000000000100000000002180E18B0000000000003B0000000946756E6374696F6E73000000000000000000000000010000000100000000000000000000000100000000002180E28B000000000000400000000954656D706C6174657300000000000000000000000001000000010000000000000000000000010000000000218018890000000000003D0000000E536F757263652042726F777365720000000000000000000000000100000001000000000000000000000001000000000021800000000000000400FFFFFFFF00000000000000000001000000000000000100000000000000000000000100000000002180D988000000000000390000000C4275696C64204F7574707574000000000000000000000000010000000100000000000000000000000100000000002180E38B000000000000410000000B46696E64204F75747075740000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FB7F0000000000001B000000000000000000000000000000000100000001000000000000000446696C65C6030000
1423
@@ -3563,7 +3563,7 @@
Build
955
- 00200000000000001000FFFF01001100434D4643546F6F6C426172427574746F6ECF7F0000000000001C0000000000000000000000000000000001000000010000000180D07F0000000000001D000000000000000000000000000000000100000001000000018030800000000000001E000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6EC7040000000000006A0000000C4261746368204275696C2664000000000000000000000000010000000100000000000000000000000100000004000580C7040000000000006A0000000C4261746368204275696C266400000000000000000000000001000000010000000000000000000000010000000000058046070000000000006B0000000D42617463682052656275696C640000000000000000000000000100000001000000000000000000000001000000000005804707000000000000FFFFFFFF0B426174636820436C65616E0100000000000000010000000000000001000000000000000000000001000000000005809E8A0000000000001F0000000F4261746326682053657475702E2E2E000000000000000000000000010000000100000000000000000000000100000000000180D17F0000000000002000000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001804C8A0000000000002100000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001900434D4643546F6F6C426172436F6D626F426F78427574746F6EBA00000000000000000000000000000000000000000000000001000000010000009600000003002050FFFFFFFF00960000000000000000000180EB880000000000002200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C07F000000000000230000000000000000000000000000000001000000010000000180B08A000000000000240000000000000000000000000000000001000000010000000180A8010000000000004E00000000000000000000000000000000010000000100000001807202000000000000530000000000000000000000000000000001000000010000000180BE010000000000005000000000000000000000000000000000010000000100000000000000054275696C64DC010000
+ 00200000000000001000FFFF01001100434D4643546F6F6C426172427574746F6ECF7F0000000000001C0000000000000000000000000000000001000000010000000180D07F0000000000001D000000000000000000000000000000000100000001000000018030800000000000001E000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6EC7040000000000006A0000000C4261746368204275696C2664000000000000000000000000010000000100000000000000000000000100000004000580C7040000000000006A0000000C4261746368204275696C266400000000000000000000000001000000010000000000000000000000010000000000058046070000000000006B0000000D42617463682052656275696C640000000000000000000000000100000001000000000000000000000001000000000005804707000000000000FFFFFFFF0B426174636820436C65616E0000000000000000010000000000000001000000000000000000000001000000000005809E8A0000000000001F0000000F4261746326682053657475702E2E2E000000000000000000000000010000000100000000000000000000000100000000000180D17F0000000000002000000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001804C8A0000000000002100000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001900434D4643546F6F6C426172436F6D626F426F78427574746F6EBA00000000000000000000000000000000000000000000000001000000010000009600000003002050FFFFFFFF00960000000000000000000180EB880000000000002200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C07F000000000000230000000000000000000000000000000001000000010000000180B08A000000000000240000000000000000000000000000000001000000010000000180A8010000000000004E00000000000000000000000000000000010000000100000001807202000000000000530000000000000000000000000000000001000000010000000180BE010000000000005000000000000000000000000000000000010000000100000000000000054275696C64DC010000
583
@@ -3579,7 +3579,7 @@
Debug
2362
- 00200000010000001900FFFF01001100434D4643546F6F6C426172427574746F6ECC880000000000002500000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018017800000000004002600000000000000000000000000000000010000000100000001801D800000000000002700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001801A800000000004002800000000000000000000000000000000010000000100000001801B80000000000400290000000000000000000000000000000001000000010000000180E57F0000000004002A00000000000000000000000000000000010000000100000001801C800000000004002B00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018000890000000004002C00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180E48B0000020001002D0000000000000000000000000000000001000000010000000180F07F0000020001002E0000000000000000000000000000000001000000010000000180E8880000020000003700000000000000000000000000000000010000000100000001803B010000020001002F0000000000000000000000000000000001000000010000000180BB8A00000200010030000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E0E01000002000100310000000D57617463682057696E646F7773000000000000000000000000010000000100000000000000000000000100000003001380D88B00000000000031000000085761746368202631000000000000000000000000010000000100000000000000000000000100000000001380D98B00000000000031000000085761746368202632000000000000000000000000010000000100000000000000000000000100000000001380CE01000000000000FFFFFFFF0C576174636820416E63686F720100000000000000010000000000000001000000000000000000000001000000000013800F0100000200010032000000094D656D6F7279202631000000000000000000000000010000000100000000000000000000000100000004001380D28B00000000000032000000094D656D6F7279202631000000000000000000000000010000000100000000000000000000000100000000001380D38B00000000000032000000094D656D6F7279202632000000000000000000000000010000000100000000000000000000000100000000001380D48B00000000000032000000094D656D6F7279202633000000000000000000000000010000000100000000000000000000000100000000001380D58B00000000000032000000094D656D6F72792026340000000000000000000000000100000001000000000000000000000001000000000013801001000002000000330000000855415254202326310000000000000000000000000100000001000000000000000000000001000000040013809307000000000000330000000855415254202326310000000000000000000000000100000001000000000000000000000001000000000013809407000000000000330000000855415254202326320000000000000000000000000100000001000000000000000000000001000000000013809507000000000000330000000855415254202326330000000000000000000000000100000001000000000000000000000001000000000013809607000000000000330000001626446562756720287072696E746629205669657765720000000000000000000000000100000001000000000000000000000001000000000013803C010000000000007200000010416E616C797369732057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380658A000000000000340000000F264C6F67696320416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380DC7F0000000000003E0000001526506572666F726D616E636520416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380E788000000000000380000000E26436F646520436F766572616765000000000000000000000000010000000100000000000000000000000100000000001380CD01000000000000FFFFFFFF0F416E616C7973697320416E63686F7201000000000000000100000000000000010000000000000000000000010000000000138053010000000000003F0000000D54726163652057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013805401000000000000FFFFFFFF115472616365204D656E7520416E63686F720100000000000000010000000000000001000000000000000000000001000000000013802901000000000000350000001553797374656D205669657765722057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013804B01000000000000FFFFFFFF1453797374656D2056696577657220416E63686F720100000000000000010000000000000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000013800189000002000000360000000F26546F6F6C626F782057696E646F7700000000000000000000000001000000010000000000000000000000010000000300138044C5000000000000FFFFFFFF0E5570646174652057696E646F77730100000000000000010000000000000001000000000000000000000001000000000013800000000000000400FFFFFFFF000000000000000000010000000000000001000000000000000000000001000000000013805B01000000000000FFFFFFFF12546F6F6C626F78204D656E75416E63686F72010000000000000001000000000000000100000000000000000000000100000000000000000005446562756764020000
+ 00200000010000001900FFFF01001100434D4643546F6F6C426172427574746F6ECC880000000000002500000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018017800000000000002600000000000000000000000000000000010000000100000001801D800000000004002700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001801A800000000000002800000000000000000000000000000000010000000100000001801B80000000000000290000000000000000000000000000000001000000010000000180E57F0000000000002A00000000000000000000000000000000010000000100000001801C800000000000002B00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018000890000000000002C00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180E48B0000020001002D0000000000000000000000000000000001000000010000000180F07F0000020001002E0000000000000000000000000000000001000000010000000180E8880000020000003700000000000000000000000000000000010000000100000001803B010000020001002F0000000000000000000000000000000001000000010000000180BB8A00000200010030000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E0E01000002000100310000000D57617463682057696E646F7773000000000000000000000000010000000100000000000000000000000100000003001380D88B00000000000031000000085761746368202631000000000000000000000000010000000100000000000000000000000100000000001380D98B00000000000031000000085761746368202632000000000000000000000000010000000100000000000000000000000100000000001380CE01000000000000FFFFFFFF0C576174636820416E63686F720000000000000000010000000000000001000000000000000000000001000000000013800F0100000200010032000000094D656D6F7279202631000000000000000000000000010000000100000000000000000000000100000004001380D28B00000000000032000000094D656D6F7279202631000000000000000000000000010000000100000000000000000000000100000000001380D38B00000000000032000000094D656D6F7279202632000000000000000000000000010000000100000000000000000000000100000000001380D48B00000000000032000000094D656D6F7279202633000000000000000000000000010000000100000000000000000000000100000000001380D58B00000000000032000000094D656D6F72792026340000000000000000000000000100000001000000000000000000000001000000000013801001000002000000330000000855415254202326310000000000000000000000000100000001000000000000000000000001000000040013809307000000000000330000000855415254202326310000000000000000000000000100000001000000000000000000000001000000000013809407000000000000330000000855415254202326320000000000000000000000000100000001000000000000000000000001000000000013809507000000000000330000000855415254202326330000000000000000000000000100000001000000000000000000000001000000000013809607000000000000330000001626446562756720287072696E746629205669657765720000000000000000000000000100000001000000000000000000000001000000000013803C010000000000007200000010416E616C797369732057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380658A000000000000340000000F264C6F67696320416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380DC7F0000000000003E0000001526506572666F726D616E636520416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380E788000000000000380000000E26436F646520436F766572616765000000000000000000000000010000000100000000000000000000000100000000001380CD01000000000000FFFFFFFF0F416E616C7973697320416E63686F7200000000000000000100000000000000010000000000000000000000010000000000138053010000000000003F0000000D54726163652057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013805401000000000000FFFFFFFF115472616365204D656E7520416E63686F720000000000000000010000000000000001000000000000000000000001000000000013802901000000000000350000001553797374656D205669657765722057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013804B01000000000000FFFFFFFF1453797374656D2056696577657220416E63686F720000000000000000010000000000000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000013800189000002000000360000000F26546F6F6C626F782057696E646F7700000000000000000000000001000000010000000000000000000000010000000300138044C5000000000000FFFFFFFF0E5570646174652057696E646F77730000000000000000010000000000000001000000000000000000000001000000000013800000000000000400FFFFFFFF000000000000000000010000000000000001000000000000000000000001000000000013805B01000000000000FFFFFFFF12546F6F6C626F78204D656E75416E63686F72000000000000000001000000000000000100000000000000000000000100000000000000000005446562756764020000
898
@@ -3603,12 +3603,12 @@
0
100
- 2
+ 8
..\Core\Example\gfx_oled_example.h
- 17
- 5
- 6
+ 28
+ 61
+ 109
1
0
@@ -3626,16 +3626,16 @@
../Core/Src/main.c
0
55
- 78
+ 66
1
0
..\Core\Example\menu_interface.c
- 24
- 60
- 81
+ 5
+ 14
+ 3
1
0
@@ -3651,9 +3651,9 @@
..\Core\OLED_Driver\oled.c
- 37
- 13
- 32
+ 0
+ 16
+ 46
1
0
@@ -3678,9 +3678,9 @@
..\Core\Example\gfx_oled_example.c
- 12
- 119
- 148
+ 1
+ 140
+ 197
1
13
0
@@ -3696,9 +3696,36 @@
..\Core\GFX_Lib\gfx_lib.c
- 34
+ 19
1
- 19
+ 445
+ 1
+ 77,100,270,312,349,367,415,647
+ 0
+
+
+ ..\Core\GFX_Lib\gfx_lib.h
+ 5
+ 93
+ 133
+ 1
+
+ 0
+
+
+ C:\Keil_v5\ARM\ARMCLANG\include\stdint.h
+ 39
+ 39
+ 59
+ 1
+
+ 0
+
+
+ ../Core/Src/gpio.c
+ 0
+ 1
+ 1
1
0
diff --git a/MDK-ARM/gfx_lcd.uvoptx b/MDK-ARM/gfx_lcd.uvoptx
index f3163be..fe439f7 100644
--- a/MDK-ARM/gfx_lcd.uvoptx
+++ b/MDK-ARM/gfx_lcd.uvoptx
@@ -163,7 +163,7 @@
2
1
- sine_cnt_step
+ plotter,0x0A
3
@@ -205,6 +205,21 @@
1
ecg_scale
+
+ 11
+ 1
+ (pix_y_float/hPlot->dataMax)*(hPlot->plotHeight),0x0A
+
+
+ 12
+ 1
+ -4,0x0A
+
+
+ 13
+ 1
+ y,0x0A
+
0
diff --git a/MDK-ARM/startup_stm32f103xb.s b/MDK-ARM/startup_stm32f103xb.s
index fd82d4f..18a5578 100644
--- a/MDK-ARM/startup_stm32f103xb.s
+++ b/MDK-ARM/startup_stm32f103xb.s
@@ -129,7 +129,7 @@ Reset_Handler PROC
EXPORT Reset_Handler [WEAK]
IMPORT __main
IMPORT SystemInit
- LDR R0, =SystemInit
+1 LDR R0, =SystemInit
BLX R0
LDR R0, =__main
BX R0
diff --git a/README.md b/README.md
index 868de33..f84952f 100644
--- a/README.md
+++ b/README.md
@@ -5,5 +5,5 @@
Включает в себя:
- библиотеку для рисования (Core\GFX_Lib)
- библиотеку для I2C OLED дисплея (Core\OLED_Driver)
-- библиотеку для SPI OLED дисплея (Core\LCD_Driver) (не сделано пока)
+- библиотеку для SPI LCD дисплея (Core\LCD_Driver) (не сделано пока)
- примеры использования (Core\Example) (не сделано пока)
\ No newline at end of file