Функции для работы с кнопками и диодами перенесены в модуль gpio_general

This commit is contained in:
Razvalyaev 2024-12-25 09:41:14 +03:00
parent 87849674ab
commit b47fe883ff
10 changed files with 286 additions and 160 deletions

View File

@ -0,0 +1,128 @@
/**
**************************************************************************
* @file general_gpio.c
* @brief Модуль для инициализации портов.
**************************************************************************
@verbatim
//-------------------Функции-------------------//
Functions: users
- GPIO_Clock_Enable Инициализация тактирования порта
@endverbatim
***************************************************************************/
#include "general_gpio.h"
//-------------------------------------------------------------------
//------------------------GPIO INIT FUNCTIONS------------------------
HAL_StatusTypeDef GPIO_Clock_Enable(GPIO_TypeDef *GPIOx)
{
HAL_StatusTypeDef status = HAL_OK;
// choose port for enable clock
if (GPIOx==GPIOA)
__HAL_RCC_GPIOA_CLK_ENABLE();
else if (GPIOx==GPIOB)
__HAL_RCC_GPIOB_CLK_ENABLE();
else if (GPIOx==GPIOC)
__HAL_RCC_GPIOC_CLK_ENABLE();
#ifdef GPIOD
else if (GPIOx==GPIOD)
__HAL_RCC_GPIOD_CLK_ENABLE();
#endif
#ifdef GPIOE
else if (GPIOx==GPIOE)
__HAL_RCC_GPIOE_CLK_ENABLE();
#endif
else
status = HAL_ERROR;
return status;
}
//------------------------GPIO INIT FUNCTIONS------------------------
//-------------------------------------------------------------------
//-------------------------------------------------------------------
//------------------------GPIO LED FUNCTIONS-------------------------
/**
* @brief Включить светодиод
*/
void GPIO_LED_On(GPIO_LEDTypeDef *led)
{
led->state = LED_IS_ON;
HAL_GPIO_WritePin(led->LED_Port, led->LED_Pin, LED_ON);
}
/**
* @brief Выключить светодиод
*/
void GPIO_LED_Off(GPIO_LEDTypeDef *led)
{
led->state = LED_IS_OFF;
HAL_GPIO_WritePin(led->LED_Port, led->LED_Pin, LED_OFF);
}
/**
* @brief Активировать моргание светодиодом
*/
void GPIO_LED_Blink_Start(GPIO_LEDTypeDef *led, uint32_t period)
{
led->state = LED_IS_BLINKING;
led->LED_Period = period;
}
/**
* @brief Моргание светодиодом
*/
void GPIO_LED_Blink_Handle(GPIO_LEDTypeDef *led)
{
if(led->state == LED_IS_BLINKING)
{
uint32_t tickcurrent = HAL_GetTick();
if((tickcurrent - led->tickprev) > led->LED_Period)
{
HAL_GPIO_TogglePin(led->LED_Port, led->LED_Pin);
led->tickprev = tickcurrent;
}
}
}
//------------------------GPIO LED FUNCTIONS-------------------------
//-------------------------------------------------------------------
//-------------------------------------------------------------------
//------------------------GPIO SW FUNCTIONS-------------------------
/**
* @brief Считать состоянии кнопки запуска
*/
uint8_t GPIO_Read_Swich(GPIO_SwitchTypeDef *sw)
{
if(HAL_GPIO_ReadPin(sw->Sw_Port, sw->Sw_Pin) == SW_ON)
{
sw->Sw_PrevState = 1;
if(sw->tickprev == 0)
sw->tickprev = HAL_GetTick();
if((HAL_GetTick() - sw->tickprev) > sw->Sw_FilterDelay)
{
if(HAL_GPIO_ReadPin(sw->Sw_Port, sw->Sw_Pin) == SW_ON)
{
return 1;
}
else
{
sw->tickprev = 0;
return 0;
}
}
}
else
{
sw->Sw_PrevState = 0;
}
return 0;
}
//------------------------GPIO SW FUNCTIONS-------------------------
//-------------------------------------------------------------------

View File

@ -0,0 +1,72 @@
/**
**************************************************************************
* @file general_gpio.h
* @brief Заголовочный файл для модуля инициализации портов.
*************************************************************************/
#ifndef __GPIO_GENERAL_H_
#define __GPIO_GENERAL_H_
#include "mylibs_defs.h"
#define SPI_Alternate_Mapping(INSTANCE) ((((INSTANCE) == TIM1) || ((INSTANCE) == TIM2))? GPIO_AF1_TIM1: \
(((INSTANCE) == TIM3) || ((INSTANCE) == TIM4) || ((INSTANCE) == TIM5))? GPIO_AF2_TIM3: \
(((INSTANCE) == TIM8) || ((INSTANCE) == TIM9) || ((INSTANCE) == TIM10) || ((INSTANCE) == TIM11))? GPIO_AF3_TIM8: \
(((INSTANCE) == TIM12) || ((INSTANCE) == TIM13) || ((INSTANCE) == TIM14))? GPIO_AF9_TIM12: \
(0))
#define TIM_Alternate_Mapping(INSTANCE) ((((INSTANCE) == TIM1) || ((INSTANCE) == TIM2))? GPIO_AF1_TIM1: \
(((INSTANCE) == TIM3) || ((INSTANCE) == TIM4) || ((INSTANCE) == TIM5))? GPIO_AF2_TIM3: \
(((INSTANCE) == TIM8) || ((INSTANCE) == TIM9) || ((INSTANCE) == TIM10) || ((INSTANCE) == TIM11))? GPIO_AF3_TIM8: \
(((INSTANCE) == TIM12) || ((INSTANCE) == TIM13) || ((INSTANCE) == TIM14))? GPIO_AF9_TIM12: \
(0))
typedef enum
{
LED_IS_OFF = 0,
LED_IS_ON = 1,
LED_IS_BLINKING = 2,
LED_IS_FADING = 3,
}GPIO_LEDStateTypeDef;
typedef struct
{
GPIO_LEDStateTypeDef state;
GPIO_TypeDef *LED_Port;
uint32_t LED_Pin;
uint32_t LED_Period;
uint32_t tickprev;
}GPIO_LEDTypeDef;
typedef struct
{
GPIO_TypeDef *Sw_Port;
uint32_t Sw_Pin;
uint32_t Sw_PrevState;
uint32_t Sw_FilterDelay;
uint32_t tickprev;
}GPIO_SwitchTypeDef;
/////////////////////////////////////////////////////////////////////
///////////////////////////---FUNCTIONS---///////////////////////////
HAL_StatusTypeDef GPIO_Clock_Enable(GPIO_TypeDef *GPIOx);
/* Считать состоянии кнопки запуска */
uint8_t GPIO_Read_Swich(GPIO_SwitchTypeDef *swstart);
/* Включить светодиод */
void GPIO_LED_On(GPIO_LEDTypeDef *led);
/* Выключить светодиод */
void GPIO_LED_Off(GPIO_LEDTypeDef *led);
/* Активировать моргание светодиодом */
void GPIO_LED_Blink_Start(GPIO_LEDTypeDef *led, uint32_t period);
/* Моргание светодиодом */
void GPIO_LED_Blink_Handle(GPIO_LEDTypeDef *led);
///////////////////////////---FUNCTIONS---///////////////////////////
#endif // __GPIO_GENERAL_H_

View File

@ -64,6 +64,7 @@
#include "main.h"
#include "modbus_data.h"
#include "general_gpio.h"
/** @brief Struct for trackers for Measure */
/** @brief Struct for trackers for RS */

View File

@ -4,108 +4,37 @@
/**
* @brief Инициализация структур интерфейса
*/
void TESTER_InterfaceInit(TESTER_SwitchStartTypeDef *swstart, TESTER_LEDsTypeDef *leds)
void TESTER_InterfaceInit(GPIO_SwitchTypeDef *swstart, TESTER_LEDsTypeDef *leds)
{
}
/**
* @brief Включить индикацию таймаута старта при активации теста
*/
void TESTER_LED_TimeoutForStartTest(TESTER_LEDTypeDef *led)
void TESTER_LED_TimeoutForStartTest(GPIO_LEDTypeDef *led)
{
TESTER_LED_Off(led);
GPIO_LED_Off(led);
}
/**
* @brief Включить индикацию прямого подключения диода
*/
void TESTER_LED_TestingDiodeForward(TESTER_LEDTypeDef *led)
void TESTER_LED_TestingDiodeForward(GPIO_LEDTypeDef *led)
{
led->state = LED_IS_BLINKING;
led->period = LED_FORWARD_DIODE_PERIOD;
GPIO_LED_Blink_Start(led, LED_FORWARD_DIODE_PERIOD);
}
/**
* @brief Включить индикацию обратного подключения диода
*/
void TESTER_LED_TestingDiodeReverse(TESTER_LEDTypeDef *led)
void TESTER_LED_TestingDiodeReverse(GPIO_LEDTypeDef *led)
{
led->state = LED_IS_BLINKING;
led->period = LED_REVERSE_DIODE_PERIOD;
GPIO_LED_Blink_Start(led, LED_REVERSE_DIODE_PERIOD);
}
/**
* @brief Выключить индикацию ожидания комманды
* @details Сделано через моргание, чтобы понимать, что системные тики работают
*/
void TESTER_LED_WaitForAction(TESTER_LEDTypeDef *led)
void TESTER_LED_WaitForAction(GPIO_LEDTypeDef *led)
{
led->state = LED_IS_BLINKING;
led->period = LED_BLINK_AS_ON;
}
/**
* @brief Считать состоянии кнопки запуска
*/
uint8_t TESTER_ReadSwichStart(TESTER_SwitchStartTypeDef *swstart)
{
if(HAL_GPIO_ReadPin(swstart->Sw_Port, swstart->Sw_Pin) == SW_ON)
{
if(swstart->tickprev == 0)
swstart->tickprev = HAL_GetTick();
if((HAL_GetTick() - swstart->tickprev) > swstart->Sw_FilterDelay)
{
if(HAL_GPIO_ReadPin(swstart->Sw_Port, swstart->Sw_Pin) == SW_ON)
{
return 1;
}
else
{
swstart->tickprev = 0;
return 0;
}
}
}
return 0;
}
/**
* @brief Включить светодиод
*/
void TESTER_LED_On(TESTER_LEDTypeDef *led)
{
led->state = LED_IS_ON;
HAL_GPIO_WritePin(led->LED_Port, led->LED_Pin, LED_ON);
}
/**
* @brief Выключить светодиод
*/
void TESTER_LED_Off(TESTER_LEDTypeDef *led)
{
led->state = LED_IS_OFF;
HAL_GPIO_WritePin(led->LED_Port, led->LED_Pin, LED_OFF);
}
/**
* @brief Активировать моргание светодиодом
*/
void TESTER_LED_Blink_Start(TESTER_LEDTypeDef *led)
{
led->state = LED_IS_BLINKING;
}
/**
* @brief Моргание светодиодом
*/
void TESTER_LEDBlink_Handle(TESTER_LEDTypeDef *led)
{
if(led->state == LED_IS_BLINKING)
{
uint32_t tickcurrent = HAL_GetTick();
if((tickcurrent - led->tickprev) > led->period)
{
HAL_GPIO_TogglePin(led->LED_Port, led->LED_Pin);
led->tickprev = tickcurrent;
}
}
GPIO_LED_Blink_Start(led, LED_BLINK_AS_ON);
}

View File

@ -14,64 +14,26 @@
#include "mylibs_include.h"
#include "rs_message.h"
typedef enum
{
LED_IS_OFF = 0,
LED_IS_ON = 1,
LED_IS_BLINKING = 2,
}TESTER_LEDStateTypeDef;
typedef struct
{
TESTER_LEDStateTypeDef state;
GPIO_TypeDef *LED_Port;
uint32_t LED_Pin;
uint32_t tickprev;
uint32_t period;
}TESTER_LEDTypeDef;
typedef struct
{
TESTER_LEDTypeDef LED1;
GPIO_LEDTypeDef LED1;
}TESTER_LEDsTypeDef;
typedef struct
{
GPIO_TypeDef *Sw_Port;
uint32_t Sw_Pin;
uint32_t Sw_PrevState;
uint32_t Sw_FilterDelay;
uint32_t tickprev;
}TESTER_SwitchStartTypeDef;
/* Инициализация структур интерфейса */
void TESTER_InterfaceInit(TESTER_SwitchStartTypeDef *swstart, TESTER_LEDsTypeDef *leds);
void TESTER_InterfaceInit(GPIO_SwitchTypeDef *swstart, TESTER_LEDsTypeDef *leds);
/* Включить индикацию таймаута старта при активации теста */
void TESTER_LED_TimeoutForStartTest(TESTER_LEDTypeDef *led);
void TESTER_LED_TimeoutForStartTest(GPIO_LEDTypeDef *led);
/* Включить индикацию прямого подключения диода */
void TESTER_LED_TestingDiodeForward(TESTER_LEDTypeDef *led);
void TESTER_LED_TestingDiodeForward(GPIO_LEDTypeDef *led);
/* Включить индикацию обратного подключения диода */
void TESTER_LED_TestingDiodeReverse(TESTER_LEDTypeDef *led);
void TESTER_LED_TestingDiodeReverse(GPIO_LEDTypeDef *led);
/* Выключить индикацию активного теста диодов */
void TESTER_LED_WaitForAction(TESTER_LEDTypeDef *led);
void TESTER_LED_WaitForAction(GPIO_LEDTypeDef *led);
/* Считать состоянии кнопки запуска */
uint8_t TESTER_ReadSwichStart(TESTER_SwitchStartTypeDef *swstart);
/* Включить светодиод */
void TESTER_LED_On(TESTER_LEDTypeDef *led);
/* Выключить светодиод */
void TESTER_LED_Off(TESTER_LEDTypeDef *led);
/* Активировать моргание светодиодом */
void TESTER_LED_Blink_Start(TESTER_LEDTypeDef *led);
/* Моргание светодиодом */
void TESTER_LEDBlink_Handle(TESTER_LEDTypeDef *led);
#endif //_TESTER_INTERFACE_FUNC_H_

View File

@ -10,7 +10,7 @@ TESTER_ProjectTypeDef TESTER = {0};
void TESTER_Init(TESTER_ProjectTypeDef *tester)
{
TESTER_InterfaceInit(&tester->SwStart, &tester->leds);
tester->leds.LED1.period = 100;
GPIO_LED_Blink_Start(&tester->leds.LED1, 100);
tester->delay = 250;
tester->delay_en = 0;
@ -34,9 +34,11 @@ void TESTER_pre_while(TESTER_ProjectTypeDef *tester)
TESTER_UpdateSettings(tester->htest, tester->mbdata);
RS_Receive_IT(tester->hmodbus, &MODBUS_MSG);
tester->leds.LED1.period = LED_BLINK_AS_ON;
tester->f.flag_init_done = 1;
HAL_TIM_Base_Start(&hmcstim);
tester->f.flag_init_done = 1;
GPIO_LED_Blink_Start(&tester->leds.LED1, LED_BLINK_AS_ON);
}
@ -123,7 +125,7 @@ void TESTER_InterfaceHandle(TESTER_ProjectTypeDef *tester)
tester->mode = *((TESTER_TestModeTypeDef *)&tester->mbdata->Coils) & 0x3;
/* если кнопка нажата или пришла соответствующая комманда модбас */
if(TESTER_ReadSwichStart(&tester->SwStart) || tester->mbdata->Coils.StartTest)
if(GPIO_Read_Swich(&tester->SwStart) || tester->mbdata->Coils.StartTest)
{
tester->mbdata->Coils.StartTest = 0;
/* Обновление настроек тестера */
@ -148,7 +150,7 @@ void TESTER_InterfaceHandle(TESTER_ProjectTypeDef *tester)
}
TESTER_LEDBlink_Handle(&tester->leds.LED1);
GPIO_LED_Blink_Handle(&tester->leds.LED1);
}
@ -200,8 +202,6 @@ void TESTER_Set_Default_Settings(TESTER_ProjectTypeDef *tester)
/* Настройка пинов для светодиода*/
tester->leds.LED1.LED_Port = LED1_Port;
tester->leds.LED1.LED_Pin = LED1_Pin;
tester->leds.LED1.period = LED_BLINK_AS_ON;
/* Настройка таймингов по умолчанию для тестирования */
tester->mbdata->HoldRegs.TimeForForward = DEF_MS_TIME_FOR_POSITIVE;

View File

@ -59,7 +59,7 @@ typedef struct
MB_DataStructureTypeDef *mbdata;
TESTER_SwitchStartTypeDef SwStart; ///< структура кнопки старта
GPIO_SwitchTypeDef SwStart; ///< структура кнопки старта
TESTER_LEDsTypeDef leds; ///< структура светодиодов

View File

@ -576,7 +576,7 @@
<Group>
<GroupName>MyLibs</GroupName>
<tvExp>0</tvExp>
<tvExp>1</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<cbSel>0</cbSel>
<RteFlg>0</RteFlg>
@ -628,6 +628,30 @@
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>4</GroupNumber>
<FileNumber>24</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\Core\MyLibs\general_gpio.c</PathWithFileName>
<FilenameWithoutPath>general_gpio.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>4</GroupNumber>
<FileNumber>25</FileNumber>
<FileType>5</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\Core\MyLibs\general_gpio.h</PathWithFileName>
<FilenameWithoutPath>general_gpio.h</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
</Group>
<Group>
@ -638,7 +662,7 @@
<RteFlg>0</RteFlg>
<File>
<GroupNumber>5</GroupNumber>
<FileNumber>24</FileNumber>
<FileNumber>26</FileNumber>
<FileType>2</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -658,7 +682,7 @@
<RteFlg>0</RteFlg>
<File>
<GroupNumber>6</GroupNumber>
<FileNumber>25</FileNumber>
<FileNumber>27</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -670,7 +694,7 @@
</File>
<File>
<GroupNumber>6</GroupNumber>
<FileNumber>26</FileNumber>
<FileNumber>28</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -682,7 +706,7 @@
</File>
<File>
<GroupNumber>6</GroupNumber>
<FileNumber>27</FileNumber>
<FileNumber>29</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -694,7 +718,7 @@
</File>
<File>
<GroupNumber>6</GroupNumber>
<FileNumber>28</FileNumber>
<FileNumber>30</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -706,7 +730,7 @@
</File>
<File>
<GroupNumber>6</GroupNumber>
<FileNumber>29</FileNumber>
<FileNumber>31</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -718,7 +742,7 @@
</File>
<File>
<GroupNumber>6</GroupNumber>
<FileNumber>30</FileNumber>
<FileNumber>32</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -730,7 +754,7 @@
</File>
<File>
<GroupNumber>6</GroupNumber>
<FileNumber>31</FileNumber>
<FileNumber>33</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -742,7 +766,7 @@
</File>
<File>
<GroupNumber>6</GroupNumber>
<FileNumber>32</FileNumber>
<FileNumber>34</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -762,7 +786,7 @@
<RteFlg>0</RteFlg>
<File>
<GroupNumber>7</GroupNumber>
<FileNumber>33</FileNumber>
<FileNumber>35</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -774,7 +798,7 @@
</File>
<File>
<GroupNumber>7</GroupNumber>
<FileNumber>34</FileNumber>
<FileNumber>36</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -786,7 +810,7 @@
</File>
<File>
<GroupNumber>7</GroupNumber>
<FileNumber>35</FileNumber>
<FileNumber>37</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -798,7 +822,7 @@
</File>
<File>
<GroupNumber>7</GroupNumber>
<FileNumber>36</FileNumber>
<FileNumber>38</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -810,7 +834,7 @@
</File>
<File>
<GroupNumber>7</GroupNumber>
<FileNumber>37</FileNumber>
<FileNumber>39</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -822,7 +846,7 @@
</File>
<File>
<GroupNumber>7</GroupNumber>
<FileNumber>38</FileNumber>
<FileNumber>40</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -834,7 +858,7 @@
</File>
<File>
<GroupNumber>7</GroupNumber>
<FileNumber>39</FileNumber>
<FileNumber>41</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -846,7 +870,7 @@
</File>
<File>
<GroupNumber>7</GroupNumber>
<FileNumber>40</FileNumber>
<FileNumber>42</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -858,7 +882,7 @@
</File>
<File>
<GroupNumber>7</GroupNumber>
<FileNumber>41</FileNumber>
<FileNumber>43</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -870,7 +894,7 @@
</File>
<File>
<GroupNumber>7</GroupNumber>
<FileNumber>42</FileNumber>
<FileNumber>44</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -882,7 +906,7 @@
</File>
<File>
<GroupNumber>7</GroupNumber>
<FileNumber>43</FileNumber>
<FileNumber>45</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -894,7 +918,7 @@
</File>
<File>
<GroupNumber>7</GroupNumber>
<FileNumber>44</FileNumber>
<FileNumber>46</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -906,7 +930,7 @@
</File>
<File>
<GroupNumber>7</GroupNumber>
<FileNumber>45</FileNumber>
<FileNumber>47</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -918,7 +942,7 @@
</File>
<File>
<GroupNumber>7</GroupNumber>
<FileNumber>46</FileNumber>
<FileNumber>48</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -930,7 +954,7 @@
</File>
<File>
<GroupNumber>7</GroupNumber>
<FileNumber>47</FileNumber>
<FileNumber>49</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -942,7 +966,7 @@
</File>
<File>
<GroupNumber>7</GroupNumber>
<FileNumber>48</FileNumber>
<FileNumber>50</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -962,7 +986,7 @@
<RteFlg>0</RteFlg>
<File>
<GroupNumber>8</GroupNumber>
<FileNumber>49</FileNumber>
<FileNumber>51</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>

View File

@ -515,6 +515,16 @@
<FileType>5</FileType>
<FilePath>..\Core\MyLibs\trackers.h</FilePath>
</File>
<File>
<FileName>general_gpio.c</FileName>
<FileType>1</FileType>
<FilePath>..\Core\MyLibs\general_gpio.c</FilePath>
</File>
<File>
<FileName>general_gpio.h</FileName>
<FileType>5</FileType>
<FilePath>..\Core\MyLibs\general_gpio.h</FilePath>
</File>
</Files>
</Group>
<Group>

Binary file not shown.