diff --git a/Core/Example/gfx_oled_example.c b/Core/Example/gfx_oled_example.c index cab1123..4485859 100644 --- a/Core/Example/gfx_oled_example.c +++ b/Core/Example/gfx_oled_example.c @@ -2,6 +2,7 @@ #include "math.h" int menu_white_theme = 0; +//#define ROTATING_ARROW_EXAMPLE #define SINE_EXAMPLE //#define ECG_EXAMPLE //#define PLAYER_EXAMPLE @@ -63,7 +64,7 @@ float ecg_data[ECG_SIZE] = {1.05893, 0.999357, 0.933132, 0.744792, 0.664672, 0.3 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; -GFX_PlotterFloatHandleTypeDef plotter; +GFX_PlotterHandleTypeDef plotter; void Example_GFX_Init(void) { @@ -84,18 +85,26 @@ void Example_OLED_GFX_Update(PlayerTypeDef *player) oled_refresh(); } } -float sine2plot; -float sine_cnt_step = 0.01; +uint8_t sine2plot; +float sine_cnt_step = 0.5; float sine_cnt = 1; +float sine_scale = 255; +float ecg_step = 2.5; +float ecg_scale = 1.1; void Example_GFX_CreateFrame(PlayerTypeDef *player) { -#if defined(SINE_EXAMPLE) - sine2plot = sinf(sine_cnt); - GFX_FloatPlotter(oled_buf, &plotter, &sine2plot); +#if defined(ROTATING_ARROW_EXAMPLE) + GFX_Clean_Buffer_Frame(oled_buf); + __GFX_Draw_Arrow(oled_buf, 64, 16, 5, sine_cnt, 1); + sine_cnt+=ecg_step; + +#elif defined(SINE_EXAMPLE) + sine2plot = (sinf(sine_cnt)+1)*128; + GFX_Plotter_uint8_t(oled_buf, &plotter, &sine2plot, 0, 0, sine_scale); sine_cnt += sine_cnt_step; #elif defined(ECG_EXAMPLE) - GFX_FloatPlotter(oled_buf, &plotter, NULL); + GFX_Plotter_float(oled_buf, &plotter, ecg_data, ECG_SIZE, ecg_step, ecg_scale); #elif defined(PLAYER_EXAMPLE) GFX_Clean_Buffer_Frame(oled_buf); @@ -197,26 +206,24 @@ void GFX_Draw_LoopIcon(uint8_t *Buffer_Frame, uint8_t x, uint8_t y, uint8_t widt void Example_GFX_PlotterInit(void) -{ +{ +#if defined(SINE_EXAMPLE) + plotter.xPos = 0; + plotter.yPos = 0; + plotter.plotWidth = 128; + plotter.plotHeight = 30; + plotter.plotYShift = 64; + plotter.f.plotXAxis = 1; + plotter.f.plotYAxis = 1; +#elif defined(ECG_EXAMPLE) plotter.xPos = 2; plotter.yPos = 0; - plotter.plotWidth = 120; - plotter.plotHeight = 32; - plotter.plotXAxis = 1; - plotter.plotYAxis = 1; - -#if defined(SINE_EXAMPLE) - plotter.dataMax = 1.1; - plotter.signedData = 1; -#elif defined(ECG_EXAMPLE) - - plotter.pDataPtr = ecg_data; - plotter.dataMax = 1.1; - plotter.dataSize = 550; - plotter.plotShift = 0; - plotter.plotSpeed = 2.5; + plotter.plotWidth = 128-plotter.xPos; + plotter.plotHeight = 32; + plotter.f.plotXAxis = 1; + plotter.f.plotYAxis = 1; + plotter.f.plotFrame = 1; #endif - } void Example_GFX_IconInit(void) { diff --git a/Core/GFX_Lib/gfx_lib.c b/Core/GFX_Lib/gfx_lib.c index 1873805..93294f8 100644 --- a/Core/GFX_Lib/gfx_lib.c +++ b/Core/GFX_Lib/gfx_lib.c @@ -10,9 +10,9 @@ */ #include "gfx_lib.h" #include "font_tahoma_8_prop.h" - #include "math.h" +#define PI 3.1415926535 /* переменные */ uint8_t chSpacing = 0; //межсимвольный интервал в px @@ -405,10 +405,14 @@ 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; + uint16_t angle = hArrow->angle % 360; uint8_t pxColor = hArrow->pxColor; - __GFX_Draw_Arrow(Buffer_Frame, xPos, yPos, size, angle, pxColor); + + if((angle == 0) || (angle == 90) || (angle == 180) || (angle == 270)) + __GFX_Draw_Arrow_Ortho(Buffer_Frame, xPos, yPos, size, angle, pxColor); + else + __GFX_Draw_Arrow(Buffer_Frame, xPos, yPos, size, angle, pxColor); } /* Функция рисования дуги (четверти окружности) */ @@ -435,8 +439,9 @@ void GFX_Draw_Arc(uint8_t *Buffer_Frame, GFX_ArcHandleTypeDef *hArc) } -/* Функция вывода графика */ -void GFX_FloatPlotter(uint8_t *Buffer_Frame, GFX_PlotterFloatHandleTypeDef *hPlot, float *numb2plot) + +/* Функция для отрисовки графика uint8_t массива */ +void GFX_Plotter_uint8_t(uint8_t *Buffer_Frame, GFX_PlotterHandleTypeDef *hPlot, uint8_t *data, uint32_t data_size, float data_step, uint8_t data_max) { if((Buffer_Frame == NULL) || (hPlot == NULL)) return; @@ -444,112 +449,157 @@ void GFX_FloatPlotter(uint8_t *Buffer_Frame, GFX_PlotterFloatHandleTypeDef *hPlo return; if((hPlot->yPos + hPlot->plotHeight == NULL) || (hPlot->xPos + hPlot->plotWidth == NULL)) return; - if((numb2plot == NULL) && (hPlot->pDataPtr == NULL)) + if(data == 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); - } - } + /* Расчет позиции пикселя */ + uint8_t pix_y_uint8t; + if(data_size == 0) + pix_y_uint8t = *data; + else + pix_y_uint8t = data[(int)hPlot->dataInd]; + // масштабирование под размеры графика + hPlot->dataY = (pix_y_uint8t*hPlot->plotHeight)/data_max; - /* Подготовка к выводу графика */ - if((hPlot->pixX < hPlot->xPos) || (hPlot->pixX >= hPlot->plotWidth)) + hPlot->f.dataSigned = 0; + /* Вывод пикселя */ + __GFX_Draw_Plotter_Value(Buffer_Frame, hPlot); + + /* Смещение графика далее */ + hPlot->dataX++; + hPlot->dataPrevY = hPlot->dataY; + // Если используется массив плота + if(data == NULL) { - hPlot->pixX = hPlot->xPos; - GFX_Clean_Area(Buffer_Frame, hPlot->xPos, hPlot->yPos, hPlot->plotWidth, hPlot->plotHeight); + hPlot->dataInd += data_step; + if(hPlot->dataInd >= data_size) + hPlot->dataInd -= data_size; - 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->dataInd < 0) + hPlot->dataInd += data_size; } +} +/* Функция для отрисовки графика uint16_t массива */ +void GFX_Plotter_uint16_t(uint8_t *Buffer_Frame, GFX_PlotterHandleTypeDef *hPlot, uint16_t *data, uint32_t data_size, float data_step, uint16_t data_max) +{ + 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(data == NULL) + return; + + /* Расчет позиции пикселя */ + uint16_t pix_y_uint16t; + if(data_size == 0) + pix_y_uint16t = *data; + else + pix_y_uint16t = data[(int)hPlot->dataInd]; + // масштабирование под размеры графика + hPlot->dataY = (pix_y_uint16t*hPlot->plotHeight)/data_max; + + hPlot->f.dataSigned = 0; + /* Вывод пикселя */ + __GFX_Draw_Plotter_Value(Buffer_Frame, hPlot); + + /* Смещение графика далее */ + hPlot->dataX++; + hPlot->dataPrevY = hPlot->dataY; + // Если используется массив плота + if(data == NULL) + { + hPlot->dataInd += data_step; + if(hPlot->dataInd >= data_size) + hPlot->dataInd -= data_size; + + if(hPlot->dataInd < 0) + hPlot->dataInd += data_size; + } +} +/* Функция для отрисовки графика int массива */ +void GFX_Plotter_int(uint8_t *Buffer_Frame, GFX_PlotterHandleTypeDef *hPlot, int *data, uint32_t data_size, float data_step, int data_max) +{ + 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(data == NULL) + return; + + + /* Расчет позиции пикселя */ + uint8_t pix_y_int; + if(data_size == 0) + pix_y_int = *data; + else + pix_y_int = data[(int)hPlot->dataInd]; + // масштабирование под размеры графика + hPlot->dataY = (pix_y_int*hPlot->plotHeight)/data_max; + + hPlot->f.dataSigned = 1; + /* Вывод пикселя */ + __GFX_Draw_Plotter_Value(Buffer_Frame, hPlot); + + /* Смещение графика далее */ + hPlot->dataX++; + hPlot->dataPrevY = hPlot->dataY; + // Если используется массив плота + if(data == NULL) + { + hPlot->dataInd += data_step; + if(hPlot->dataInd >= data_size) + hPlot->dataInd -= data_size; + + if(hPlot->dataInd < 0) + hPlot->dataInd += data_size; + } +} + +/* Функция для отрисовки графика float массива */ +void GFX_Plotter_float(uint8_t *Buffer_Frame, GFX_PlotterHandleTypeDef *hPlot, float *data, uint32_t data_size, float data_step, float data_max) +{ + 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((data == NULL) || (data_size == 0)) + return; + /* Расчет позиции пикселя */ float pix_y_float; - if(numb2plot != NULL) - pix_y_float = *numb2plot; + if(data_size == 0) + pix_y_float = *data; else - pix_y_float = (hPlot->pDataPtr[(int)hPlot->plotInd]); + pix_y_float = data[(int)hPlot->dataInd]; + + hPlot->f.dataSigned = 1; // масштабирование под размеры графика - 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; + hPlot->dataY = (pix_y_float/data_max)*(hPlot->plotHeight); - - /* Вывод пикселя позиции пикселя */ - // Передний фронт - 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); - } + /* Вывод пикселя */ + __GFX_Draw_Plotter_Value(Buffer_Frame, hPlot); /* Смещение графика далее */ - hPlot->pixX++; - hPlot->prevPixY = hPlot->pixY; + hPlot->dataX++; + hPlot->dataPrevY = hPlot->dataY; // Если используется массив плота - if(numb2plot == NULL) + if(data_size != 0) { - hPlot->plotInd += hPlot->plotSpeed; - if(hPlot->plotInd >= hPlot->dataSize) - hPlot->plotInd -= hPlot->dataSize; + hPlot->dataInd += data_step; + if(hPlot->dataInd >= data_size) + hPlot->dataInd -= data_size; - if(hPlot->plotInd < 0) - hPlot->plotInd += hPlot->dataSize; + if(hPlot->dataInd < 0) + hPlot->dataInd += data_size; } } @@ -695,8 +745,41 @@ void __GFX_Draw_Triangle(uint8_t *Buffer_Frame, uint8_t xPos1, uint8_t yPos1, ui __GFX_Draw_Line(Buffer_Frame, xPos3, yPos3, xPos1, yPos1, pxColor); } -/* функция рисования стрелки */ + +float roundUp(float num) { + if (num > 0) { + return ceilf(num); // Для положительных чисел используем ceil + } else { + return floorf(num); // Для отрицательных чисел используем floor + } +} void __GFX_Draw_Arrow(uint8_t *Buffer_Frame, uint8_t xPos, uint8_t yPos, uint8_t size, uint16_t angle, uint8_t pxColor) +{ + float rad = (angle-90) * PI / 180.0; // Переводим угол в радианы + + // Кончик стрелки (самая острая точка) + int16_t x1 = xPos; + int16_t y1 = yPos; + + // Два боковых конца (формируют треугольник стрелки) + int16_t x2 = xPos + roundUp(size * sinf(rad + PI / 4)); + int16_t y2 = yPos + roundUp(size * cosf(rad + PI / 4)); + + int16_t x3 = xPos + roundUp(size * sinf(rad - PI / 4)); + int16_t y3 = yPos + roundUp(size * cosf(rad - PI / 4)); + + // Ограничение от выхода за границы (если нужно) + if (x2 < 0) x2 = 0; + if (x3 < 0) x3 = 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_Arrow_Ortho(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; @@ -738,6 +821,8 @@ void __GFX_Draw_Arrow(uint8_t *Buffer_Frame, uint8_t xPos, uint8_t yPos, uint8_t y3 = yPos + size; } + else + return; if(x1 < 0) x1 = 0; @@ -768,3 +853,101 @@ void __GFX_Draw_Arc(uint8_t *Buffer_Frame, uint8_t xPos, uint8_t yPos, uint8_t r } } +/* Функция для отрисовки осей и рамки графика */ +HAL_StatusTypeDef __GFX_StartPlot(uint8_t *Buffer_Frame, GFX_PlotterHandleTypeDef *hPlot) +{ + if((hPlot->dataX < hPlot->xPos) || (hPlot->dataX >= hPlot->plotWidth)) + { + hPlot->dataX = hPlot->xPos; + GFX_Clean_Area(Buffer_Frame, hPlot->xPos, hPlot->yPos, hPlot->plotWidth, hPlot->plotHeight); + + if(hPlot->f.plotXAxis) + { + uint8_t xaxis_x_start = hPlot->xPos; + uint8_t xaxis_x_end = hPlot->xPos+hPlot->plotWidth-1; + uint8_t xaxis_y = hPlot->yPos-hPlot->plotXShift; + if(hPlot->f.dataSigned) + xaxis_y += hPlot->plotHeight/2; + else + xaxis_y += hPlot->plotHeight-1; + + __GFX_Draw_Line(Buffer_Frame, xaxis_x_start, xaxis_y, xaxis_x_end, xaxis_y, 1); + __GFX_Draw_Arrow_Ortho(Buffer_Frame, xaxis_x_end, xaxis_y, 2, 0, 1); + + } + if(hPlot->f.plotYAxis) + { + uint8_t yaxis_y_start = hPlot->yPos; + uint8_t yaxis_y_end = hPlot->yPos+hPlot->plotHeight-1; + uint8_t yaxis_x = hPlot->xPos+hPlot->plotYShift; + + __GFX_Draw_Line(Buffer_Frame, yaxis_x, yaxis_y_start, yaxis_x, yaxis_y_end, 1); + __GFX_Draw_Arrow_Ortho(Buffer_Frame, yaxis_x, yaxis_y_start, 2, 90, 1); + } + if(hPlot->f.plotFrame) + { + __GFX_Draw_Rectangle(Buffer_Frame, hPlot->xPos, hPlot->yPos, hPlot->plotWidth-1, hPlot->plotHeight-1, 1); + } + return HAL_OK; + } + else + { + return HAL_ERROR; + } +} +/* Функция для отрисовки выбранной точки графика*/ +void __GFX_Draw_Plotter_Value(uint8_t *Buffer_Frame, GFX_PlotterHandleTypeDef *hPlot) +{ + /* Первичная инициализация плоттера */ + if(hPlot->f.initialized == 0) + { + hPlot->f.initialized = 1; + GFX_Clean_Buffer_Frame(Buffer_Frame); + hPlot->dataX = -1; + if(__GFX_StartPlot(Buffer_Frame, hPlot) != HAL_OK) + return; + } + + /* Очищение графика после полного заполнения */ + if((hPlot->dataX < hPlot->xPos) || (hPlot->dataX >= hPlot->plotWidth)) + { + __GFX_StartPlot(Buffer_Frame, hPlot); + } + + /* Расчет позиции на графике */ + // если график должен быть знаковым, то уменьшаем машстаб еще в два раза + if(hPlot->f.dataSigned) + hPlot->dataY = (hPlot->dataY + hPlot->plotHeight)/2; + // инвертирование y потому что он считается сверху вниз + uint8_t plot_y_down = hPlot->yPos + hPlot->plotHeight-1; + hPlot->dataY = plot_y_down - hPlot->dataY; + // Сдвиг графика + hPlot->dataY += hPlot->plotXShift; + + /* Вывод пикселя позиции пикселя */ + // Передний фронт + if(hPlot->dataY - hPlot->dataPrevY > 0) + { + /* Цикл для заполнения пикселей по вертикали, когда фронт очень резкий */ + for(int y = hPlot->dataPrevY+1; y <= hPlot->dataY; y++) + { + if((yyPos+hPlot->plotHeight) && (y>=hPlot->yPos)) + GFX_Draw_Pixel(Buffer_Frame, hPlot->dataX, y, 1); + } + }// Задний фронт + else if (hPlot->dataY - hPlot->dataPrevY < 0) + { + /* Цикл для заполнения пикселей по вертикали, когда фронт очень резкий */ + for(int y = hPlot->dataPrevY-1; y >= hPlot->dataY; y--) + { + if((yyPos+hPlot->plotHeight) && (y>=hPlot->yPos)) + GFX_Draw_Pixel(Buffer_Frame, hPlot->dataX, y, 1); + } + }// Плато + else + { + if((hPlot->dataYyPos+hPlot->plotHeight) && (hPlot->dataY>=hPlot->yPos)) + GFX_Draw_Pixel(Buffer_Frame, hPlot->dataX, hPlot->dataY, 1); + } + +} diff --git a/Core/GFX_Lib/gfx_lib.h b/Core/GFX_Lib/gfx_lib.h index 5d8387f..7033f51 100644 --- a/Core/GFX_Lib/gfx_lib.h +++ b/Core/GFX_Lib/gfx_lib.h @@ -10,7 +10,6 @@ #include "main.h" #include "string.h" #include "stdio.h" -#include "oled.h" #define GFX_BufferWidth 128 //ширина дисплея в пикселях #define GFX_BufferHeight 32 //высота дисплея в пикселях @@ -89,23 +88,23 @@ typedef struct uint8_t plotHeight; uint8_t plotWidth; - float *pDataPtr; - uint32_t dataSize; - float dataMax; + int16_t dataX; + int32_t dataY; + float dataInd; + int32_t dataPrevY; - float plotSpeed; - float plotInd; - uint8_t plotShift; - uint8_t pixX; - int32_t pixY; - uint8_t prevPixY; + int16_t plotXShift; + int16_t plotYShift; - unsigned signedData:1; - unsigned plotFrame:1; - unsigned plotXAxis:1; - unsigned plotYAxis:1; - unsigned __initialized:1; -}GFX_PlotterFloatHandleTypeDef; + struct + { + unsigned dataSigned:1; + unsigned plotFrame:1; + unsigned plotXAxis:1; + unsigned plotYAxis:1; + unsigned initialized:1; + }f; +}GFX_PlotterHandleTypeDef; @@ -126,7 +125,10 @@ 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_FloatPlotter(uint8_t *Buffer_Frame, GFX_PlotterFloatHandleTypeDef *hPlot, float *numb2plot); +void GFX_Plotter_uint8_t(uint8_t *Buffer_Frame, GFX_PlotterHandleTypeDef *hPlot, uint8_t *data, uint32_t data_size, float data_step, uint8_t data_max); +void GFX_Plotter_uint16_t(uint8_t *Buffer_Frame, GFX_PlotterHandleTypeDef *hPlot, uint16_t *data, uint32_t data_size, float data_step, uint16_t data_max); +void GFX_Plotter_int(uint8_t *Buffer_Frame, GFX_PlotterHandleTypeDef *hPlot, int *data, uint32_t data_size, float data_step, int data_max); +void GFX_Plotter_float(uint8_t *Buffer_Frame, GFX_PlotterHandleTypeDef *hPlot, float *data, uint32_t data_size, float data_step, float data_max); @@ -141,5 +143,8 @@ void __GFX_Draw_Triangle(uint8_t *Buffer_Frame, 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_Arrow_Ortho(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); +HAL_StatusTypeDef __GFX_StartPlot(uint8_t *Buffer_Frame, GFX_PlotterHandleTypeDef *hPlot); +void __GFX_Draw_Plotter_Value(uint8_t *Buffer_Frame, GFX_PlotterHandleTypeDef *hPlot); #endif /* INC_PIXEL_GRAPHICS_H_ */ diff --git a/MDK-ARM/gfx_lcd.uvguix.I b/MDK-ARM/gfx_lcd.uvguix.I index 8824a9e..04ae9a1 100644 --- a/MDK-ARM/gfx_lcd.uvguix.I +++ b/MDK-ARM/gfx_lcd.uvguix.I @@ -70,7 +70,7 @@ 466 Source Browser 500 - 300 + 166 @@ -110,8 +110,8 @@ 0 - 1502 - 0100000004000000010000000100000001000000010000000000000002000000000000000100000001000000000000002800000028000000010000000E000000080000000100000047463A5C576F726B5C50726F6A656374735C53544D5C456C656D656E746172795C6766785F6C63645C436F72655C4578616D706C655C6766785F6F6C65645F6578616D706C652E6800000000126766785F6F6C65645F6578616D706C652E6800000000C5D4F200FFFFFFFF45463A5C576F726B5C50726F6A656374735C53544D5C456C656D656E746172795C6766785F6C63645C4D444B2D41524D5C737461727475705F73746D33326631303378622E730000000015737461727475705F73746D33326631303378622E7300000000FFDC7800FFFFFFFF37463A5C576F726B5C50726F6A656374735C53544D5C456C656D656E746172795C6766785F6C63645C436F72655C5372635C6D61696E2E6300000000066D61696E2E6300000000BECEA100FFFFFFFF45463A5C576F726B5C50726F6A656374735C53544D5C456C656D656E746172795C6766785F6C63645C436F72655C4578616D706C655C6D656E755F696E746572666163652E6300000000106D656E755F696E746572666163652E6300000000F0A0A100FFFFFFFF43463A5C576F726B5C50726F6A656374735C53544D5C456C656D656E746172795C6766785F6C63645C436F72655C4578616D706C655C67656E6572616C5F6770696F2E63000000000E67656E6572616C5F6770696F2E6300000000BCA8E100FFFFFFFF3F463A5C576F726B5C50726F6A656374735C53544D5C456C656D656E746172795C6766785F6C63645C436F72655C4F4C45445F4472697665725C6F6C65642E6300000000066F6C65642E63000000009CC1B600FFFFFFFF3F463A5C576F726B5C50726F6A656374735C53544D5C456C656D656E746172795C6766785F6C63645C436F72655C4F4C45445F4472697665725C6F6C65642E6800000000066F6C65642E6800000000F7B88600FFFFFFFF5D463A5C576F726B5C50726F6A656374735C53544D5C456C656D656E746172795C6766785F6C63645C447269766572735C53544D3332463178785F48414C5F4472697665725C5372635C73746D3332663178785F68616C5F6770696F2E63000000001473746D3332663178785F68616C5F6770696F2E6300000000D9ADC200FFFFFFFF47463A5C576F726B5C50726F6A656374735C53544D5C456C656D656E746172795C6766785F6C63645C436F72655C4578616D706C655C6766785F6F6C65645F6578616D706C652E6300000000126766785F6F6C65645F6578616D706C652E6300000000A5C2D700FFFFFFFF43463A5C576F726B5C50726F6A656374735C53544D5C456C656D656E746172795C6766785F6C63645C436F72655C4578616D706C655C67656E6572616C5F6770696F2E68000000000E67656E6572616C5F6770696F2E6800000000B3A6BE00FFFFFFFF3E463A5C576F726B5C50726F6A656374735C53544D5C456C656D656E746172795C6766785F6C63645C436F72655C4746585F4C69625C6766785F6C69622E6300000000096766785F6C69622E6300000000EAD6A300FFFFFFFF3E463A5C576F726B5C50726F6A656374735C53544D5C456C656D656E746172795C6766785F6C63645C436F72655C4746585F4C69625C6766785F6C69622E6800000000096766785F6C69622E6800000000F6FA7D00FFFFFFFF28433A5C4B65696C5F76355C41524D5C41524D434C414E475C696E636C7564655C737464696E742E680000000008737464696E742E6800000000B5E99D00FFFFFFFF37463A5C576F726B5C50726F6A656374735C53544D5C456C656D656E746172795C6766785F6C63645C436F72655C5372635C6770696F2E6300000000066770696F2E63000000005FC3CF00FFFFFFFF0100000010000000C5D4F200FFDC7800BECEA100F0A0A100BCA8E1009CC1B600F7B88600D9ADC200A5C2D700B3A6BE00EAD6A300F6FA7D00B5E99D005FC3CF00C1838300CACAD5000100000000000000020000000F010000660000009006000095020000 + 1161 + 0100000004000000010000000100000001000000010000000000000002000000000000000100000001000000000000002800000028000000010000000B00000001000000010000003E463A5C576F726B5C50726F6A656374735C53544D5C456C656D656E746172795C6766785F6C63645C436F72655C4746585F4C69625C6766785F6C69622E6300000000096766785F6C69622E6300000000EAD6A300FFFFFFFF3E463A5C576F726B5C50726F6A656374735C53544D5C456C656D656E746172795C6766785F6C63645C436F72655C4746585F4C69625C6766785F6C69622E6800000000096766785F6C69622E6800000000FFDC7800FFFFFFFF47463A5C576F726B5C50726F6A656374735C53544D5C456C656D656E746172795C6766785F6C63645C436F72655C4578616D706C655C6766785F6F6C65645F6578616D706C652E6300000000126766785F6F6C65645F6578616D706C652E6300000000BECEA100FFFFFFFF37463A5C576F726B5C50726F6A656374735C53544D5C456C656D656E746172795C6766785F6C63645C436F72655C5372635C6D61696E2E6300000000066D61696E2E6300000000F0A0A100FFFFFFFF3F463A5C576F726B5C50726F6A656374735C53544D5C456C656D656E746172795C6766785F6C63645C436F72655C4F4C45445F4472697665725C6F6C65642E6800000000066F6C65642E6800000000BCA8E100FFFFFFFF45463A5C576F726B5C50726F6A656374735C53544D5C456C656D656E746172795C6766785F6C63645C4D444B2D41524D5C737461727475705F73746D33326631303378622E730000000015737461727475705F73746D33326631303378622E73000000009CC1B600FFFFFFFF3F463A5C576F726B5C50726F6A656374735C53544D5C456C656D656E746172795C6766785F6C63645C436F72655C4F4C45445F4472697665725C6F6C65642E6300000000066F6C65642E6300000000F7B88600FFFFFFFF37463A5C576F726B5C50726F6A656374735C53544D5C456C656D656E746172795C6766785F6C63645C436F72655C5372635C6770696F2E6300000000066770696F2E6300000000D9ADC200FFFFFFFF43463A5C576F726B5C50726F6A656374735C53544D5C456C656D656E746172795C6766785F6C63645C436F72655C4578616D706C655C67656E6572616C5F6770696F2E63000000000E67656E6572616C5F6770696F2E6300000000A5C2D700FFFFFFFF45463A5C576F726B5C50726F6A656374735C53544D5C456C656D656E746172795C6766785F6C63645C436F72655C4578616D706C655C6D656E755F696E746572666163652E6300000000106D656E755F696E746572666163652E6300000000B3A6BE00FFFFFFFF26433A5C4B65696C5F76355C41524D5C41524D434C414E475C696E636C7564655C6D6174682E6800000000066D6174682E6800000000EAD6A300FFFFFFFF0100000010000000C5D4F200FFDC7800BECEA100F0A0A100BCA8E1009CC1B600F7B88600D9ADC200A5C2D700B3A6BE00EAD6A300F6FA7D00B5E99D005FC3CF00C1838300CACAD5000100000000000000020000000F010000660000009006000095020000 @@ -1710,7 +1710,7 @@ 0 16 - 0000000000000000D10300001C000000 + 0300000000000000D40300001C000000 16 @@ -1805,8 +1805,8 @@ 59392 File - 2897 - 00200000010000002800FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000000000000000000000000000000000000000100000001000000018001E100000000000001000000000000000000000000000000000100000001000000018003E1000000000000020000000000000000000000000000000001000000010000000180CD7F0000000000000300000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018023E100000000040004000000000000000000000000000000000100000001000000018022E100000000040005000000000000000000000000000000000100000001000000018025E10000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001802BE10000000000000700000000000000000000000000000000010000000100000001802CE10000000004000800000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001807A8A0000000000000900000000000000000000000000000000010000000100000001807B8A0000000000000A00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180D3B00000000000000B000000000000000000000000000000000100000001000000018015B10000000004000C0000000000000000000000000000000001000000010000000180F4B00000000004000D000000000000000000000000000000000100000001000000018036B10000000004000E00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FF88000000000400460000000000000000000000000000000001000000010000000180FE880000000004004500000000000000000000000000000000010000000100000001800B810000000004001300000000000000000000000000000000010000000100000001800C810000000004001400000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180F0880000020000000F000000000000000000000000000000000100000001000000FFFF0100120043555646696E64436F6D626F427574746F6EE803000000000000000000000000000000000000000000000001000000010000009600000002002050000000000873696E655F636E74960000000000000012000873696E655F636E740B4746585F506C6F74746572104746585F447261775F506C6F747465720D5F5F696E697469616C697A6564164746585F436C65616E5F4275666665725F4672616D65184746585F506C6F7474657248616E646C6554797065446566064865696774680E70726573735F6261636B776172640D70726573735F666F727761726419464F4E545F5441484F4D415F385F434841525F48454947485417464F4E545F5441484F4D415F385F464F4E545F545950450753616D706C65540E6D6963726F737465705F636E74310C47726170685F4865696768740F4C43445F4372656174654672616D650643535F73657414535049446973705F53656E645F436F6D6D616E640D666F6E745F7461686F6D615F38000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000018024E10000000000001100000000000000000000000000000000010000000100000001800A810000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E2280000002000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B46350000000000000000000000000100000001000000000000000000000001000000020021802280000000000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B4635000000000000000000000000010000000100000000000000000000000100000000002180E0010000000000007500000021456E65726779204D6561737572656D656E742026776974686F75742044656275670000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C488000000000000160000000000000000000000000000000001000000010000000180C988000000000400180000000000000000000000000000000001000000010000000180C788000000000000190000000000000000000000000000000001000000010000002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000003002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000000002180E50100000000000078000000264B696C6C20416C6C20427265616B706F696E747320696E204163746976652050726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180E601000000000000790000002F4B696C6C20416C6C20427265616B706F696E747320696E204D756C74692D50726F6A65637420576F726B73706163650000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000021804C010000020001001A0000000F2650726F6A6563742057696E646F77000000000000000000000000010000000100000000000000000000000100000008002180DD880000000000001A0000000750726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180DC8B0000000000003A00000005426F6F6B73000000000000000000000000010000000100000000000000000000000100000000002180E18B0000000000003B0000000946756E6374696F6E73000000000000000000000000010000000100000000000000000000000100000000002180E28B000000000000400000000954656D706C6174657300000000000000000000000001000000010000000000000000000000010000000000218018890000000000003D0000000E536F757263652042726F777365720000000000000000000000000100000001000000000000000000000001000000000021800000000000000400FFFFFFFF00000000000000000001000000000000000100000000000000000000000100000000002180D988000000000000390000000C4275696C64204F7574707574000000000000000000000000010000000100000000000000000000000100000000002180E38B000000000000410000000B46696E64204F75747075740000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FB7F0000000000001B000000000000000000000000000000000100000001000000000000000446696C65C6030000 + 2867 + 00200000010000002800FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000000000000000000000000000000000000000100000001000000018001E100000000000001000000000000000000000000000000000100000001000000018003E1000000000000020000000000000000000000000000000001000000010000000180CD7F0000000000000300000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018023E100000000040004000000000000000000000000000000000100000001000000018022E100000000040005000000000000000000000000000000000100000001000000018025E10000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001802BE10000000000000700000000000000000000000000000000010000000100000001802CE10000000004000800000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001807A8A0000000000000900000000000000000000000000000000010000000100000001807B8A0000000000000A00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180D3B00000000000000B000000000000000000000000000000000100000001000000018015B10000000004000C0000000000000000000000000000000001000000010000000180F4B00000000004000D000000000000000000000000000000000100000001000000018036B10000000004000E00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FF88000000000400460000000000000000000000000000000001000000010000000180FE880000000004004500000000000000000000000000000000010000000100000001800B810000000004001300000000000000000000000000000000010000000100000001800C810000000004001400000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180F0880000020000000F000000000000000000000000000000000100000001000000FFFF0100120043555646696E64436F6D626F427574746F6EE80300000000000000000000000000000000000000000000000100000001000000960000000200205000000000105F5F4746585F447261775F4172726F7796000000000000001400105F5F4746585F447261775F4172726F770E4746585F447261775F4172726F77025049001168506C6F742D3E706C6F744865696768740B7069785F795F666C6F6174114746585F506C6F747465725F466C6F61740F4746585F506C6F747465725F496E74104746585F466C6F6174506C6F747465720D706C6F745A65726F53686966740D5F5F696E697469616C697A656409706C6F74594178697309706C6F74584178697309706C6F744672616D650A646174615369676E65640A7369676E65644461746109706C6F7453686966740970726576446174615908707265765069785907706C6F74496E640000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000018024E10000000000001100000000000000000000000000000000010000000100000001800A810000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E2280000002000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B46350000000000000000000000000100000001000000000000000000000001000000020021802280000000000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B4635000000000000000000000000010000000100000000000000000000000100000000002180E0010000000000007500000021456E65726779204D6561737572656D656E742026776974686F75742044656275670000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C488000000000000160000000000000000000000000000000001000000010000000180C988000000000400180000000000000000000000000000000001000000010000000180C788000000000000190000000000000000000000000000000001000000010000002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000003002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000000002180E50100000000000078000000264B696C6C20416C6C20427265616B706F696E747320696E204163746976652050726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180E601000000000000790000002F4B696C6C20416C6C20427265616B706F696E747320696E204D756C74692D50726F6A65637420576F726B73706163650000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000021804C010000020001001A0000000F2650726F6A6563742057696E646F77000000000000000000000000010000000100000000000000000000000100000008002180DD880000000000001A0000000750726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180DC8B0000000000003A00000005426F6F6B73000000000000000000000000010000000100000000000000000000000100000000002180E18B0000000000003B0000000946756E6374696F6E73000000000000000000000000010000000100000000000000000000000100000000002180E28B000000000000400000000954656D706C6174657300000000000000000000000001000000010000000000000000000000010000000000218018890000000000003D0000000E536F757263652042726F777365720000000000000000000000000100000001000000000000000000000001000000000021800000000000000400FFFFFFFF00000000000000000001000000000000000100000000000000000000000100000000002180D988000000000000390000000C4275696C64204F7574707574000000000000000000000000010000000100000000000000000000000100000000002180E38B000000000000410000000B46696E64204F75747075740000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FB7F0000000000001B000000000000000000000000000000000100000001000000000000000446696C65C6030000 1423 @@ -1822,7 +1822,7 @@ Build 974 - 00200000010000001000FFFF01001100434D4643546F6F6C426172427574746F6ECF7F0000000000001C0000000000000000000000000000000001000000010000000180D07F0000000000001D000000000000000000000000000000000100000001000000018030800000000000001E000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6EC7040000000000006A0000000C4261746368204275696C2664000000000000000000000000010000000100000000000000000000000100000004000580C7040000000000006A0000000C4261746368204275696C266400000000000000000000000001000000010000000000000000000000010000000000058046070000000000006B0000000D42617463682052656275696C640000000000000000000000000100000001000000000000000000000001000000000005804707000000000000FFFFFFFF0B426174636820436C65616E0000000000000000010000000000000001000000000000000000000001000000000005809E8A0000000000001F0000000F4261746326682053657475702E2E2E000000000000000000000000010000000100000000000000000000000100000000000180D17F0000000004002000000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001804C8A0000000000002100000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001900434D4643546F6F6C426172436F6D626F426F78427574746F6EBA0000000000000000000000000000000000000000000000000100000001000000960000000300205000000000076766785F6C636496000000000000000100076766785F6C6364000000000180EB880000000000002200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C07F000000000000230000000000000000000000000000000001000000010000000180B08A000000000400240000000000000000000000000000000001000000010000000180A8010000000000004E00000000000000000000000000000000010000000100000001807202000000000000530000000000000000000000000000000001000000010000000180BE010000000000005000000000000000000000000000000000010000000100000000000000054275696C64DC010000 + 00200000010000001000FFFF01001100434D4643546F6F6C426172427574746F6ECF7F0000000004001C0000000000000000000000000000000001000000010000000180D07F0000000000001D000000000000000000000000000000000100000001000000018030800000000000001E000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6EC7040000000000006A0000000C4261746368204275696C2664000000000000000000000000010000000100000000000000000000000100000004000580C7040000000000006A0000000C4261746368204275696C266400000000000000000000000001000000010000000000000000000000010000000000058046070000000000006B0000000D42617463682052656275696C640000000000000000000000000100000001000000000000000000000001000000000005804707000000000000FFFFFFFF0B426174636820436C65616E0000000000000000010000000000000001000000000000000000000001000000000005809E8A0000000000001F0000000F4261746326682053657475702E2E2E000000000000000000000000010000000100000000000000000000000100000000000180D17F0000000004002000000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001804C8A0000000000002100000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001900434D4643546F6F6C426172436F6D626F426F78427574746F6EBA0000000000000000000000000000000000000000000000000100000001000000960000000300205000000000076766785F6C636496000000000000000100076766785F6C6364000000000180EB880000000000002200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C07F000000000000230000000000000000000000000000000001000000010000000180B08A000000000400240000000000000000000000000000000001000000010000000180A8010000000000004E00000000000000000000000000000000010000000100000001807202000000000000530000000000000000000000000000000001000000010000000180BE010000000000005000000000000000000000000000000000010000000100000000000000054275696C64DC010000 583 @@ -1927,7 +1927,7 @@ 0 32767 0 - 4096 + 32768 0 16 @@ -1947,7 +1947,7 @@ 0 32767 0 - 4096 + 32768 0 16 @@ -1967,7 +1967,7 @@ 0 32767 0 - 4096 + 32768 0 16 @@ -1987,7 +1987,7 @@ 0 32767 0 - 4096 + 32768 0 16 @@ -2087,7 +2087,7 @@ 0 32767 0 - 4096 + 32768 0 16 @@ -2107,7 +2107,7 @@ 0 32767 0 - 4096 + 32768 0 16 @@ -2127,7 +2127,7 @@ 0 32767 0 - 4096 + 32768 0 16 @@ -2147,7 +2147,7 @@ 0 32767 0 - 4096 + 32768 0 16 @@ -2167,7 +2167,7 @@ 0 32767 0 - 4096 + 32768 0 16 @@ -2367,7 +2367,7 @@ 0 32767 0 - 4096 + 32768 0 16 @@ -2947,7 +2947,7 @@ 0 32767 0 - 4096 + 32768 0 16 @@ -2967,7 +2967,7 @@ 0 32767 0 - 4096 + 32768 0 16 @@ -3527,7 +3527,7 @@ 0 32767 0 - 4096 + 32768 0 16 @@ -3540,14 +3540,14 @@ 3521 - 000000000D000000000000000020000001000000FFFFFFFFFFFFFFFFD6000000BA000000DE040000BE00000001000000010000100400000001000000000000000000000000000000000000000000000001000000FFFFFFFF08000000CB00000057010000CC000000F08B00005A01000079070000D601000045890000FFFF02000B004354616262656450616E650020000001000000D600000066000000DE040000D1000000D60000004F000000DE040000BA0000000000000040280056080000000B446973617373656D626C7901000000CB00000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A6572000000005701000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A657200000000CC00000001000000FFFFFFFFFFFFFFFF0E4C6F67696320416E616C797A657200000000F08B000001000000FFFFFFFFFFFFFFFF0D436F646520436F766572616765000000005A01000001000000FFFFFFFFFFFFFFFF11496E737472756374696F6E205472616365000000007907000001000000FFFFFFFFFFFFFFFF0F53797374656D20416E616C797A657200000000D601000001000000FFFFFFFFFFFFFFFF104576656E742053746174697374696373000000004589000001000000FFFFFFFFFFFFFFFF0000000000000000000000000000000000000000000000000000000001000000FFFFFFFFCB00000001000000FFFFFFFFCB000000000000000040000001000000FFFFFFFFFFFFFFFFDE0400004F000000E2040000250300000100000002000010040000000100000019FBFFFFFDFFFFFF00000000000000000000000001000000FFFFFFFF020000008F0700009007000001800040000001000000E204000066000000900600003C030000E20400004F00000090060000250300000000000040410056020000001343616C6C20537461636B202B204C6F63616C73010000008F07000001000000FFFFFFFFFFFFFFFF0757617463682031010000009007000001000000FFFFFFFFFFFFFFFF0000000000000000000000000000000000000000000000000000000001000000FFFFFFFF8F07000001000000FFFFFFFF8F070000000000000040000000000000FFFFFFFFFFFFFFFF060400004F0000000A04000018020000000000000200000004000000010000000000000000000000FFFFFFFF2B000000E2050000CA0900002D8C00002E8C00002F8C0000308C0000318C0000328C0000338C0000348C0000358C0000368C0000378C0000388C0000398C00003A8C00003B8C00003C8C00003D8C00003E8C00003F8C0000408C0000418C000050C3000051C3000052C3000053C3000054C3000055C3000056C3000057C3000058C3000059C300005AC300005BC300005CC300005DC300005EC300005FC3000060C3000061C3000062C3000063C30000018000400000000000000A04000066000000DC0400002F0200000A0400004F000000DC0400001802000000000000404100462B0000000753796D626F6C7300000000E205000001000000FFFFFFFFFFFFFFFF0A5472616365204461746100000000CA09000001000000FFFFFFFFFFFFFFFF00000000002D8C000001000000FFFFFFFFFFFFFFFF00000000002E8C000001000000FFFFFFFFFFFFFFFF00000000002F8C000001000000FFFFFFFFFFFFFFFF0000000000308C000001000000FFFFFFFFFFFFFFFF0000000000318C000001000000FFFFFFFFFFFFFFFF0000000000328C000001000000FFFFFFFFFFFFFFFF0000000000338C000001000000FFFFFFFFFFFFFFFF0000000000348C000001000000FFFFFFFFFFFFFFFF0000000000358C000001000000FFFFFFFFFFFFFFFF0000000000368C000001000000FFFFFFFFFFFFFFFF0000000000378C000001000000FFFFFFFFFFFFFFFF0000000000388C000001000000FFFFFFFFFFFFFFFF0000000000398C000001000000FFFFFFFFFFFFFFFF00000000003A8C000001000000FFFFFFFFFFFFFFFF00000000003B8C000001000000FFFFFFFFFFFFFFFF00000000003C8C000001000000FFFFFFFFFFFFFFFF00000000003D8C000001000000FFFFFFFFFFFFFFFF00000000003E8C000001000000FFFFFFFFFFFFFFFF00000000003F8C000001000000FFFFFFFFFFFFFFFF0000000000408C000001000000FFFFFFFFFFFFFFFF0000000000418C000001000000FFFFFFFFFFFFFFFF000000000050C3000001000000FFFFFFFFFFFFFFFF000000000051C3000001000000FFFFFFFFFFFFFFFF000000000052C3000001000000FFFFFFFFFFFFFFFF000000000053C3000001000000FFFFFFFFFFFFFFFF000000000054C3000001000000FFFFFFFFFFFFFFFF000000000055C3000001000000FFFFFFFFFFFFFFFF000000000056C3000001000000FFFFFFFFFFFFFFFF000000000057C3000001000000FFFFFFFFFFFFFFFF000000000058C3000001000000FFFFFFFFFFFFFFFF000000000059C3000001000000FFFFFFFFFFFFFFFF00000000005AC3000001000000FFFFFFFFFFFFFFFF00000000005BC3000001000000FFFFFFFFFFFFFFFF00000000005CC3000001000000FFFFFFFFFFFFFFFF00000000005DC3000001000000FFFFFFFFFFFFFFFF00000000005EC3000001000000FFFFFFFFFFFFFFFF00000000005FC3000001000000FFFFFFFFFFFFFFFF000000000060C3000001000000FFFFFFFFFFFFFFFF000000000061C3000001000000FFFFFFFFFFFFFFFF000000000062C3000001000000FFFFFFFFFFFFFFFF000000000063C3000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFE205000001000000FFFFFFFFE2050000000000000010000001000000FFFFFFFFFFFFFFFFD20000004F000000D600000025030000010000000200001004000000010000000000000000000000FFFFFFFF05000000ED0300006D000000C3000000C400000073940000018000100000010000000000000066000000D20000003C030000000000004F000000D2000000250300000000000040410056050000000750726F6A65637401000000ED03000001000000FFFFFFFFFFFFFFFF05426F6F6B73000000006D00000001000000FFFFFFFFFFFFFFFF0946756E6374696F6E7300000000C300000001000000FFFFFFFFFFFFFFFF0954656D706C6174657300000000C400000001000000FFFFFFFFFFFFFFFF09526567697374657273010000007394000001000000FFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000001000000FFFFFFFFED03000001000000FFFFFFFFED030000000000000080000001000000FFFFFFFFFFFFFFFF0000000025030000900600002903000001000000010000100400000001000000000000000000000000000000000000000000000001000000C6000000FFFFFFFF0D0000009307000094070000950700009607000091070000B5010000B801000038030000B9050000BA050000BB050000BC050000CB090000018000800000010000004C0300004003000090060000DF0300004C0300002903000090060000C803000000000000404100560D0000000755415254202331000000009307000001000000FFFFFFFFFFFFFFFF0755415254202332000000009407000001000000FFFFFFFFFFFFFFFF0755415254202333000000009507000001000000FFFFFFFFFFFFFFFF15446562756720287072696E74662920566965776572000000009607000001000000FFFFFFFFFFFFFFFF0757617463682032000000009107000001000000FFFFFFFFFFFFFFFF10547261636520457863657074696F6E7300000000B501000001000000FFFFFFFFFFFFFFFF0E4576656E7420436F756E7465727300000000B801000001000000FFFFFFFFFFFFFFFF09554C494E4B706C7573000000003803000001000000FFFFFFFFFFFFFFFF084D656D6F7279203101000000B905000001000000FFFFFFFFFFFFFFFF084D656D6F7279203200000000BA05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203300000000BB05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203400000000BC05000001000000FFFFFFFFFFFFFFFF105472616365204E617669676174696F6E00000000CB09000001000000FFFFFFFFFFFFFFFF080000000000000001000000000000000100000001000000FFFFFFFF48030000290300004C030000C803000001000000020000100400000000000000000000000000000000000000000000000000000002000000C6000000FFFFFFFF9307000001000000FFFFFFFF9307000001000000C6000000000000000080000000000000FFFFFFFFFFFFFFFF0000000018020000DC0400001C020000000000000100000004000000010000000000000000000000FFFFFFFF06000000C5000000C7000000B4010000D2010000CF01000077940000018000800000000000000000000033020000DC040000BE020000000000001C020000DC040000A70200000000000040820046060000000C4275696C64204F757470757400000000C500000001000000FFFFFFFFFFFFFFFF0D46696E6420496E2046696C657300000000C700000001000000FFFFFFFFFFFFFFFF0A4572726F72204C69737400000000B401000001000000FFFFFFFFFFFFFFFF0E536F757263652042726F7773657200000000D201000001000000FFFFFFFFFFFFFFFF0E416C6C205265666572656E63657300000000CF01000001000000FFFFFFFFFFFFFFFF0642726F777365000000007794000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFC500000001000000FFFFFFFFC5000000000000000000000000000000 + 000000000D000000000000000020000001000000FFFFFFFFFFFFFFFFD6000000BA000000DE040000BE00000001000000010000100400000001000000000000000000000000000000000000000000000001000000FFFFFFFF08000000CB00000057010000CC000000F08B00005A01000079070000D601000045890000FFFF02000B004354616262656450616E650020000001000000D600000066000000DE040000D1000000D60000004F000000DE040000BA0000000000000040280056080000000B446973617373656D626C7901000000CB00000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A6572000000005701000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A657200000000CC00000001000000FFFFFFFFFFFFFFFF0E4C6F67696320416E616C797A657200000000F08B000001000000FFFFFFFFFFFFFFFF0D436F646520436F766572616765000000005A01000001000000FFFFFFFFFFFFFFFF11496E737472756374696F6E205472616365000000007907000001000000FFFFFFFFFFFFFFFF0F53797374656D20416E616C797A657200000000D601000001000000FFFFFFFFFFFFFFFF104576656E742053746174697374696373000000004589000001000000FFFFFFFFFFFFFFFF0000000000000000000000000000000000000000000000000000000001000000FFFFFFFFCB00000001000000FFFFFFFFCB000000000000000040000001000000FFFFFFFFFFFFFFFFDE0400004F000000E2040000250300000100000002000010040000000100000019FBFFFFFDFFFFFF00000000000000000000000001000000FFFFFFFF020000008F0700009007000001800040000001000000E204000066000000900600003C030000E20400004F00000090060000250300000000000040410056020000001343616C6C20537461636B202B204C6F63616C73010000008F07000001000000FFFFFFFFFFFFFFFF0757617463682031010000009007000001000000FFFFFFFFFFFFFFFF0100000000000000000000000000000000000000000000000000000001000000FFFFFFFF8F07000001000000FFFFFFFF8F070000000000000040000000000000FFFFFFFFFFFFFFFF060400004F0000000A04000018020000000000000200000004000000010000000000000000000000FFFFFFFF2B000000E2050000CA0900002D8C00002E8C00002F8C0000308C0000318C0000328C0000338C0000348C0000358C0000368C0000378C0000388C0000398C00003A8C00003B8C00003C8C00003D8C00003E8C00003F8C0000408C0000418C000050C3000051C3000052C3000053C3000054C3000055C3000056C3000057C3000058C3000059C300005AC300005BC300005CC300005DC300005EC300005FC3000060C3000061C3000062C3000063C30000018000400000000000000A04000066000000DC0400002F0200000A0400004F000000DC0400001802000000000000404100462B0000000753796D626F6C7300000000E205000001000000FFFFFFFFFFFFFFFF0A5472616365204461746100000000CA09000001000000FFFFFFFFFFFFFFFF00000000002D8C000001000000FFFFFFFFFFFFFFFF00000000002E8C000001000000FFFFFFFFFFFFFFFF00000000002F8C000001000000FFFFFFFFFFFFFFFF0000000000308C000001000000FFFFFFFFFFFFFFFF0000000000318C000001000000FFFFFFFFFFFFFFFF0000000000328C000001000000FFFFFFFFFFFFFFFF0000000000338C000001000000FFFFFFFFFFFFFFFF0000000000348C000001000000FFFFFFFFFFFFFFFF0000000000358C000001000000FFFFFFFFFFFFFFFF0000000000368C000001000000FFFFFFFFFFFFFFFF0000000000378C000001000000FFFFFFFFFFFFFFFF0000000000388C000001000000FFFFFFFFFFFFFFFF0000000000398C000001000000FFFFFFFFFFFFFFFF00000000003A8C000001000000FFFFFFFFFFFFFFFF00000000003B8C000001000000FFFFFFFFFFFFFFFF00000000003C8C000001000000FFFFFFFFFFFFFFFF00000000003D8C000001000000FFFFFFFFFFFFFFFF00000000003E8C000001000000FFFFFFFFFFFFFFFF00000000003F8C000001000000FFFFFFFFFFFFFFFF0000000000408C000001000000FFFFFFFFFFFFFFFF0000000000418C000001000000FFFFFFFFFFFFFFFF000000000050C3000001000000FFFFFFFFFFFFFFFF000000000051C3000001000000FFFFFFFFFFFFFFFF000000000052C3000001000000FFFFFFFFFFFFFFFF000000000053C3000001000000FFFFFFFFFFFFFFFF000000000054C3000001000000FFFFFFFFFFFFFFFF000000000055C3000001000000FFFFFFFFFFFFFFFF000000000056C3000001000000FFFFFFFFFFFFFFFF000000000057C3000001000000FFFFFFFFFFFFFFFF000000000058C3000001000000FFFFFFFFFFFFFFFF000000000059C3000001000000FFFFFFFFFFFFFFFF00000000005AC3000001000000FFFFFFFFFFFFFFFF00000000005BC3000001000000FFFFFFFFFFFFFFFF00000000005CC3000001000000FFFFFFFFFFFFFFFF00000000005DC3000001000000FFFFFFFFFFFFFFFF00000000005EC3000001000000FFFFFFFFFFFFFFFF00000000005FC3000001000000FFFFFFFFFFFFFFFF000000000060C3000001000000FFFFFFFFFFFFFFFF000000000061C3000001000000FFFFFFFFFFFFFFFF000000000062C3000001000000FFFFFFFFFFFFFFFF000000000063C3000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFE205000001000000FFFFFFFFE2050000000000000010000001000000FFFFFFFFFFFFFFFFD20000004F000000D600000025030000010000000200001004000000010000000000000000000000FFFFFFFF05000000ED0300006D000000C3000000C400000073940000018000100000010000000000000066000000D20000003C030000000000004F000000D2000000250300000000000040410056050000000750726F6A65637401000000ED03000001000000FFFFFFFFFFFFFFFF05426F6F6B73000000006D00000001000000FFFFFFFFFFFFFFFF0946756E6374696F6E7300000000C300000001000000FFFFFFFFFFFFFFFF0954656D706C6174657300000000C400000001000000FFFFFFFFFFFFFFFF09526567697374657273010000007394000001000000FFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000001000000FFFFFFFFED03000001000000FFFFFFFFED030000000000000080000001000000FFFFFFFFFFFFFFFF0000000025030000900600002903000001000000010000100400000001000000000000000000000000000000000000000000000001000000C6000000FFFFFFFF0D0000009307000094070000950700009607000091070000B5010000B801000038030000B9050000BA050000BB050000BC050000CB090000018000800000010000004C0300004003000090060000DF0300004C0300002903000090060000C803000000000000404100560D0000000755415254202331000000009307000001000000FFFFFFFFFFFFFFFF0755415254202332000000009407000001000000FFFFFFFFFFFFFFFF0755415254202333000000009507000001000000FFFFFFFFFFFFFFFF15446562756720287072696E74662920566965776572000000009607000001000000FFFFFFFFFFFFFFFF0757617463682032000000009107000001000000FFFFFFFFFFFFFFFF10547261636520457863657074696F6E7300000000B501000001000000FFFFFFFFFFFFFFFF0E4576656E7420436F756E7465727300000000B801000001000000FFFFFFFFFFFFFFFF09554C494E4B706C7573000000003803000001000000FFFFFFFFFFFFFFFF084D656D6F7279203101000000B905000001000000FFFFFFFFFFFFFFFF084D656D6F7279203200000000BA05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203300000000BB05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203400000000BC05000001000000FFFFFFFFFFFFFFFF105472616365204E617669676174696F6E00000000CB09000001000000FFFFFFFFFFFFFFFF080000000000000001000000000000000100000001000000FFFFFFFF48030000290300004C030000C803000001000000020000100400000000000000000000000000000000000000000000000000000002000000C6000000FFFFFFFF9307000001000000FFFFFFFF9307000001000000C6000000000000000080000000000000FFFFFFFFFFFFFFFF0000000018020000DC0400001C020000000000000100000004000000010000000000000000000000FFFFFFFF06000000C5000000C7000000B4010000D2010000CF01000077940000018000800000000000000000000033020000DC040000BE020000000000001C020000DC040000A70200000000000040820046060000000C4275696C64204F757470757400000000C500000001000000FFFFFFFFFFFFFFFF0D46696E6420496E2046696C657300000000C700000001000000FFFFFFFFFFFFFFFF0A4572726F72204C69737400000000B401000001000000FFFFFFFFFFFFFFFF0E536F757263652042726F7773657200000000D201000001000000FFFFFFFFFFFFFFFF0E416C6C205265666572656E63657300000000CF01000001000000FFFFFFFFFFFFFFFF0642726F777365000000007794000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFC500000001000000FFFFFFFFC5000000000000000000000000000000 59392 File - 2897 - 00200000010000002800FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000000000000000000000000000000000000000100000001000000018001E100000000000001000000000000000000000000000000000100000001000000018003E1000000000000020000000000000000000000000000000001000000010000000180CD7F0000000000000300000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018023E100000000040004000000000000000000000000000000000100000001000000018022E100000000040005000000000000000000000000000000000100000001000000018025E10000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001802BE10000000000000700000000000000000000000000000000010000000100000001802CE10000000004000800000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001807A8A0000000000000900000000000000000000000000000000010000000100000001807B8A0000000000000A00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180D3B00000000000000B000000000000000000000000000000000100000001000000018015B10000000004000C0000000000000000000000000000000001000000010000000180F4B00000000004000D000000000000000000000000000000000100000001000000018036B10000000004000E00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FF88000000000400460000000000000000000000000000000001000000010000000180FE880000000004004500000000000000000000000000000000010000000100000001800B810000000004001300000000000000000000000000000000010000000100000001800C810000000004001400000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180F0880000020000000F000000000000000000000000000000000100000001000000FFFF0100120043555646696E64436F6D626F427574746F6EE803000000000000000000000000000000000000000000000001000000010000009600000002002050000000000873696E655F636E74960000000000000012000873696E655F636E740B4746585F506C6F74746572104746585F447261775F506C6F747465720D5F5F696E697469616C697A6564164746585F436C65616E5F4275666665725F4672616D65184746585F506C6F7474657248616E646C6554797065446566064865696774680E70726573735F6261636B776172640D70726573735F666F727761726419464F4E545F5441484F4D415F385F434841525F48454947485417464F4E545F5441484F4D415F385F464F4E545F545950450753616D706C65540E6D6963726F737465705F636E74310C47726170685F4865696768740F4C43445F4372656174654672616D650643535F73657414535049446973705F53656E645F436F6D6D616E640D666F6E745F7461686F6D615F38000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000018024E10000000000001100000000000000000000000000000000010000000100000001800A810000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E2280000002000300150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B46350000000000000000000000000100000001000000000000000000000001000000020021802280000000000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B4635000000000000000000000000010000000100000000000000000000000100000000002180E0010000000000007500000021456E65726779204D6561737572656D656E742026776974686F75742044656275670000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C488000000000000160000000000000000000000000000000001000000010000000180C988000000000400180000000000000000000000000000000001000000010000000180C788000000000000190000000000000000000000000000000001000000010000002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000003002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000000002180E50100000000000078000000264B696C6C20416C6C20427265616B706F696E747320696E204163746976652050726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180E601000000000000790000002F4B696C6C20416C6C20427265616B706F696E747320696E204D756C74692D50726F6A65637420576F726B73706163650000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000021804C010000020001001A0000000F2650726F6A6563742057696E646F77000000000000000000000000010000000100000000000000000000000100000008002180DD880000000000001A0000000750726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180DC8B0000000000003A00000005426F6F6B73000000000000000000000000010000000100000000000000000000000100000000002180E18B0000000000003B0000000946756E6374696F6E73000000000000000000000000010000000100000000000000000000000100000000002180E28B000000000000400000000954656D706C6174657300000000000000000000000001000000010000000000000000000000010000000000218018890000000000003D0000000E536F757263652042726F777365720000000000000000000000000100000001000000000000000000000001000000000021800000000000000400FFFFFFFF00000000000000000001000000000000000100000000000000000000000100000000002180D988000000000000390000000C4275696C64204F7574707574000000000000000000000000010000000100000000000000000000000100000000002180E38B000000000000410000000B46696E64204F75747075740000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FB7F0000000000001B000000000000000000000000000000000100000001000000000000000446696C65C6030000 + 2867 + 00200000010000002800FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000000000000000000000000000000000000000100000001000000018001E100000000000001000000000000000000000000000000000100000001000000018003E1000000000000020000000000000000000000000000000001000000010000000180CD7F0000000000000300000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018023E100000000040004000000000000000000000000000000000100000001000000018022E100000000040005000000000000000000000000000000000100000001000000018025E10000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001802BE10000000004000700000000000000000000000000000000010000000100000001802CE10000000004000800000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001807A8A0000000000000900000000000000000000000000000000010000000100000001807B8A0000000000000A00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180D3B00000000000000B000000000000000000000000000000000100000001000000018015B10000000004000C0000000000000000000000000000000001000000010000000180F4B00000000004000D000000000000000000000000000000000100000001000000018036B10000000004000E00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FF88000000000400460000000000000000000000000000000001000000010000000180FE880000000004004500000000000000000000000000000000010000000100000001800B810000000004001300000000000000000000000000000000010000000100000001800C810000000004001400000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180F0880000020000000F000000000000000000000000000000000100000001000000FFFF0100120043555646696E64436F6D626F427574746F6EE80300000000000000000000000000000000000000000000000100000001000000960000000200205000000000105F5F4746585F447261775F4172726F7796000000000000001400105F5F4746585F447261775F4172726F770E4746585F447261775F4172726F77025049001168506C6F742D3E706C6F744865696768740B7069785F795F666C6F6174114746585F506C6F747465725F466C6F61740F4746585F506C6F747465725F496E74104746585F466C6F6174506C6F747465720D706C6F745A65726F53686966740D5F5F696E697469616C697A656409706C6F74594178697309706C6F74584178697309706C6F744672616D650A646174615369676E65640A7369676E65644461746109706C6F7453686966740970726576446174615908707265765069785907706C6F74496E640000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000018024E10000000000001100000000000000000000000000000000010000000100000001800A810000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E2280000002000100150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B46350000000000000000000000000100000001000000000000000000000001000000020021802280000000000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B4635000000000000000000000000010000000100000000000000000000000100000000002180E0010000000000007500000021456E65726779204D6561737572656D656E742026776974686F75742044656275670000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C488000000000000160000000000000000000000000000000001000000010000000180C988000000000400180000000000000000000000000000000001000000010000000180C788000000000000190000000000000000000000000000000001000000010000002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000003002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000000002180E50100000000000078000000264B696C6C20416C6C20427265616B706F696E747320696E204163746976652050726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180E601000000000000790000002F4B696C6C20416C6C20427265616B706F696E747320696E204D756C74692D50726F6A65637420576F726B73706163650000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000021804C010000020001001A0000000F2650726F6A6563742057696E646F77000000000000000000000000010000000100000000000000000000000100000008002180DD880000000000001A0000000750726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180DC8B0000000000003A00000005426F6F6B73000000000000000000000000010000000100000000000000000000000100000000002180E18B0000000000003B0000000946756E6374696F6E73000000000000000000000000010000000100000000000000000000000100000000002180E28B000000000000400000000954656D706C6174657300000000000000000000000001000000010000000000000000000000010000000000218018890000000000003D0000000E536F757263652042726F777365720000000000000000000000000100000001000000000000000000000001000000000021800000000000000400FFFFFFFF00000000000000000001000000000000000100000000000000000000000100000000002180D988000000000000390000000C4275696C64204F7574707574000000000000000000000000010000000100000000000000000000000100000000002180E38B000000000000410000000B46696E64204F75747075740000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FB7F0000000000001B000000000000000000000000000000000100000001000000000000000446696C65C6030000 1423 @@ -3563,7 +3563,7 @@ Build 955 - 00200000000000001000FFFF01001100434D4643546F6F6C426172427574746F6ECF7F0000000000001C0000000000000000000000000000000001000000010000000180D07F0000000000001D000000000000000000000000000000000100000001000000018030800000000000001E000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6EC7040000000000006A0000000C4261746368204275696C2664000000000000000000000000010000000100000000000000000000000100000004000580C7040000000000006A0000000C4261746368204275696C266400000000000000000000000001000000010000000000000000000000010000000000058046070000000000006B0000000D42617463682052656275696C640000000000000000000000000100000001000000000000000000000001000000000005804707000000000000FFFFFFFF0B426174636820436C65616E0000000000000000010000000000000001000000000000000000000001000000000005809E8A0000000000001F0000000F4261746326682053657475702E2E2E000000000000000000000000010000000100000000000000000000000100000000000180D17F0000000000002000000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001804C8A0000000000002100000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001900434D4643546F6F6C426172436F6D626F426F78427574746F6EBA00000000000000000000000000000000000000000000000001000000010000009600000003002050FFFFFFFF00960000000000000000000180EB880000000000002200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C07F000000000000230000000000000000000000000000000001000000010000000180B08A000000000000240000000000000000000000000000000001000000010000000180A8010000000000004E00000000000000000000000000000000010000000100000001807202000000000000530000000000000000000000000000000001000000010000000180BE010000000000005000000000000000000000000000000000010000000100000000000000054275696C64DC010000 + 00200000000000001000FFFF01001100434D4643546F6F6C426172427574746F6ECF7F0000000000001C0000000000000000000000000000000001000000010000000180D07F0000000000001D000000000000000000000000000000000100000001000000018030800000000000001E000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6EC7040000000000006A0000000C4261746368204275696C2664000000000000000000000000010000000100000000000000000000000100000004000580C7040000000000006A0000000C4261746368204275696C266400000000000000000000000001000000010000000000000000000000010000000000058046070000000000006B0000000D42617463682052656275696C640000000000000000000000000100000001000000000000000000000001000000000005804707000000000000FFFFFFFF0B426174636820436C65616E0100000000000000010000000000000001000000000000000000000001000000000005809E8A0000000000001F0000000F4261746326682053657475702E2E2E000000000000000000000000010000000100000000000000000000000100000000000180D17F0000000000002000000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001804C8A0000000000002100000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001900434D4643546F6F6C426172436F6D626F426F78427574746F6EBA00000000000000000000000000000000000000000000000001000000010000009600000003002050FFFFFFFF00960000000000000000000180EB880000000000002200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C07F000000000000230000000000000000000000000000000001000000010000000180B08A000000000000240000000000000000000000000000000001000000010000000180A8010000000000004E00000000000000000000000000000000010000000100000001807202000000000000530000000000000000000000000000000001000000010000000180BE010000000000005000000000000000000000000000000000010000000100000000000000054275696C64DC010000 583 @@ -3579,7 +3579,7 @@ Debug 2362 - 00200000010000001900FFFF01001100434D4643546F6F6C426172427574746F6ECC880000000000002500000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018017800000000000002600000000000000000000000000000000010000000100000001801D800000000004002700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001801A800000000000002800000000000000000000000000000000010000000100000001801B80000000000000290000000000000000000000000000000001000000010000000180E57F0000000000002A00000000000000000000000000000000010000000100000001801C800000000000002B00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018000890000000000002C00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180E48B0000020001002D0000000000000000000000000000000001000000010000000180F07F0000020001002E0000000000000000000000000000000001000000010000000180E8880000020000003700000000000000000000000000000000010000000100000001803B010000020001002F0000000000000000000000000000000001000000010000000180BB8A00000200010030000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E0E01000002000100310000000D57617463682057696E646F7773000000000000000000000000010000000100000000000000000000000100000003001380D88B00000000000031000000085761746368202631000000000000000000000000010000000100000000000000000000000100000000001380D98B00000000000031000000085761746368202632000000000000000000000000010000000100000000000000000000000100000000001380CE01000000000000FFFFFFFF0C576174636820416E63686F720000000000000000010000000000000001000000000000000000000001000000000013800F0100000200010032000000094D656D6F7279202631000000000000000000000000010000000100000000000000000000000100000004001380D28B00000000000032000000094D656D6F7279202631000000000000000000000000010000000100000000000000000000000100000000001380D38B00000000000032000000094D656D6F7279202632000000000000000000000000010000000100000000000000000000000100000000001380D48B00000000000032000000094D656D6F7279202633000000000000000000000000010000000100000000000000000000000100000000001380D58B00000000000032000000094D656D6F72792026340000000000000000000000000100000001000000000000000000000001000000000013801001000002000000330000000855415254202326310000000000000000000000000100000001000000000000000000000001000000040013809307000000000000330000000855415254202326310000000000000000000000000100000001000000000000000000000001000000000013809407000000000000330000000855415254202326320000000000000000000000000100000001000000000000000000000001000000000013809507000000000000330000000855415254202326330000000000000000000000000100000001000000000000000000000001000000000013809607000000000000330000001626446562756720287072696E746629205669657765720000000000000000000000000100000001000000000000000000000001000000000013803C010000000000007200000010416E616C797369732057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380658A000000000000340000000F264C6F67696320416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380DC7F0000000000003E0000001526506572666F726D616E636520416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380E788000000000000380000000E26436F646520436F766572616765000000000000000000000000010000000100000000000000000000000100000000001380CD01000000000000FFFFFFFF0F416E616C7973697320416E63686F7200000000000000000100000000000000010000000000000000000000010000000000138053010000000000003F0000000D54726163652057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013805401000000000000FFFFFFFF115472616365204D656E7520416E63686F720000000000000000010000000000000001000000000000000000000001000000000013802901000000000000350000001553797374656D205669657765722057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013804B01000000000000FFFFFFFF1453797374656D2056696577657220416E63686F720000000000000000010000000000000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000013800189000002000000360000000F26546F6F6C626F782057696E646F7700000000000000000000000001000000010000000000000000000000010000000300138044C5000000000000FFFFFFFF0E5570646174652057696E646F77730000000000000000010000000000000001000000000000000000000001000000000013800000000000000400FFFFFFFF000000000000000000010000000000000001000000000000000000000001000000000013805B01000000000000FFFFFFFF12546F6F6C626F78204D656E75416E63686F72000000000000000001000000000000000100000000000000000000000100000000000000000005446562756764020000 + 00200000010000001900FFFF01001100434D4643546F6F6C426172427574746F6ECC880000000000002500000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018017800000000000002600000000000000000000000000000000010000000100000001801D800000000004002700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001801A800000000000002800000000000000000000000000000000010000000100000001801B80000000000000290000000000000000000000000000000001000000010000000180E57F0000000000002A00000000000000000000000000000000010000000100000001801C800000000000002B00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018000890000000000002C00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180E48B0000020001002D0000000000000000000000000000000001000000010000000180F07F0000020001002E0000000000000000000000000000000001000000010000000180E8880000020000003700000000000000000000000000000000010000000100000001803B010000020001002F0000000000000000000000000000000001000000010000000180BB8A00000200010030000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E0E01000002000100310000000D57617463682057696E646F7773000000000000000000000000010000000100000000000000000000000100000003001380D88B00000000000031000000085761746368202631000000000000000000000000010000000100000000000000000000000100000000001380D98B00000000000031000000085761746368202632000000000000000000000000010000000100000000000000000000000100000000001380CE01000000000000FFFFFFFF0C576174636820416E63686F720100000000000000010000000000000001000000000000000000000001000000000013800F0100000200010032000000094D656D6F7279202631000000000000000000000000010000000100000000000000000000000100000004001380D28B00000000000032000000094D656D6F7279202631000000000000000000000000010000000100000000000000000000000100000000001380D38B00000000000032000000094D656D6F7279202632000000000000000000000000010000000100000000000000000000000100000000001380D48B00000000000032000000094D656D6F7279202633000000000000000000000000010000000100000000000000000000000100000000001380D58B00000000000032000000094D656D6F72792026340000000000000000000000000100000001000000000000000000000001000000000013801001000002000000330000000855415254202326310000000000000000000000000100000001000000000000000000000001000000040013809307000000000000330000000855415254202326310000000000000000000000000100000001000000000000000000000001000000000013809407000000000000330000000855415254202326320000000000000000000000000100000001000000000000000000000001000000000013809507000000000000330000000855415254202326330000000000000000000000000100000001000000000000000000000001000000000013809607000000000000330000001626446562756720287072696E746629205669657765720000000000000000000000000100000001000000000000000000000001000000000013803C010000000000007200000010416E616C797369732057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380658A000000000000340000000F264C6F67696320416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380DC7F0000000000003E0000001526506572666F726D616E636520416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380E788000000000000380000000E26436F646520436F766572616765000000000000000000000000010000000100000000000000000000000100000000001380CD01000000000000FFFFFFFF0F416E616C7973697320416E63686F7201000000000000000100000000000000010000000000000000000000010000000000138053010000000000003F0000000D54726163652057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013805401000000000000FFFFFFFF115472616365204D656E7520416E63686F720100000000000000010000000000000001000000000000000000000001000000000013802901000000000000350000001553797374656D205669657765722057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013804B01000000000000FFFFFFFF1453797374656D2056696577657220416E63686F720100000000000000010000000000000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000013800189000002000000360000000F26546F6F6C626F782057696E646F7700000000000000000000000001000000010000000000000000000000010000000300138044C5000000000000FFFFFFFF0E5570646174652057696E646F77730100000000000000010000000000000001000000000000000000000001000000000013800000000000000400FFFFFFFF000000000000000000010000000000000001000000000000000000000001000000000013805B01000000000000FFFFFFFF12546F6F6C626F78204D656E75416E63686F72010000000000000001000000000000000100000000000000000000000100000000000000000005446562756764020000 898 @@ -3603,23 +3603,32 @@ 0 100 - 8 + 1 - ..\Core\Example\gfx_oled_example.h - 28 - 61 - 109 + ..\Core\GFX_Lib\gfx_lib.c + 8 + 429 + 870 + 1 + 77,100,179,349,367,384,419,565,607,618,645,659,668,706,741,756 + 0 + + + ..\Core\GFX_Lib\gfx_lib.h + 9 + 81 + 97 1 0 - startup_stm32f103xb.s - 36 - 121 - 134 + ..\Core\Example\gfx_oled_example.c + 17 + 158 + 216 1 - + 14 0 @@ -3631,33 +3640,6 @@ 0 - - ..\Core\Example\menu_interface.c - 5 - 14 - 3 - 1 - - 0 - - - ..\Core\Example\general_gpio.c - 0 - 7 - 18 - 1 - - 0 - - - ..\Core\OLED_Driver\oled.c - 0 - 31 - 46 - 1 - - 0 - ..\Core\OLED_Driver\oled.h 21 @@ -3668,55 +3650,19 @@ 0 - ../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_gpio.c + startup_stm32f103xb.s 0 - 428 - 438 + 121 + 132 1 0 - ..\Core\Example\gfx_oled_example.c - 25 - 144 - 215 - 1 - 13 - 0 - - - ..\Core\Example\general_gpio.h - 15 - 1 - 15 - 1 - - 0 - - - ..\Core\GFX_Lib\gfx_lib.c + ..\Core\OLED_Driver\oled.c 0 - 133 - 529 - 1 - 28,50,77,100,179,270,312,349,367,384,403,415,557,568,595,609,618,656,691,699 - 0 - - - ..\Core\GFX_Lib\gfx_lib.h - 82 - 93 - 129 - 1 - - 0 - - - C:\Keil_v5\ARM\ARMCLANG\include\stdint.h - 39 - 39 - 59 + 31 + 46 1 0 @@ -3730,6 +3676,33 @@ 0 + + ..\Core\Example\general_gpio.c + 0 + 7 + 18 + 1 + + 0 + + + ..\Core\Example\menu_interface.c + 5 + 11 + 3 + 1 + + 0 + + + C:\Keil_v5\ARM\ARMCLANG\include\math.h + 36 + 890 + 918 + 1 + + 0 + diff --git a/MDK-ARM/gfx_lcd.uvoptx b/MDK-ARM/gfx_lcd.uvoptx index 3da0373..283158a 100644 --- a/MDK-ARM/gfx_lcd.uvoptx +++ b/MDK-ARM/gfx_lcd.uvoptx @@ -148,24 +148,7 @@ -U-O142 -O2254 -SF10000 -C0 -A0 -I0 -HNlocalhost -HP7184 -P1 -N00("ARM CoreSight SW-DP (ARM Core") -D00(1BA01477) -L00(0) -TO131090 -TC10000000 -TT10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO7 -FD20000000 -FC800 -FN1 -FF0STM32F10x_128.FLM -FS08000000 -FL010000 -FP0($$Device:STM32F103C8$Flash\STM32F10x_128.FLM) -WA0 -WE0 -WVCE4 -WS2710 -WM0 -WP2 - - - 0 - 0 - 441 - 1 -
134220274
- 0 - 0 - 0 - 0 - 0 - 1 - ..\Core\GFX_Lib\gfx_lib.c - - \\gfx_lcd\../Core/GFX_Lib/gfx_lib.c\441 -
-
+ 0 @@ -237,6 +220,41 @@ 1 y,0x0A + + 14 + 1 + sine_cnt_step + + + 15 + 1 + sine2plot,0x0A + + + 16 + 1 + sine_scale + + + 17 + 1 + pix_y_float + + + 18 + 1 + ecg_scale + + + 19 + 1 + sine_cnt + + + 20 + 1 + sine_cnt_step + 0