diff --git a/Core/Inc/protocan.h b/Core/Inc/protocan.h
index c83157a..01aa8fc 100644
--- a/Core/Inc/protocan.h
+++ b/Core/Inc/protocan.h
@@ -8,270 +8,245 @@
#define ONLINE 1;
#define OFFLINE 0;
-// TIM defines
-#define TIM_PROTOCAN_Prescaler 64000
-
-//CAN Speed
-#define CAN_SPEED_PRSC_1000KB 2
-#define CAN_SPEED_PRSC_500KB 4
-#define CAN_SPEED_PRSC_250KB 8
-#define CAN_SPEED_PRSC_125KB 16
-#define CAN_SPEED_PRSC_50KB 40
-#define CAN_CURRENT_SPEED CAN_SPEED_PRSC_250KB
-
-//CAN Filter
#define ID_MAIN_DEVICE 0x000
-
#define CURRENT_TYPE_DEVICE 0b001
#define CURRENT_ID_DEVICE 0b0010
-#define CAN_IDE_32 0b00000100 // Для 32-х битного масштаба
-
-#define CAN_DATA_TYPE_FILTER 0x1F000000
-#define CAN_DEVICE_ID_FILTER 0x000000FF
-#define CAN_SENSOR_TYPE_FILTER 0x00F80000
-#define CAN_SENSOR_ID_FILTER 0x0007FF00
-
-typedef union{
- struct bitfield{
- unsigned bit0:1;
- unsigned bit1:1;
- unsigned bit2:1;
- unsigned bit3:1;
- unsigned bit4:1;
- unsigned bit5:1;
- unsigned bit6:1;
- unsigned bit7:1;
- }Bitfield;
- char AllBit;
-}Byte;
-
-_Bool IsLeapYear(uint8_t year);
-
-#define COUNT_OF_MODBUS_SECTIONS 1
-#define MODBUS_SECTION_MASK 0
-#define MODBUS_SECTION_FILTER 1
+#define PROTOCAN_RX_BUFFER_SIZE 128
#define SensorToModbusRegister(SensorType, SensorID) SensorType << 11 | SensorID
#define HighByteOfWord(WORD) (WORD>>8)&0xFF
#define LowByteOfWord(WORD) WORD&0xFF
-//Priority level
-#define PRIORITY_CRITICAL 0
-#define PRIORITY_STANDARD 1
+/**
+ * @brief Статус инициализации протокола CAN.
+ *
+ * Это перечисление описывает возможные статусы после попытки инициализации.
+ */
+typedef enum
+{
+ PROTOCAN_INIT_OK = 0x00U, /**< Инициализация прошла успешно. */
+ PROTOCAN_INIT_HCAN_ERROR = 0x01U, /**< Ошибка при инициализации модуля CAN. */
+ PROTOCAN_INIT_HRTC_ERROR = 0x02U, /**< Ошибка при инициализации модуля RTC. */
+ PROTOCAN_INIT_TIM_ERROR = 0x04U /**< Ошибка при инициализации таймера. */
+} PROTOCAN_INIT_StatusTypeDef;
-//Route mode
-#define ROUTE_MASTER 1
-#define ROUTE_SLAVE 0
+/**
+ * @brief Статус выполнения операции протокола CAN.
+ *
+ * Это перечисление описывает возможные результаты выполнения функций протокола.
+ */
+typedef enum
+{
+ PROTOCAN_OK = 0x00U, /**< Операция прошла успешно. */
+ PROTOCAN_ERROR = 0x01U, /**< Обнаружена ошибка во время выполнения. */
+ PROTOCAN_BUSY = 0x02U, /**< Канал занят, выполнение невозможно в данный момент. */
+ PROTOCAN_TIMEOUT = 0x03U /**< Истек таймаут ожидания. */
+} PROTOCAN_StatusTypeDef;
-//Data Types
-#define DATA_TYPE_BROADCAST 0b0000
-#define DATA_TYPE_DISCRETE 0b0001
-#define DATA_TYPE_ANALOG 0b0010
-#define DATA_TYPE_GENERAL_ADDRESS_SPACE 0b0011
-#define DATA_TYPE_MODBUS_COIL 0b0100
-#define DATA_TYPE_MODBUS_DISCRETE 0b0101
-#define DATA_TYPE_MODBUS_HOLDING 0b0110
-#define DATA_TYPE_MODBUS_INPUT 0b0111
-#define DATA_TYPE_ERROR 0b1000
-#define DATA_TYPE_PULSE 0b1111
+/**
+ * @brief Уровень приоритета CAN-сообщения.
+ *
+ * Это перечисление определяет важность и приоритет обработки сообщения.
+ */
+typedef enum {
+ PROTOCAN_PRIORITY_CRITICAL = 0, /**< Критический приоритет, рекомендуется обработка без задержек. */
+ PROTOCAN_PRIORITY_STANDARD = 1 /**< Стандартный приоритет, менее важный. */
+} ProtoCanPriorityType;
-//Sensor Types for DATA_TYPE_BROADCAST
-#define SENSOR_TYPE_BROADCAST_STATUS 0b000000000000
-#define SENSOR_TYPE_BROADCAST_ONOFF 0b000000000001
-#define SENSOR_TYPE_BROADCAST_RESTARTDEVICE 0b000000000010
-#define SENSOR_TYPE_BROADCAST_RTCSETUP 0b000000000011
+/**
+ * @brief Маршрут CAN-сообщения.
+ *
+ * Это перечисление задает направление маршрута отправки сообщения.
+ */
+typedef enum {
+ PROTOCAN_ROUTE_FROM_PM = 0, /**< Сообщение отправляется от управляющего модуля (PM). */
+ PROTOCAN_ROUTE_FROM_DEVICE = 1 /**< Сообщение отправляется от устройства (Device). */
+} ProtoCanRouteType;
-//Sensor Types for DATA_TYPE_DISCRETE
-#define SENSOR_TYPE_DISCRETE_ACCIDENT 0b0000
-#define SENSOR_TYPE_DISCRETE_WARNING 0b0001
-#define SENSOR_TYPE_DISCRETE_CONTROL_SIGNALS 0b0010
-#define SENSOR_TYPE_DISCRETE_FLAGS 0b0011
-#define SENSOR_TYPE_DISCRETE_RESET 0b0100
-#define SENSOR_TYPE_DISCRETE_CHANGE_MODE 0b0101
-#define SENSOR_TYPE_DISCRETE_REQUEST_LIST_OF_PARAMETERS 0b0110
+/**
+ * @brief Типы сообщений CAN.
+ *
+ * Перечисление определяет различные типы сообщений, используемые в протоколе.
+ */
+typedef enum {
+ PROTOCAN_MSGTYPE_BROADCAST = 0b0000, /**< Широковещательное сообщение. */
+ PROTOCAN_MSGTYPE_DISCRETE = 0b0001, /**< Дискретное цифровое сообщение. */
+ PROTOCAN_MSGTYPE_ANALOG = 0b0010, /**< Аналоговое сообщение. */
+ PROTOCAN_MSGTYPE_GENERAL_ADDRESS_SPACE = 0b0011, /**< Сообщение общего адресного пространства. */
+ PROTOCAN_MSGTYPE_MODBUS_COIL = 0b0100, /**< Сообщение Modbus - Coil. */
+ PROTOCAN_MSGTYPE_MODBUS_DISCRETE = 0b0101, /**< Сообщение Modbus - Discrete. */
+ PROTOCAN_MSGTYPE_MODBUS_HOLDING = 0b0110, /**< Сообщение Modbus - Holding. */
+ PROTOCAN_MSGTYPE_MODBUS_INPUT = 0b0111, /**< Сообщение Modbus - Input. */
+ PROTOCAN_MSGTYPE_ERROR = 0b1000, /**< Сообщение об ошибке. */
+ PROTOCAN_MSGTYPE_PULSE = 0b1111, /**< Импульсное сообщение. */
+}ProtoCanMsgType;
-//Sensor Types for DATA_TYPE_ANALOG
-#define SENSOR_TYPE_ANALOG_UNIVERSAL 0b0000
-#define SENSOR_TYPE_ANALOG_USTAVKI 0b0001
-#define SENSOR_TYPE_ANALOG_U 0b0010
-#define SENSOR_TYPE_ANALOG_I 0b0011
-#define SENSOR_TYPE_ANALOG_T 0b0100
+/**
+ * @brief Типы широковещательных сообщений CAN.
+ *
+ * Перечисление задает различные типы широковещательных команд, используемых в протоколе.
+ */
+typedef enum {
+ PROTOCAN_BROADCAST_STATUS = 0b000000000000, /**< Статус устройства. */
+ PROTOCAN_BROADCAST_ONOFF = 0b000000000001, /**< Включение/выключение устройства. */
+ PROTOCAN_BROADCAST_RESTARTDEVICE = 0b000000000010, /**< Перезагрузка устройства. */
+ PROTOCAN_BROADCAST_RTCSETUP = 0b000000000011, /**< Настройка RTC (часы реального времени). */
+ PROTOCAN_BROADCAST_END = 0b111111111111 /**< Конец диапазона широковещательных сообщений. */
+}ProtoCanBroadcastType;
-//Error Code
-#define NONEXISTENT_ELEMENT 0x01
+/**
+ * @brief Структура и представление широковещательного сообщения CAN.
+ *
+ * Объединение позволяет обращаться к данным сообщения либо как к отдельным полям, либо как к целому 16-битному значению.
+ */
+typedef union{
+ struct msgBody_Broadcast{
+ unsigned Body:4; /**< Поле для дополнительных данных или кода задачи (4 бита). */
+ ProtoCanBroadcastType Type:12; /**< Тип широковещательного сообщения (12 бит). */
+ } Fields; /**< Структура с разбивкой по полям. */
+ unsigned Body; /**< Общее 16-битное представление сообщения. */
+} msgBodyBroadcastType;
-#define HighIdFilter(x) x<<24
+/**
+ * @brief Типы дискретных сообщений CAN.
+ *
+ * Перечисление задает различные виды дискретных команд или событий.
+ */
+typedef enum {
+ PROTOCAN_DISCRETE_ACCIDENT = 0b0000, /**< Аварийное состояние. */
+ PROTOCAN_DISCRETE_WARNING = 0b0001, /**< Предупредительный сигнал. */
+ PROTOCAN_DISCRETE_CONTROL_SIGNALS = 0b0010, /**< Управляющие сигналы. */
+ PROTOCAN_DISCRETE_FLAGS = 0b0011, /**< Флаги состояния. */
+ PROTOCAN_DISCRETE_RESET = 0b0100, /**< Сброс устройства. */
+ PROTOCAN_DISCRETE_CHANGE_MODE = 0b0101, /**< Смена режима работы. */
+ PROTOCAN_DISCRETE_REQUEST_LIST_OF_PARAMETERS = 0b0110, /**< Запрос списка параметров. */
+ PROTOCAN_DISCRETE_END = 0b1111 /**< Конец диапазона дискретных сообщений. */
+}ProtoCanDiscreteType;
+
+/**
+ * @brief Структура и представление дискретного сообщения CAN.
+ *
+ * Объединение позволяет обращаться к данным сообщения как к отдельным полям или как к целому 16-битному значению.
+ */
+typedef union{
+ struct msgBody_Discrete{
+ unsigned Body:12; /**< Поле данных или кода (12 бит). */
+ ProtoCanDiscreteType Type:4; /**< Тип дискретного сообщения (4 бита). */
+ } Fields; /**< Структура с разбивкой по полям. */
+ unsigned Body; /**< Общее 16-битное представление сообщения. */
+} msgBodyDiscreteType;
+
+/**
+ * @brief Типы аналоговых сообщений CAN.
+ *
+ * Перечисление определяет различные типы аналоговых данных или команд.
+ */
+typedef enum {
+ PROTOCAN_ANALOG_UNIVERSAL = 0b0000, /**< Универсальный тип. */
+ PROTOCAN_ANALOG_SETTINGS = 0b0001, /**< Настройки. */
+ PROTOCAN_ANALOG_U = 0b0010, /**< Напряжение (U). */
+ PROTOCAN_ANALOG_I = 0b0011, /**< Ток (I). */
+ PROTOCAN_ANALOG_T = 0b0100, /**< Температура (T). */
+ PROTOCAN_ANALOG_END = 0b1111 /**< Конец диапазона типов. */
+}ProtoCanAnalogType;
+
+/**
+ * @brief Структура и представление аналогового сообщения CAN.
+ *
+ * Объединение позволяет обращаться к данным сообщения как к отдельным полям или как к целому 16-битному значению.
+ */
+typedef union{
+ struct msgBody_Analog{
+ unsigned SensorID:12; /**< Идентификатор датчика (12 бит). */
+ ProtoCanAnalogType Type:4; /**< Тип аналоговых данных (4 бита). */
+ } Fields; /**< Структура с разбивкой по полям. */
+ unsigned Body; /**< Общее 16-битное представление сообщения. */
+}msgBodyAnalogType;
+
+/**
+ * @brief Структура и представление сообщения Modbus CAN.
+ *
+ * Объединение позволяет обращаться к данным как к отдельным полям или как к целому 16-битному значению.
+ */
+typedef union{
+ struct msgBody_Modbus{
+ unsigned RegCount:4; /**< Количество регистров (4 бита). */
+ unsigned StrAdr:12; /**< Адрес строки или регистра (12 бит). */
+ } Fields; /**< Поля структуры сообщения Modbus. */
+ unsigned Body; /**< Общее 16-битное представление сообщения. */
+} msgBodyModbusType;
+
+/**
+ * @brief Структура и представление сообщения об ошибке CAN.
+ *
+ * Объединение позволяет обращаться к данным как к отдельным полям или как к целому 16-битному значению.
+ */
+typedef union{
+ struct msgBody_Error{
+ unsigned ErrorCode:8; /**< Код ошибки (8 бит). */
+ unsigned Info:8; /**< Дополнительная информация (8 бит). */
+ } Fields; /**< Поля ошибки. */
+ unsigned Body; /**< Общее 16-битное представление сообщения об ошибке. */
+} msgBodyErrorType;
struct controlflags{
unsigned IsPulse:1;
unsigned IsRtrMode:1;
};
-//Device settings
+/**
+ * @brief Поля идентификатора протокола CAN.
+ *
+ * Объединение позволяет обращаться к различным полям идентификатора, а также как к 29-битному целому числу.
+ */
typedef union{
- struct msgBody_Broadcast{
- unsigned Page:4;
- unsigned BroadcastType:12;
- }Fields;
- unsigned Body:16;
-}msgBroadcastType;
+ struct protoCanIdFields{
+ unsigned MsgBody:16; /**< Поле сообщения (16 бит). */
+ ProtoCanMsgType MsgType:4; /**< Тип сообщения (4 бита). */
+ unsigned DeviceID:4; /**< Идентификатор устройства (4 бита). */
+ unsigned DeviceType:3; /**< Тип устройства (3 бита). */
+ ProtoCanRouteType Route:1; /**< Маршрут (1 бит). */
+ ProtoCanPriorityType Priority:1; /**< Приоритет (1 бит). */
+ } Fields; /**< Структура с разбивкой по полям. */
+ unsigned int BitAll:29; /**< Общее представление 29-битного идентификатора. */
+} ProtoCanId_t;
-typedef union{
- struct msgBody_Discrete{
- unsigned Body:12;
- unsigned Type:4;
- }Fields;
- unsigned Body:16;
-}msgDiscreteType;
+/**
+ * @brief Структура для общего адресного пространства CAN.
+ *
+ * Используется для хранения данных о регистре и его содержимом.
+ */
+typedef struct{
+ struct ProtoCanGeneralAddressSpaceData{
+ uint16_t RegStartAdr; /**< Начальный адрес регистров. */
+ uint16_t *Data; /**< Указатель на массив данных. */
+ unsigned RegCount; /**< Количество регистров. */
+ } GeneralAddressSpaceData;
+} ProtoCanData_t;
-typedef union{
- struct msgBody_Analog{
- unsigned SensorID:12;
- unsigned SensorType:4;
- }Fields;
- unsigned Body:16;
-}msgAnalogType;
-
-typedef union{
- struct msgBody_Modbus{
- unsigned RegCount:4;
- unsigned StrAdr:12;
- }Fields;
- unsigned Body:16;
-}msgModbusType;
-
-typedef union{
- struct msgBody_Error{
- unsigned ErrorCode:8;
- unsigned Info:8;
- }Fields;
- unsigned Body:16;
-}msgErrorType;
-
-typedef union{
- struct extID_Fields{
- unsigned MsgBody:16;
- unsigned MsgType:4;
- unsigned DeviceID:4;
- unsigned DeviceType:3;
- unsigned Route:1;
- unsigned Priority:1;
- }Fields;
- unsigned int BitAll:29;
-}extID;
-
-struct device{
- unsigned Status:1;
- extID ExtID;
- unsigned TimeFromLastPulse;
- unsigned LastPulseStep;
-};
-
-struct data{
- struct T_sens{
- char info[256];
- unsigned SensID;
- unsigned AvrgValue;
- unsigned LastTenValues[10];
- }TS;
-
- struct U_sens{
- char info[256];
- unsigned SensID;
- unsigned AvrgValue;
- unsigned LastTenValues[10];
- }Uu, Uv, Uw;
-
- struct I_sens{
- char info[256];
- unsigned SensID;
- unsigned AvrgValue;
- unsigned LastTenValues[10];
- }Iu, Iv, Iw;
-};
-
-struct received_request{
- extID RequestedExtID;
- unsigned RequestedDLC;
- uint8_t RxData[8];
-
- //DATA_TYPE_DISCRETIC
- union discreticflags{
- struct discretictype{
- unsigned Request_Accident:1;
- unsigned Request_Warning:1;
- unsigned Request_Control_Signals:1;
- unsigned Request_Flags:1;
- unsigned Request_Reset:1;
- unsigned Request_List_of_Parameters:1;
- }DiscreticType;
- unsigned AllFlags:5;
- }DiscreticFlags;
-
- //DATA_TYPE_BROADCAST
- union broadcastflags{
- struct broadcasttype{
- unsigned Request_Status:1;
- unsigned Request_OnOff:1;
- unsigned Request_RTC_Setup:1;
- }BroadcastType;
- unsigned AllFlags:3;
- }BroadcastFlags;
-
- //DATA_TYPE_ANALOG
- union analogflags{
- struct analogtype{
- unsigned Request_Universal_Sens:1;
- unsigned Request_U_Sens:1;
- unsigned Request_I_Sens:1;
- unsigned Request_T_Sens:1;
- }AnalogType;
- unsigned AllFlags:4;
- }AnalogFlags;
-
- //DATA_TYPE_MODBUS
- union modbusflags{
- struct modbustype{
- unsigned Coil:1;
- unsigned Discrete:1;
- unsigned Holding:1;
- unsigned Input:1;
- }ModbusType;
- unsigned AllFlags:4;
- }ModbusFlags;
-
- union sensor_To_Modbus{
- struct modbus{
- unsigned Count:8;
- unsigned StrAdr:8;
- }Modbus;
- unsigned Sensor:16;
- }SensorToModbus;
-
- unsigned ModbusFlag:1;
-};
-
-#define CAN_RX_BUFFER_SIZE 128
+/**
+ * @brief Структура данных устройства CAN.
+ *
+ * Включает статус, идентификатор, таймер последнего импульса и шаг последнего импульса.
+ */
+typedef struct{
+ unsigned Status:1; /**< Статус устройства (флаг). */
+ ProtoCanId_t Id; /**< Идентификатор CAN. */
+ unsigned TimeFromLastPulse; /**< Время с последнего импульса (мс). */
+ unsigned LastPulseStep; /**< Шаг последнего импульса. */
+} ProtoCanDevice_t;
struct RXMsg{
struct INFO{
unsigned EXT:1;
unsigned RTR:1;
}info;
- extID eID;
+ ProtoCanId_t eID;
uint16_t DLC;
uint8_t Data[8];
};
-typedef enum
-{
- PROTOCAN_OK = 0x00U,
- PROTOCAN_HCAN_ERROR = 0x01U,
- PROTOCAN_HRTC_ERROR = 0x02U,
- PROTOCAN_TIM_ERROR = 0x04U,
-} PROTOCAN_INIT_StatusTypeDef;
-
uint16_t AvailableCanRxMsg(void);
PROTOCAN_INIT_StatusTypeDef PROTOCAN_INIT(CAN_HandleTypeDef *tmp_hcan,
@@ -280,39 +255,41 @@ PROTOCAN_INIT_StatusTypeDef PROTOCAN_INIT(CAN_HandleTypeDef *tmp_hcan,
void PROTOCAN_DEINIT(uint8_t stage);
void PROTOCAN_FILTERS(void);
void PROTOCAN_LOOP(void);
+
void ProtoCanPulseCallback(TIM_HandleTypeDef *htim);
void ProtoCanRxFifo0MsgPendingCallback(CAN_HandleTypeDef *hcan);
-HAL_StatusTypeDef PROTOCAN_AnalogProcessing(struct RXMsg _rxMsg);
-HAL_StatusTypeDef ProtoCanMsgToAnalogUniversal(struct RXMsg _rxMsg);
-HAL_StatusTypeDef ProtoCanMsgToAnalogUSTAVKI(struct RXMsg _rxMsg);
-HAL_StatusTypeDef ProtoCanMsgToAnalogUSens(struct RXMsg _rxMsg);
-HAL_StatusTypeDef ProtoCanMsgToAnalogISens(struct RXMsg _rxMsg);
-HAL_StatusTypeDef ProtoCanMsgToAnalogTSens(struct RXMsg _rxMsg);
+PROTOCAN_StatusTypeDef PROTOCAN_BroadcastProcessing(struct RXMsg _rxMsg);
+PROTOCAN_StatusTypeDef ProtoCanMsgToBroadcastStatus(struct RXMsg _rxMsg);
+PROTOCAN_StatusTypeDef ProtoCanMsgToBroadcastOnOff(struct RXMsg _rxMsg);
+PROTOCAN_StatusTypeDef ProtoCanMsgToBroadcastRestart(struct RXMsg _rxMsg);
+PROTOCAN_StatusTypeDef ProtoCanMsgToBroadcastRtcSetup(struct RXMsg _rxMsg);
-HAL_StatusTypeDef PROTOCAN_BroadcastProcessing(struct RXMsg _rxMsg);
-HAL_StatusTypeDef ProtoCanMsgToBroadcastStatus(struct RXMsg _rxMsg);
-void ProtoCanMsgToBroadcastOnOff(struct RXMsg _rxMsg);
-void ProtoCanMsgToBroadcastRestart(struct RXMsg _rxMsg);
-void ProtoCanMsgToBroadcastRtcSetup(struct RXMsg _rxMsg);
+PROTOCAN_StatusTypeDef PROTOCAN_DiscreticProcessing(struct RXMsg _rxMsg);
+PROTOCAN_StatusTypeDef ProtoCanMsgToDiscreteAccident(struct RXMsg _rxMsg);
+PROTOCAN_StatusTypeDef ProtoCanMsgToDiscreteWarning(struct RXMsg _rxMsg);
+PROTOCAN_StatusTypeDef ProtoCanMsgToDiscreteControlSignals(struct RXMsg _rxMsg);
+PROTOCAN_StatusTypeDef ProtoCanMsgToDiscreteFlags(struct RXMsg _rxMsg);
+PROTOCAN_StatusTypeDef ProtoCanMsgToDiscreteReset(struct RXMsg _rxMsg);
+PROTOCAN_StatusTypeDef ProtoCanMsgToDiscreteChangeMode(struct RXMsg _rxMsg);
+PROTOCAN_StatusTypeDef ProtoCanMsgToDiscreteRequestListOfParameters(struct RXMsg _rxMsg);
-HAL_StatusTypeDef PROTOCAN_DiscreticProcessing(struct RXMsg _rxMsg);
-void ProtoCanMsgToDiscreteAccident(struct RXMsg _rxMsg);
-void ProtoCanMsgToDiscreteWarning(struct RXMsg _rxMsg);
-void ProtoCanMsgToDiscreteControlSignals(struct RXMsg _rxMsg);
-void ProtoCanMsgToDiscreteFlags(struct RXMsg _rxMsg);
-void ProtoCanMsgToDiscreteReset(struct RXMsg _rxMsg);
-void ProtoCanMsgToDiscreteChangeMode(struct RXMsg _rxMsg);
-void ProtoCanMsgToDiscreteRequestListOfParameters(struct RXMsg _rxMsg);
+PROTOCAN_StatusTypeDef PROTOCAN_AnalogProcessing(struct RXMsg _rxMsg);
+PROTOCAN_StatusTypeDef ProtoCanMsgToAnalogUniversal(struct RXMsg _rxMsg);
+PROTOCAN_StatusTypeDef ProtoCanMsgToAnalogSettings(struct RXMsg _rxMsg);
+PROTOCAN_StatusTypeDef ProtoCanMsgToAnalogUSens(struct RXMsg _rxMsg);
+PROTOCAN_StatusTypeDef ProtoCanMsgToAnalogISens(struct RXMsg _rxMsg);
+PROTOCAN_StatusTypeDef ProtoCanMsgToAnalogTSens(struct RXMsg _rxMsg);
-void PROTOCAN_GeneralAddressSpace_Answer(struct RXMsg _rxMsg);
-HAL_StatusTypeDef CanRequestError(struct RXMsg _rxMsg);
+PROTOCAN_StatusTypeDef ProtoCanMsgToGeneralAddressSpace(struct RXMsg _rxMsg);
-HAL_StatusTypeDef PROTOCAN_ModbusProcessing(struct RXMsg _rxMsg);
-HAL_StatusTypeDef ProtoCanMsgToModbusCoil(struct RXMsg _rxMsg);
-HAL_StatusTypeDef ProtoCanMsgToModbusDiscrete(struct RXMsg _rxMsg);
-HAL_StatusTypeDef ProtoCanMsgToModbusHolding(struct RXMsg _rxMsg);
-HAL_StatusTypeDef ProtoCanMsgToModbusInput(struct RXMsg _rxMsg);
+PROTOCAN_StatusTypeDef CanRequestError(struct RXMsg _rxMsg);
+
+PROTOCAN_StatusTypeDef PROTOCAN_ModbusProcessing(struct RXMsg _rxMsg);
+PROTOCAN_StatusTypeDef ProtoCanMsgToModbusCoil(struct RXMsg _rxMsg);
+PROTOCAN_StatusTypeDef ProtoCanMsgToModbusDiscrete(struct RXMsg _rxMsg);
+PROTOCAN_StatusTypeDef ProtoCanMsgToModbusHolding(struct RXMsg _rxMsg);
+PROTOCAN_StatusTypeDef ProtoCanMsgToModbusInput(struct RXMsg _rxMsg);
void PROTOCAN_RTC_SYNC(uint8_t *data);
diff --git a/Core/Src/can.c b/Core/Src/can.c
index fbae66f..e640052 100644
--- a/Core/Src/can.c
+++ b/Core/Src/can.c
@@ -21,7 +21,13 @@
#include "can.h"
/* USER CODE BEGIN 0 */
-
+//CAN Speed
+#define CAN_SPEED_PRSC_1000KB 2
+#define CAN_SPEED_PRSC_500KB 4
+#define CAN_SPEED_PRSC_250KB 8
+#define CAN_SPEED_PRSC_125KB 16
+#define CAN_SPEED_PRSC_50KB 40
+#define CAN_CURRENT_SPEED CAN_SPEED_PRSC_250KB
/* USER CODE END 0 */
CAN_HandleTypeDef hcan;
diff --git a/Core/Src/main.c b/Core/Src/main.c
index fef4ea1..6c96e2d 100644
--- a/Core/Src/main.c
+++ b/Core/Src/main.c
@@ -92,9 +92,9 @@ int main(void)
MX_RTC_Init();
MX_TIM4_Init();
/* USER CODE BEGIN 2 */
- HAL_CAN_Start(&hcan);
if(PROTOCAN_INIT(&hcan, &hrtc, &htim4) == PROTOCAN_OK)
{
+ HAL_CAN_Start(&hcan);
HAL_CAN_ActivateNotification(&hcan, CAN_IT_RX_FIFO0_MSG_PENDING | CAN_IT_ERROR | CAN_IT_BUSOFF | CAN_IT_LAST_ERROR_CODE);
PROTOCAN_LOOP();
}
diff --git a/Core/Src/protocan.c b/Core/Src/protocan.c
index f79b826..50554ce 100644
--- a/Core/Src/protocan.c
+++ b/Core/Src/protocan.c
@@ -1,7 +1,7 @@
#include "protocan.h"
-struct device CurrentDevice;
-struct device Device_on_the_Network[8][16];
+ProtoCanDevice_t CurrentDevice;
+ProtoCanDevice_t Device_on_the_Network[8][16];
struct controlflags ControlFlags;
CAN_HandleTypeDef *_HCAN = 0;
@@ -10,7 +10,7 @@ TIM_HandleTypeDef *_HTIM = 0;
uint8_t CurrentStep = 1;
uint8_t LastStep = 0;
-struct RXMsg rxMsg[CAN_RX_BUFFER_SIZE];
+struct RXMsg rxMsg[PROTOCAN_RX_BUFFER_SIZE];
/**
* @brief Проверяет, является ли год високосным.
@@ -33,7 +33,7 @@ _Bool IsLeapYear(uint8_t year)
*/
uint16_t AvailableCanRxMsg(void)
{
- return ((uint16_t)(CAN_RX_BUFFER_SIZE + (LastStep - CurrentStep + 1)))%CAN_RX_BUFFER_SIZE;
+ return ((uint16_t)(PROTOCAN_RX_BUFFER_SIZE + (LastStep - CurrentStep + 1)))%PROTOCAN_RX_BUFFER_SIZE;
}
void PROTOCAN_DEINIT(uint8_t stage)
@@ -66,19 +66,19 @@ PROTOCAN_INIT_StatusTypeDef PROTOCAN_INIT(CAN_HandleTypeDef *tmp_hcan, RTC_Handl
HAL_StatusTypeDef CAN_RC_RESULT = HAL_CAN_RegisterCallback(_HCAN, HAL_CAN_RX_FIFO0_MSG_PENDING_CB_ID, ProtoCanRxFifo0MsgPendingCallback);
if(CAN_RC_RESULT != HAL_OK) {
PROTOCAN_DEINIT(initStage);
- return PROTOCAN_HRTC_ERROR;
+ return PROTOCAN_INIT_HRTC_ERROR;
}
#endif
} else {
PROTOCAN_DEINIT(initStage);
- return PROTOCAN_HCAN_ERROR;
+ return PROTOCAN_INIT_HCAN_ERROR;
}
initStage++;
if(tmp_hrtc) {
_HRTC = tmp_hrtc;
} else {
PROTOCAN_DEINIT(initStage);
- return PROTOCAN_HRTC_ERROR;
+ return PROTOCAN_INIT_HRTC_ERROR;
}
initStage++;
if(tmp_tim) {
@@ -87,17 +87,17 @@ PROTOCAN_INIT_StatusTypeDef PROTOCAN_INIT(CAN_HandleTypeDef *tmp_hcan, RTC_Handl
HAL_StatusTypeDef TIM_RC_RESULT = HAL_TIM_RegisterCallback(_HTIM, HAL_TIM_PERIOD_ELAPSED_CB_ID, ProtoCanPulseCallback);
if(TIM_RC_RESULT != HAL_OK) {
PROTOCAN_DEINIT(initStage);
- return PROTOCAN_HRTC_ERROR;
+ return PROTOCAN_INIT_HRTC_ERROR;
}
#endif
} else {
PROTOCAN_DEINIT(initStage);
- return PROTOCAN_TIM_ERROR;
+ return PROTOCAN_INIT_TIM_ERROR;
}
initStage++;
PROTOCAN_FILTERS();
ControlFlags.IsPulse = 1;
- return PROTOCAN_OK;
+ return PROTOCAN_INIT_OK;
}
/**
@@ -111,264 +111,71 @@ PROTOCAN_INIT_StatusTypeDef PROTOCAN_INIT(CAN_HandleTypeDef *tmp_hcan, RTC_Handl
*/
void PROTOCAN_LOOP(void)
{
- //HAL_TIM_Base_Start_IT(&htim4);
while(1)
{
if(AvailableCanRxMsg())
{
- if(rxMsg[CurrentStep].eID.Fields.MsgType == DATA_TYPE_ANALOG)
+ if(rxMsg[CurrentStep].eID.Fields.MsgType == PROTOCAN_MSGTYPE_ANALOG)
{
PROTOCAN_AnalogProcessing(rxMsg[CurrentStep]);
}
- else if(rxMsg[CurrentStep].eID.Fields.MsgType == DATA_TYPE_BROADCAST)
+ else if(rxMsg[CurrentStep].eID.Fields.MsgType == PROTOCAN_MSGTYPE_BROADCAST)
{
PROTOCAN_BroadcastProcessing(rxMsg[CurrentStep]);
}
- else if(rxMsg[CurrentStep].eID.Fields.MsgType == DATA_TYPE_DISCRETE)
+ else if(rxMsg[CurrentStep].eID.Fields.MsgType == PROTOCAN_MSGTYPE_DISCRETE)
{
PROTOCAN_DiscreticProcessing(rxMsg[CurrentStep]);
}
- else if(rxMsg[CurrentStep].eID.Fields.MsgType == DATA_TYPE_GENERAL_ADDRESS_SPACE)
+ else if(rxMsg[CurrentStep].eID.Fields.MsgType == PROTOCAN_MSGTYPE_GENERAL_ADDRESS_SPACE)
{
- PROTOCAN_GeneralAddressSpace_Answer(rxMsg[CurrentStep]);
+ ProtoCanMsgToGeneralAddressSpace(rxMsg[CurrentStep]);
}
- else if(rxMsg[CurrentStep].eID.Fields.MsgType == DATA_TYPE_MODBUS_COIL ||
- rxMsg[CurrentStep].eID.Fields.MsgType == DATA_TYPE_MODBUS_DISCRETE ||
- rxMsg[CurrentStep].eID.Fields.MsgType == DATA_TYPE_MODBUS_HOLDING ||
- rxMsg[CurrentStep].eID.Fields.MsgType == DATA_TYPE_MODBUS_INPUT)
+ else if(rxMsg[CurrentStep].eID.Fields.MsgType == PROTOCAN_MSGTYPE_MODBUS_COIL ||
+ rxMsg[CurrentStep].eID.Fields.MsgType == PROTOCAN_MSGTYPE_MODBUS_DISCRETE ||
+ rxMsg[CurrentStep].eID.Fields.MsgType == PROTOCAN_MSGTYPE_MODBUS_HOLDING ||
+ rxMsg[CurrentStep].eID.Fields.MsgType == PROTOCAN_MSGTYPE_MODBUS_INPUT)
{
PROTOCAN_ModbusProcessing(rxMsg[CurrentStep]);
}
- else if(rxMsg[CurrentStep].eID.Fields.MsgType == DATA_TYPE_ERROR)
+ else if(rxMsg[CurrentStep].eID.Fields.MsgType == PROTOCAN_MSGTYPE_ERROR)
{
CanRequestError(rxMsg[CurrentStep]);
}
- CurrentStep = (uint16_t)(CurrentStep + 1) % CAN_RX_BUFFER_SIZE;
+ CurrentStep = (uint16_t)(CurrentStep + 1) % PROTOCAN_RX_BUFFER_SIZE;
}
}
}
-/**
-* @brief Функция обработки аналоговых запросов.
-* @param struct RXMsg _rxMsg - структура для полученного сообщения.
-* @details Функция, сортирующая запросы по типам и вызывающая соответствующие функции. Типы запросов: Универсальный, Уставки, Напряжение, Ток, Температура.
-* @return HAL_StatusTypeDef Статус выполнения команды CAN (успех или ошибка).
-*/
-HAL_StatusTypeDef PROTOCAN_AnalogProcessing(struct RXMsg _rxMsg)
-{
- msgAnalogType msg;
- msg.Body = _rxMsg.eID.Fields.MsgBody;
- switch (msg.Fields.SensorType)
- {
- case SENSOR_TYPE_ANALOG_UNIVERSAL:
- {
- return ProtoCanMsgToAnalogUniversal(_rxMsg);
- break;
- }
- case SENSOR_TYPE_ANALOG_USTAVKI:
- {
- return ProtoCanMsgToAnalogUSTAVKI(_rxMsg);
- break;
- }
- case SENSOR_TYPE_ANALOG_U:
- {
- return ProtoCanMsgToAnalogUSens(_rxMsg);
- break;
- }
- case SENSOR_TYPE_ANALOG_I:
- {
- return ProtoCanMsgToAnalogISens(_rxMsg);
- break;
- }
- case SENSOR_TYPE_ANALOG_T:
- {
- return ProtoCanMsgToAnalogTSens(_rxMsg);
- break;
- }
- default:
- //RESERVE SENSOR TYPE
- return HAL_ERROR;
- break;
- }
- return HAL_ERROR;
-}
-
-/**
-* @brief Функция ответа на запрос данных со всех датчиков.
-* Создает сообщение с определенными данными и отправляет его через CAN-шину.
-* @param _rxMsg Структура входящего сообщения, используется для формирования ID.
-* @return HAL_StatusTypeDef Статус выполнения операции HAL, например HAL_OK.
-*/
-__weak HAL_StatusTypeDef ProtoCanMsgToAnalogUniversal(struct RXMsg _rxMsg)
-{
- CAN_TxHeaderTypeDef TxHeader;
- uint32_t TxMailBox = 0;
- uint8_t data[8];
- TxHeader.IDE = CAN_ID_EXT;
- TxHeader.TransmitGlobalTime = DISABLE;
- TxHeader.RTR = CAN_RTR_DATA;
- extID tmp_eID;
- tmp_eID.BitAll = _rxMsg.eID.BitAll;
- tmp_eID.Fields.Route = ROUTE_SLAVE;
- TxHeader.ExtId = tmp_eID.BitAll;
- TxHeader.DLC = 6;
- data[0] = 'U';
- data[1] = 'N';
- data[2] = 'I';
- data[3] = 'V';
- data[4] = 'E';
- data[5] = 'R';
- return HAL_CAN_AddTxMessage(_HCAN, &TxHeader, data, &TxMailBox);
-}
-
-/**
-* @brief Функция ответа на запрос уставок по CAN.
-* Создает сообщение с определенными данными и отправляет его через CAN-шину.
-* @param _rxMsg Структура входящего сообщения, используется только для формирования ID.
-* @return HAL_StatusTypeDef Статус выполнения операции HAL, например HAL_OK.
-*/
-__weak HAL_StatusTypeDef ProtoCanMsgToAnalogUSTAVKI(struct RXMsg _rxMsg)
-{
- CAN_TxHeaderTypeDef TxHeader;
- uint32_t TxMailBox = 0;
- uint8_t data[8];
- TxHeader.IDE = CAN_ID_EXT;
- TxHeader.TransmitGlobalTime = DISABLE;
- TxHeader.RTR = CAN_RTR_DATA;
- extID tmp_eID;
- tmp_eID.BitAll = _rxMsg.eID.BitAll;
- tmp_eID.Fields.Route = ROUTE_SLAVE;
- TxHeader.ExtId = tmp_eID.BitAll;
- TxHeader.DLC = 7;
- data[0] = 'U';
- data[1] = 'S';
- data[2] = 'T';
- data[3] = 'A';
- data[4] = 'V';
- data[5] = 'K';
- data[6] = 'I';
- return HAL_CAN_AddTxMessage(_HCAN, &TxHeader, data, &TxMailBox);
-}
-
-/**
-* @brief Функция ответа на запрос данных с датчиков напряжения.
-* Создает сообщение с указанными параметрами и отправляет его через CAN-шину.
-* @param _rxMsg Структура входящего сообщения, используемая для формирования идентификатора и данных.
-* @return HAL_StatusTypeDef Статус выполнения операции HAL, например HAL_OK при успешной отправке.
-*/
-__weak HAL_StatusTypeDef ProtoCanMsgToAnalogUSens(struct RXMsg _rxMsg)
-{
- CAN_TxHeaderTypeDef TxHeader;
- uint32_t TxMailBox = 0;
- uint8_t data[8];
- TxHeader.IDE = CAN_ID_EXT;
- TxHeader.TransmitGlobalTime = DISABLE;
- TxHeader.RTR = CAN_RTR_DATA;
- extID tmp_eID;
- tmp_eID.BitAll = _rxMsg.eID.BitAll;
- tmp_eID.Fields.Route = ROUTE_SLAVE;
- TxHeader.ExtId = tmp_eID.BitAll;
- TxHeader.DLC = 6;
- msgAnalogType msg;
- msg.Body = _rxMsg.eID.Fields.MsgBody;
- data[0] = 'U';
- data[1] = 'S';
- data[2] = 47 + msg.Fields.SensorID / 1000;
- data[3] = 47 + msg.Fields.SensorID / 100 % 10;
- data[4] = 47 + msg.Fields.SensorID / 10 % 10;
- data[5] = 47 + msg.Fields.SensorID % 10;
- return HAL_CAN_AddTxMessage(_HCAN, &TxHeader, data, &TxMailBox);
-}
-
-/**
-* @brief Функция ответа на запрос данных с датчиков тока.
-* Создает сообщение с определенными параметрами и отправляет его через CAN-шину.
-* @param _rxMsg Структура входящего сообщения, используется для формирования идентификатора и данных.
-* @return HAL_StatusTypeDef Статус операции HAL, например HAL_OK при успешной отправке.
-*/
-__weak HAL_StatusTypeDef ProtoCanMsgToAnalogISens(struct RXMsg _rxMsg)
-{
- CAN_TxHeaderTypeDef TxHeader;
- uint32_t TxMailBox = 0;
- uint8_t data[8];
- TxHeader.IDE = CAN_ID_EXT;
- TxHeader.TransmitGlobalTime = DISABLE;
- TxHeader.RTR = CAN_RTR_DATA;
- extID tmp_eID;
- tmp_eID.BitAll = _rxMsg.eID.BitAll;
- tmp_eID.Fields.Route = ROUTE_SLAVE;
- TxHeader.ExtId = tmp_eID.BitAll;
- TxHeader.DLC = 6;
- msgAnalogType msg;
- msg.Body = _rxMsg.eID.Fields.MsgBody;
- data[0] = 'I';
- data[1] = 'S';
- data[2] = 47 + msg.Fields.SensorID / 1000;
- data[3] = 47 + msg.Fields.SensorID / 100 % 10;
- data[4] = 47 + msg.Fields.SensorID / 10 % 10;
- data[5] = 47 + msg.Fields.SensorID % 10;
- return HAL_CAN_AddTxMessage(_HCAN, &TxHeader, data, &TxMailBox);
-}
-
-/**
-* @brief Функция ответа на запрос данных с датчиков температуры.
-* Создает сообщение с определенным заголовком, формирует данные по ID сенсора и отправляет его через CAN.
-* @param _rxMsg Структура полученного сообщения, которая используется для формирования идентификатора.
-* @return HAL_StatusTypeDef Статус выполнения функции HAL, например HAL_OK при успехе.
-*/
-__weak HAL_StatusTypeDef ProtoCanMsgToAnalogTSens(struct RXMsg _rxMsg)
-{
- CAN_TxHeaderTypeDef TxHeader;
- uint32_t TxMailBox = 0;
- uint8_t data[8];
- TxHeader.IDE = CAN_ID_EXT;
- TxHeader.TransmitGlobalTime = DISABLE;
- TxHeader.RTR = CAN_RTR_DATA;
- extID tmp_eID;
- tmp_eID.BitAll = _rxMsg.eID.BitAll;
- tmp_eID.Fields.Route = ROUTE_SLAVE;
- TxHeader.ExtId = tmp_eID.BitAll;
- TxHeader.DLC = 6;
- msgAnalogType msg;
- msg.Body = _rxMsg.eID.Fields.MsgBody;
- data[0] = 'T';
- data[1] = 'S';
- data[2] = 47 + msg.Fields.SensorID / 1000;
- data[3] = 47 + msg.Fields.SensorID / 100 % 10;
- data[4] = 47 + msg.Fields.SensorID / 10 % 10;
- data[5] = 47 + msg.Fields.SensorID % 10;
- return HAL_CAN_AddTxMessage(_HCAN, &TxHeader, data, &TxMailBox);
-}
-
/**
* @brief Функция обработки широковещательных запросов.
* @param struct RXMsg _rxMsg - структура для полученного сообщения.
* @details Функция, выполняющая команды, переданные в широковещательном формате с головного (master) устройства. Типы команд: Запрос статуса, запрос на включение или выключение, рестарт устройств, установка времени.
* @return HAL_StatusTypeDef Статус выполнения команды CAN (успех или ошибка).
*/
-HAL_StatusTypeDef PROTOCAN_BroadcastProcessing(struct RXMsg _rxMsg)
+PROTOCAN_StatusTypeDef PROTOCAN_BroadcastProcessing(struct RXMsg _rxMsg)
{
- msgBroadcastType msg;
+ msgBodyBroadcastType msg;
msg.Body = _rxMsg.eID.Fields.MsgBody;
- switch(msg.Fields.BroadcastType)
+ switch(msg.Fields.Type)
{
- case SENSOR_TYPE_BROADCAST_STATUS:
+ case PROTOCAN_BROADCAST_STATUS:
{
//Обработка запроса статуса устройства
return ProtoCanMsgToBroadcastStatus(_rxMsg);
}
- case SENSOR_TYPE_BROADCAST_ONOFF:
+ case PROTOCAN_BROADCAST_ONOFF:
{
//Обработка запроса на вкл/выкл
ProtoCanMsgToBroadcastOnOff(_rxMsg);
break;
}
- case SENSOR_TYPE_BROADCAST_RESTARTDEVICE:
+ case PROTOCAN_BROADCAST_RESTARTDEVICE:
{
ProtoCanMsgToBroadcastRestart(_rxMsg);
break;
}
- case SENSOR_TYPE_BROADCAST_RTCSETUP:
+ case PROTOCAN_BROADCAST_RTCSETUP:
{
//Обработка запроса на синхронизацию времени
//С головным устройством
@@ -377,10 +184,10 @@ HAL_StatusTypeDef PROTOCAN_BroadcastProcessing(struct RXMsg _rxMsg)
}
default:
//RESERVE SENSOR TYPE.
- return HAL_ERROR;
+ return PROTOCAN_ERROR;
break;
}
- return HAL_OK;
+ return PROTOCAN_OK;
}
/**
@@ -389,7 +196,7 @@ HAL_StatusTypeDef PROTOCAN_BroadcastProcessing(struct RXMsg _rxMsg)
* @param _rxMsg Структура полученного по CAN запроса.
* @return HAL_StatusTypeDef Статус операции HAL, например HAL_OK при успехе.
*/
-__weak HAL_StatusTypeDef ProtoCanMsgToBroadcastStatus(struct RXMsg _rxMsg)
+__weak PROTOCAN_StatusTypeDef ProtoCanMsgToBroadcastStatus(struct RXMsg _rxMsg)
{
CAN_TxHeaderTypeDef TxHeader;
uint32_t TxMailBox = 0;
@@ -398,9 +205,9 @@ __weak HAL_StatusTypeDef ProtoCanMsgToBroadcastStatus(struct RXMsg _rxMsg)
TxHeader.DLC = 7;
TxHeader.TransmitGlobalTime = DISABLE;
TxHeader.RTR = CAN_RTR_DATA;
- extID tmp_eID;
+ ProtoCanId_t tmp_eID;
tmp_eID.BitAll = _rxMsg.eID.BitAll;
- tmp_eID.Fields.Route = ROUTE_SLAVE;
+ tmp_eID.Fields.Route = PROTOCAN_ROUTE_FROM_DEVICE;
tmp_eID.Fields.DeviceType = CURRENT_TYPE_DEVICE;
tmp_eID.Fields.DeviceID = CURRENT_ID_DEVICE;
TxHeader.ExtId = tmp_eID.BitAll;
@@ -418,7 +225,7 @@ __weak HAL_StatusTypeDef ProtoCanMsgToBroadcastStatus(struct RXMsg _rxMsg)
data[5] = DateToUpdate.Date;
data[6] = DateToUpdate.WeekDay;
- return HAL_CAN_AddTxMessage(_HCAN, &TxHeader, data, &TxMailBox);
+ return (PROTOCAN_StatusTypeDef)HAL_CAN_AddTxMessage(_HCAN, &TxHeader, data, &TxMailBox);
}
/**
@@ -427,9 +234,10 @@ __weak HAL_StatusTypeDef ProtoCanMsgToBroadcastStatus(struct RXMsg _rxMsg)
* В данном случае — просто инвертирует его логическое значение.
* @param _rxMsg Структура полученного CAN-сообщения (Пока не используется в функции).
*/
-__weak void ProtoCanMsgToBroadcastOnOff(struct RXMsg _rxMsg)
+__weak PROTOCAN_StatusTypeDef ProtoCanMsgToBroadcastOnOff(struct RXMsg _rxMsg)
{
ControlFlags.IsPulse = !ControlFlags.IsPulse;
+ return PROTOCAN_OK;
}
/**
@@ -438,15 +246,15 @@ __weak void ProtoCanMsgToBroadcastOnOff(struct RXMsg _rxMsg)
* вызывает системный перезапуск.
* @param _rxMsg Структура полученного CAN-сообщения с командой перезапуска.
*/
-__weak void ProtoCanMsgToBroadcastRestart(struct RXMsg _rxMsg)
+__weak PROTOCAN_StatusTypeDef ProtoCanMsgToBroadcastRestart(struct RXMsg _rxMsg)
{
if(_rxMsg.DLC == 0)
{
- return;
+ return PROTOCAN_ERROR;
}
- msgBroadcastType msg;
+ msgBodyBroadcastType msg;
msg.Body = _rxMsg.eID.Fields.MsgBody;
- if(msg.Fields.Page == (CURRENT_ID_DEVICE / (_rxMsg.DLC*8)))
+ if(msg.Fields.Body == (CURRENT_ID_DEVICE / (_rxMsg.DLC*8)))
{
uint64_t page = 0;
for(int i = 0; i < _rxMsg.DLC; i++)
@@ -458,7 +266,7 @@ __weak void ProtoCanMsgToBroadcastRestart(struct RXMsg _rxMsg)
NVIC_SystemReset();
}
}
- return;
+ return PROTOCAN_OK;
}
/**
@@ -467,10 +275,10 @@ __weak void ProtoCanMsgToBroadcastRestart(struct RXMsg _rxMsg)
* вызывает функцию синхронизации RTC.
* @param _rxMsg Структура полученного CAN-сообщения с данными для установки времени и даты.
*/
-__weak void ProtoCanMsgToBroadcastRtcSetup(struct RXMsg _rxMsg)
+__weak PROTOCAN_StatusTypeDef ProtoCanMsgToBroadcastRtcSetup(struct RXMsg _rxMsg)
{
if(_rxMsg.DLC > 7) {
- //ERROR
+ return PROTOCAN_ERROR;
} else {
int DaysCount_Normal[2][12] = {{31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31},
{31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}};
@@ -481,11 +289,13 @@ __weak void ProtoCanMsgToBroadcastRtcSetup(struct RXMsg _rxMsg)
_rxMsg.Data[4] > 12 ||
_rxMsg.Data[5] > DaysCount_Normal[IsLeapYear(_rxMsg.Data[3])][_rxMsg.Data[4]] ||
_rxMsg.Data[6] > 6) {
+ return PROTOCAN_ERROR;
//ERROR
} else {
PROTOCAN_RTC_SYNC(_rxMsg.Data);
}
}
+ return PROTOCAN_OK;
}
/**
@@ -495,52 +305,52 @@ __weak void ProtoCanMsgToBroadcastRtcSetup(struct RXMsg _rxMsg)
* @note Запрос на устройство. Головное (master) устройство запрашивает некоторое колличество параметров. В Data - 64 битовых адресса параметров, тип которых задаётся в Sensor ID. Имеется возможность запрашивать непоследовательные параметры.
* @return HAL_StatusTypeDef Статус выполнения команды CAN (успех или ошибка).
*/
-HAL_StatusTypeDef PROTOCAN_DiscreticProcessing(struct RXMsg _rxMsg)
+PROTOCAN_StatusTypeDef PROTOCAN_DiscreticProcessing(struct RXMsg _rxMsg)
{
- msgDiscreteType msg;
+ msgBodyDiscreteType msg;
msg.Body = _rxMsg.eID.Fields.MsgBody;
switch(msg.Fields.Type){
- case SENSOR_TYPE_DISCRETE_ACCIDENT:
+ case PROTOCAN_DISCRETE_ACCIDENT:
{
ProtoCanMsgToDiscreteAccident(_rxMsg);
break;
}
- case SENSOR_TYPE_DISCRETE_WARNING:
+ case PROTOCAN_DISCRETE_WARNING:
{
ProtoCanMsgToDiscreteWarning(_rxMsg);
break;
}
- case SENSOR_TYPE_DISCRETE_CONTROL_SIGNALS:
+ case PROTOCAN_DISCRETE_CONTROL_SIGNALS:
{
ProtoCanMsgToDiscreteControlSignals(_rxMsg);
break;
}
- case SENSOR_TYPE_DISCRETE_FLAGS:
+ case PROTOCAN_DISCRETE_FLAGS:
{
ProtoCanMsgToDiscreteFlags(_rxMsg);
break;
}
- case SENSOR_TYPE_DISCRETE_RESET:
+ case PROTOCAN_DISCRETE_RESET:
{
ProtoCanMsgToDiscreteReset(_rxMsg);
break;
}
- case SENSOR_TYPE_DISCRETE_CHANGE_MODE:
+ case PROTOCAN_DISCRETE_CHANGE_MODE:
{
ProtoCanMsgToDiscreteChangeMode(_rxMsg);
break;
}
- case SENSOR_TYPE_DISCRETE_REQUEST_LIST_OF_PARAMETERS:
+ case PROTOCAN_DISCRETE_REQUEST_LIST_OF_PARAMETERS:
{
ProtoCanMsgToDiscreteRequestListOfParameters(_rxMsg);
break;
}
default:
//RESERVE SENSOR TYPE.
- return HAL_ERROR;
+ return PROTOCAN_ERROR;
break;
}
- return HAL_OK;
+ return PROTOCAN_OK;
}
/**
@@ -549,9 +359,9 @@ HAL_StatusTypeDef PROTOCAN_DiscreticProcessing(struct RXMsg _rxMsg)
* Можно реализовать отправку или обработку аварийных данных.
* @param _rxMsg Входящее сообщение с данными запроса.
*/
-__weak void ProtoCanMsgToDiscreteAccident(struct RXMsg _rxMsg)
+__weak PROTOCAN_StatusTypeDef ProtoCanMsgToDiscreteAccident(struct RXMsg _rxMsg)
{
- return;
+ return PROTOCAN_OK;
}
/**
@@ -560,9 +370,9 @@ __weak void ProtoCanMsgToDiscreteAccident(struct RXMsg _rxMsg)
* Можно реализовать обработку или ответ на предупреждения.
* @param _rxMsg Входящее сообщение.
*/
-__weak void ProtoCanMsgToDiscreteWarning(struct RXMsg _rxMsg)
+__weak PROTOCAN_StatusTypeDef ProtoCanMsgToDiscreteWarning(struct RXMsg _rxMsg)
{
- return;
+ return PROTOCAN_OK;
}
/**
@@ -571,9 +381,9 @@ __weak void ProtoCanMsgToDiscreteWarning(struct RXMsg _rxMsg)
* Можно реализовать управление сигналами.
* @param _rxMsg Входящее сообщение.
*/
-__weak void ProtoCanMsgToDiscreteControlSignals(struct RXMsg _rxMsg)
+__weak PROTOCAN_StatusTypeDef ProtoCanMsgToDiscreteControlSignals(struct RXMsg _rxMsg)
{
- return;
+ return PROTOCAN_OK;
}
/**
@@ -582,9 +392,9 @@ __weak void ProtoCanMsgToDiscreteControlSignals(struct RXMsg _rxMsg)
* Можно реализовать работу с флагами.
* @param _rxMsg Входящее сообщение.
*/
-__weak void ProtoCanMsgToDiscreteFlags(struct RXMsg _rxMsg)
+__weak PROTOCAN_StatusTypeDef ProtoCanMsgToDiscreteFlags(struct RXMsg _rxMsg)
{
- return;
+ return PROTOCAN_OK;
}
/**
@@ -592,9 +402,10 @@ __weak void ProtoCanMsgToDiscreteFlags(struct RXMsg _rxMsg)
* Выполняет программный рестарт системы.
* @param _rxMsg Входящее сообщение.
*/
-__weak void ProtoCanMsgToDiscreteReset(struct RXMsg _rxMsg)
+__weak PROTOCAN_StatusTypeDef ProtoCanMsgToDiscreteReset(struct RXMsg _rxMsg)
{
NVIC_SystemReset();
+ return PROTOCAN_ERROR;
}
/**
@@ -603,9 +414,9 @@ __weak void ProtoCanMsgToDiscreteReset(struct RXMsg _rxMsg)
* Можно реализовать изменение режима работы.
* @param _rxMsg Входящее сообщение.
*/
-__weak void ProtoCanMsgToDiscreteChangeMode(struct RXMsg _rxMsg)
+__weak PROTOCAN_StatusTypeDef ProtoCanMsgToDiscreteChangeMode(struct RXMsg _rxMsg)
{
- return;
+ return PROTOCAN_OK;
}
/**
@@ -614,17 +425,63 @@ __weak void ProtoCanMsgToDiscreteChangeMode(struct RXMsg _rxMsg)
* Можно реализовать отправку списка параметров.
* @param _rxMsg Входящее сообщение.
*/
-__weak void ProtoCanMsgToDiscreteRequestListOfParameters(struct RXMsg _rxMsg)
+__weak PROTOCAN_StatusTypeDef ProtoCanMsgToDiscreteRequestListOfParameters(struct RXMsg _rxMsg)
{
- return;
+ return PROTOCAN_OK;
}
/**
-* @brief Обработка и ответ на запрос общего адресного пространства.
-* Формирует и передает сообщение с данными о статусе "GAS-XXXX", где XXXX — значение из сообщения _rxMsg.
-* @param _rxMsg Структура входящего сообщения, содержит идентификатор и тело сообщения.
+* @brief Функция обработки аналоговых запросов.
+* @param struct RXMsg _rxMsg - структура для полученного сообщения.
+* @details Функция, сортирующая запросы по типам и вызывающая соответствующие функции. Типы запросов: Универсальный, Уставки, Напряжение, Ток, Температура.
+* @return HAL_StatusTypeDef Статус выполнения команды CAN (успех или ошибка).
*/
-void PROTOCAN_GeneralAddressSpace_Answer(struct RXMsg _rxMsg)
+PROTOCAN_StatusTypeDef PROTOCAN_AnalogProcessing(struct RXMsg _rxMsg)
+{
+ msgBodyAnalogType msg;
+ msg.Body = _rxMsg.eID.Fields.MsgBody;
+ switch (msg.Fields.Type)
+ {
+ case PROTOCAN_ANALOG_UNIVERSAL:
+ {
+ return ProtoCanMsgToAnalogUniversal(_rxMsg);
+ break;
+ }
+ case PROTOCAN_ANALOG_SETTINGS:
+ {
+ return ProtoCanMsgToAnalogSettings(_rxMsg);
+ break;
+ }
+ case PROTOCAN_ANALOG_U:
+ {
+ return ProtoCanMsgToAnalogUSens(_rxMsg);
+ break;
+ }
+ case PROTOCAN_ANALOG_I:
+ {
+ return ProtoCanMsgToAnalogISens(_rxMsg);
+ break;
+ }
+ case PROTOCAN_ANALOG_T:
+ {
+ return ProtoCanMsgToAnalogTSens(_rxMsg);
+ break;
+ }
+ default:
+ //RESERVE SENSOR TYPE
+ return PROTOCAN_ERROR;
+ break;
+ }
+ return PROTOCAN_ERROR;
+}
+
+/**
+* @brief Функция ответа на запрос данных со всех датчиков.
+* Создает сообщение с определенными данными и отправляет его через CAN-шину.
+* @param _rxMsg Структура входящего сообщения, используется для формирования ID.
+* @return HAL_StatusTypeDef Статус выполнения операции HAL, например HAL_OK.
+*/
+__weak PROTOCAN_StatusTypeDef ProtoCanMsgToAnalogUniversal(struct RXMsg _rxMsg)
{
CAN_TxHeaderTypeDef TxHeader;
uint32_t TxMailBox = 0;
@@ -632,9 +489,155 @@ void PROTOCAN_GeneralAddressSpace_Answer(struct RXMsg _rxMsg)
TxHeader.IDE = CAN_ID_EXT;
TxHeader.TransmitGlobalTime = DISABLE;
TxHeader.RTR = CAN_RTR_DATA;
- extID tmp_eID;
+ ProtoCanId_t tmp_eID;
tmp_eID.BitAll = _rxMsg.eID.BitAll;
- tmp_eID.Fields.Route = ROUTE_SLAVE;
+ tmp_eID.Fields.Route = PROTOCAN_ROUTE_FROM_DEVICE;
+ TxHeader.ExtId = tmp_eID.BitAll;
+ TxHeader.DLC = 6;
+ data[0] = 'U';
+ data[1] = 'N';
+ data[2] = 'I';
+ data[3] = 'V';
+ data[4] = 'E';
+ data[5] = 'R';
+ return (PROTOCAN_StatusTypeDef)HAL_CAN_AddTxMessage(_HCAN, &TxHeader, data, &TxMailBox);
+}
+
+/**
+* @brief Функция ответа на запрос уставок по CAN.
+* Создает сообщение с определенными данными и отправляет его через CAN-шину.
+* @param _rxMsg Структура входящего сообщения, используется только для формирования ID.
+* @return HAL_StatusTypeDef Статус выполнения операции HAL, например HAL_OK.
+*/
+__weak PROTOCAN_StatusTypeDef ProtoCanMsgToAnalogSettings(struct RXMsg _rxMsg)
+{
+ CAN_TxHeaderTypeDef TxHeader;
+ uint32_t TxMailBox = 0;
+ uint8_t data[8];
+ TxHeader.IDE = CAN_ID_EXT;
+ TxHeader.TransmitGlobalTime = DISABLE;
+ TxHeader.RTR = CAN_RTR_DATA;
+ ProtoCanId_t tmp_eID;
+ tmp_eID.BitAll = _rxMsg.eID.BitAll;
+ tmp_eID.Fields.Route = PROTOCAN_ROUTE_FROM_DEVICE;
+ TxHeader.ExtId = tmp_eID.BitAll;
+ TxHeader.DLC = 7;
+ data[0] = 'U';
+ data[1] = 'S';
+ data[2] = 'T';
+ data[3] = 'A';
+ data[4] = 'V';
+ data[5] = 'K';
+ data[6] = 'I';
+ return (PROTOCAN_StatusTypeDef)HAL_CAN_AddTxMessage(_HCAN, &TxHeader, data, &TxMailBox);
+}
+
+/**
+* @brief Функция ответа на запрос данных с датчиков напряжения.
+* Создает сообщение с указанными параметрами и отправляет его через CAN-шину.
+* @param _rxMsg Структура входящего сообщения, используемая для формирования идентификатора и данных.
+* @return HAL_StatusTypeDef Статус выполнения операции HAL, например HAL_OK при успешной отправке.
+*/
+__weak PROTOCAN_StatusTypeDef ProtoCanMsgToAnalogUSens(struct RXMsg _rxMsg)
+{
+ CAN_TxHeaderTypeDef TxHeader;
+ uint32_t TxMailBox = 0;
+ uint8_t data[8];
+ TxHeader.IDE = CAN_ID_EXT;
+ TxHeader.TransmitGlobalTime = DISABLE;
+ TxHeader.RTR = CAN_RTR_DATA;
+ ProtoCanId_t tmp_eID;
+ tmp_eID.BitAll = _rxMsg.eID.BitAll;
+ tmp_eID.Fields.Route = PROTOCAN_ROUTE_FROM_DEVICE;
+ TxHeader.ExtId = tmp_eID.BitAll;
+ TxHeader.DLC = 6;
+ msgBodyAnalogType msg;
+ msg.Body = _rxMsg.eID.Fields.MsgBody;
+ data[0] = 'U';
+ data[1] = 'S';
+ data[2] = 47 + msg.Fields.SensorID / 1000;
+ data[3] = 47 + msg.Fields.SensorID / 100 % 10;
+ data[4] = 47 + msg.Fields.SensorID / 10 % 10;
+ data[5] = 47 + msg.Fields.SensorID % 10;
+ return (PROTOCAN_StatusTypeDef)HAL_CAN_AddTxMessage(_HCAN, &TxHeader, data, &TxMailBox);
+}
+
+/**
+* @brief Функция ответа на запрос данных с датчиков тока.
+* Создает сообщение с определенными параметрами и отправляет его через CAN-шину.
+* @param _rxMsg Структура входящего сообщения, используется для формирования идентификатора и данных.
+* @return HAL_StatusTypeDef Статус операции HAL, например HAL_OK при успешной отправке.
+*/
+__weak PROTOCAN_StatusTypeDef ProtoCanMsgToAnalogISens(struct RXMsg _rxMsg)
+{
+ CAN_TxHeaderTypeDef TxHeader;
+ uint32_t TxMailBox = 0;
+ uint8_t data[8];
+ TxHeader.IDE = CAN_ID_EXT;
+ TxHeader.TransmitGlobalTime = DISABLE;
+ TxHeader.RTR = CAN_RTR_DATA;
+ ProtoCanId_t tmp_eID;
+ tmp_eID.BitAll = _rxMsg.eID.BitAll;
+ tmp_eID.Fields.Route = PROTOCAN_ROUTE_FROM_DEVICE;
+ TxHeader.ExtId = tmp_eID.BitAll;
+ TxHeader.DLC = 6;
+ msgBodyAnalogType msg;
+ msg.Body = _rxMsg.eID.Fields.MsgBody;
+ data[0] = 'I';
+ data[1] = 'S';
+ data[2] = 47 + msg.Fields.SensorID / 1000;
+ data[3] = 47 + msg.Fields.SensorID / 100 % 10;
+ data[4] = 47 + msg.Fields.SensorID / 10 % 10;
+ data[5] = 47 + msg.Fields.SensorID % 10;
+ return (PROTOCAN_StatusTypeDef)HAL_CAN_AddTxMessage(_HCAN, &TxHeader, data, &TxMailBox);
+}
+
+/**
+* @brief Функция ответа на запрос данных с датчиков температуры.
+* Создает сообщение с определенным заголовком, формирует данные по ID сенсора и отправляет его через CAN.
+* @param _rxMsg Структура полученного сообщения, которая используется для формирования идентификатора.
+* @return HAL_StatusTypeDef Статус выполнения функции HAL, например HAL_OK при успехе.
+*/
+__weak PROTOCAN_StatusTypeDef ProtoCanMsgToAnalogTSens(struct RXMsg _rxMsg)
+{
+ CAN_TxHeaderTypeDef TxHeader;
+ uint32_t TxMailBox = 0;
+ uint8_t data[8];
+ TxHeader.IDE = CAN_ID_EXT;
+ TxHeader.TransmitGlobalTime = DISABLE;
+ TxHeader.RTR = CAN_RTR_DATA;
+ ProtoCanId_t tmp_eID;
+ tmp_eID.BitAll = _rxMsg.eID.BitAll;
+ tmp_eID.Fields.Route = PROTOCAN_ROUTE_FROM_DEVICE;
+ TxHeader.ExtId = tmp_eID.BitAll;
+ TxHeader.DLC = 6;
+ msgBodyAnalogType msg;
+ msg.Body = _rxMsg.eID.Fields.MsgBody;
+ data[0] = 'T';
+ data[1] = 'S';
+ data[2] = 47 + msg.Fields.SensorID / 1000;
+ data[3] = 47 + msg.Fields.SensorID / 100 % 10;
+ data[4] = 47 + msg.Fields.SensorID / 10 % 10;
+ data[5] = 47 + msg.Fields.SensorID % 10;
+ return (PROTOCAN_StatusTypeDef)HAL_CAN_AddTxMessage(_HCAN, &TxHeader, data, &TxMailBox);
+}
+
+/**
+* @brief Обработка и ответ на запрос общего адресного пространства.
+* Формирует и передает сообщение с данными о статусе "GAS-XXXX", где XXXX — значение из сообщения _rxMsg.
+* @param _rxMsg Структура входящего сообщения, содержит идентификатор и тело сообщения.
+*/
+__weak PROTOCAN_StatusTypeDef ProtoCanMsgToGeneralAddressSpace(struct RXMsg _rxMsg)
+{
+ CAN_TxHeaderTypeDef TxHeader;
+ uint32_t TxMailBox = 0;
+ uint8_t data[8];
+ TxHeader.IDE = CAN_ID_EXT;
+ TxHeader.TransmitGlobalTime = DISABLE;
+ TxHeader.RTR = CAN_RTR_DATA;
+ ProtoCanId_t tmp_eID;
+ tmp_eID.BitAll = _rxMsg.eID.BitAll;
+ tmp_eID.Fields.Route = PROTOCAN_ROUTE_FROM_DEVICE;
TxHeader.ExtId = tmp_eID.BitAll;
TxHeader.DLC = 8;
data[0] = 'G';
@@ -653,7 +656,9 @@ void PROTOCAN_GeneralAddressSpace_Answer(struct RXMsg _rxMsg)
data[4+i] = sym+'0';
}
}
- HAL_CAN_AddTxMessage(_HCAN, &TxHeader, data, &TxMailBox);
+ return (PROTOCAN_StatusTypeDef)HAL_CAN_AddTxMessage(_HCAN, &TxHeader, data, &TxMailBox);
+}
+
}
/**
@@ -663,36 +668,36 @@ void PROTOCAN_GeneralAddressSpace_Answer(struct RXMsg _rxMsg)
* @param _rxMsg Структура входящего сообщения RXMsg.
* @return HAL_StatusTypeDef Статус выполнения команды CAN (успех или ошибка).
*/
-HAL_StatusTypeDef PROTOCAN_ModbusProcessing(struct RXMsg _rxMsg)
+PROTOCAN_StatusTypeDef PROTOCAN_ModbusProcessing(struct RXMsg _rxMsg)
{
switch(_rxMsg.eID.Fields.MsgType)
{
- case DATA_TYPE_MODBUS_COIL:
+ case PROTOCAN_MSGTYPE_MODBUS_COIL:
{
return ProtoCanMsgToModbusCoil(_rxMsg);
break;
}
- case DATA_TYPE_MODBUS_DISCRETE:
+ case PROTOCAN_MSGTYPE_MODBUS_DISCRETE:
{
return ProtoCanMsgToModbusDiscrete(_rxMsg);
break;
}
- case DATA_TYPE_MODBUS_HOLDING:
+ case PROTOCAN_MSGTYPE_MODBUS_HOLDING:
{
return ProtoCanMsgToModbusHolding(_rxMsg);
break;
}
- case DATA_TYPE_MODBUS_INPUT:
+ case PROTOCAN_MSGTYPE_MODBUS_INPUT:
{
return ProtoCanMsgToModbusInput(_rxMsg);
break;
}
default:
//ERROR
- return HAL_ERROR;
+ return PROTOCAN_ERROR;
break;
}
- return HAL_ERROR;
+ return PROTOCAN_ERROR;
}
/**
@@ -701,7 +706,7 @@ HAL_StatusTypeDef PROTOCAN_ModbusProcessing(struct RXMsg _rxMsg)
* @param _rxMsg Структура входящего сообщения RXMsg.
* @return HAL_StatusTypeDef Статус выполнения команды CAN (успех или ошибка).
*/
-__weak HAL_StatusTypeDef ProtoCanMsgToModbusCoil(struct RXMsg _rxMsg)
+__weak PROTOCAN_StatusTypeDef ProtoCanMsgToModbusCoil(struct RXMsg _rxMsg)
{
CAN_TxHeaderTypeDef TxHeader;
uint32_t TxMailBox = 0;
@@ -709,12 +714,12 @@ __weak HAL_StatusTypeDef ProtoCanMsgToModbusCoil(struct RXMsg _rxMsg)
TxHeader.IDE = CAN_ID_EXT;
TxHeader.TransmitGlobalTime = DISABLE;
TxHeader.RTR = CAN_RTR_DATA;
- extID tmp_eID;
+ ProtoCanId_t tmp_eID;
tmp_eID.BitAll = _rxMsg.eID.BitAll;
- tmp_eID.Fields.Route = ROUTE_SLAVE;
+ tmp_eID.Fields.Route = PROTOCAN_ROUTE_FROM_DEVICE;
TxHeader.ExtId = tmp_eID.BitAll;
TxHeader.DLC = 8;
- msgModbusType msg;
+ msgBodyModbusType msg;
msg.Body = _rxMsg.eID.Fields.MsgBody;
data[0] = 'M';
data[1] = 'C';
@@ -724,7 +729,7 @@ __weak HAL_StatusTypeDef ProtoCanMsgToModbusCoil(struct RXMsg _rxMsg)
data[5] = ' ';
data[6] = 'C';
data[7] = msg.Fields.RegCount;
- return HAL_CAN_AddTxMessage(_HCAN, &TxHeader, data, &TxMailBox);
+ return (PROTOCAN_StatusTypeDef)HAL_CAN_AddTxMessage(_HCAN, &TxHeader, data, &TxMailBox);
}
/**
@@ -733,7 +738,7 @@ __weak HAL_StatusTypeDef ProtoCanMsgToModbusCoil(struct RXMsg _rxMsg)
* @param _rxMsg Структура входящего сообщения RXMsg.
* @return HAL_StatusTypeDef Статус выполнения команды CAN (успех или ошибка).
*/
-__weak HAL_StatusTypeDef ProtoCanMsgToModbusDiscrete(struct RXMsg _rxMsg)
+__weak PROTOCAN_StatusTypeDef ProtoCanMsgToModbusDiscrete(struct RXMsg _rxMsg)
{
CAN_TxHeaderTypeDef TxHeader;
uint32_t TxMailBox = 0;
@@ -741,12 +746,12 @@ __weak HAL_StatusTypeDef ProtoCanMsgToModbusDiscrete(struct RXMsg _rxMsg)
TxHeader.IDE = CAN_ID_EXT;
TxHeader.TransmitGlobalTime = DISABLE;
TxHeader.RTR = CAN_RTR_DATA;
- extID tmp_eID;
+ ProtoCanId_t tmp_eID;
tmp_eID.BitAll = _rxMsg.eID.BitAll;
- tmp_eID.Fields.Route = ROUTE_SLAVE;
+ tmp_eID.Fields.Route = PROTOCAN_ROUTE_FROM_DEVICE;
TxHeader.ExtId = tmp_eID.BitAll;
TxHeader.DLC = 8;
- msgModbusType msg;
+ msgBodyModbusType msg;
msg.Body = _rxMsg.eID.Fields.MsgBody;
data[0] = 'M';
data[1] = 'D';
@@ -756,7 +761,7 @@ __weak HAL_StatusTypeDef ProtoCanMsgToModbusDiscrete(struct RXMsg _rxMsg)
data[5] = ' ';
data[6] = 'C';
data[7] = msg.Fields.RegCount;
- return HAL_CAN_AddTxMessage(_HCAN, &TxHeader, data, &TxMailBox);
+ return (PROTOCAN_StatusTypeDef)HAL_CAN_AddTxMessage(_HCAN, &TxHeader, data, &TxMailBox);
}
/**
@@ -765,7 +770,7 @@ __weak HAL_StatusTypeDef ProtoCanMsgToModbusDiscrete(struct RXMsg _rxMsg)
* @param _rxMsg Структура входящего сообщения RXMsg.
* @return HAL_StatusTypeDef Статус выполнения команды CAN (успех или ошибка).
*/
-__weak HAL_StatusTypeDef ProtoCanMsgToModbusHolding(struct RXMsg _rxMsg)
+__weak PROTOCAN_StatusTypeDef ProtoCanMsgToModbusHolding(struct RXMsg _rxMsg)
{
CAN_TxHeaderTypeDef TxHeader;
uint32_t TxMailBox = 0;
@@ -773,12 +778,12 @@ __weak HAL_StatusTypeDef ProtoCanMsgToModbusHolding(struct RXMsg _rxMsg)
TxHeader.IDE = CAN_ID_EXT;
TxHeader.TransmitGlobalTime = DISABLE;
TxHeader.RTR = CAN_RTR_DATA;
- extID tmp_eID;
+ ProtoCanId_t tmp_eID;
tmp_eID.BitAll = _rxMsg.eID.BitAll;
- tmp_eID.Fields.Route = ROUTE_SLAVE;
+ tmp_eID.Fields.Route = PROTOCAN_ROUTE_FROM_DEVICE;
TxHeader.ExtId = tmp_eID.BitAll;
TxHeader.DLC = 8;
- msgModbusType msg;
+ msgBodyModbusType msg;
msg.Body = _rxMsg.eID.Fields.MsgBody;
data[0] = 'M';
data[1] = 'H';
@@ -788,7 +793,7 @@ __weak HAL_StatusTypeDef ProtoCanMsgToModbusHolding(struct RXMsg _rxMsg)
data[5] = ' ';
data[6] = 'C';
data[7] = msg.Fields.RegCount;
- return HAL_CAN_AddTxMessage(_HCAN, &TxHeader, data, &TxMailBox);
+ return (PROTOCAN_StatusTypeDef)HAL_CAN_AddTxMessage(_HCAN, &TxHeader, data, &TxMailBox);
}
/**
@@ -797,7 +802,7 @@ __weak HAL_StatusTypeDef ProtoCanMsgToModbusHolding(struct RXMsg _rxMsg)
* @param _rxMsg Структура входящего сообщения RXMsg.
* @return HAL_StatusTypeDef Статус выполнения команды CAN (успех или ошибка).
*/
-__weak HAL_StatusTypeDef ProtoCanMsgToModbusInput(struct RXMsg _rxMsg)
+__weak PROTOCAN_StatusTypeDef ProtoCanMsgToModbusInput(struct RXMsg _rxMsg)
{
CAN_TxHeaderTypeDef TxHeader;
uint32_t TxMailBox = 0;
@@ -805,12 +810,12 @@ __weak HAL_StatusTypeDef ProtoCanMsgToModbusInput(struct RXMsg _rxMsg)
TxHeader.IDE = CAN_ID_EXT;
TxHeader.TransmitGlobalTime = DISABLE;
TxHeader.RTR = CAN_RTR_DATA;
- extID tmp_eID;
+ ProtoCanId_t tmp_eID;
tmp_eID.BitAll = _rxMsg.eID.BitAll;
- tmp_eID.Fields.Route = ROUTE_SLAVE;
+ tmp_eID.Fields.Route = PROTOCAN_ROUTE_FROM_DEVICE;
TxHeader.ExtId = tmp_eID.BitAll;
TxHeader.DLC = 8;
- msgModbusType msg;
+ msgBodyModbusType msg;
msg.Body = _rxMsg.eID.Fields.MsgBody;
data[0] = 'M';
data[1] = 'I';
@@ -820,7 +825,7 @@ __weak HAL_StatusTypeDef ProtoCanMsgToModbusInput(struct RXMsg _rxMsg)
data[5] = ' ';
data[6] = 'C';
data[7] = msg.Fields.RegCount;
- return HAL_CAN_AddTxMessage(_HCAN, &TxHeader, data, &TxMailBox);
+ return (PROTOCAN_StatusTypeDef)HAL_CAN_AddTxMessage(_HCAN, &TxHeader, data, &TxMailBox);
}
/**
@@ -829,7 +834,7 @@ __weak HAL_StatusTypeDef ProtoCanMsgToModbusInput(struct RXMsg _rxMsg)
* @param _rxMsg Структура входящего сообщения RXMsg, данными которого формируется ответ-ошибка.
* @return HAL_StatusTypeDef Статус выполнения команды CAN.
*/
-__weak HAL_StatusTypeDef CanRequestError(struct RXMsg _rxMsg)
+__weak PROTOCAN_StatusTypeDef CanRequestError(struct RXMsg _rxMsg)
{
CAN_TxHeaderTypeDef TxHeader;
uint32_t TxMailBox = 0;
@@ -837,17 +842,17 @@ __weak HAL_StatusTypeDef CanRequestError(struct RXMsg _rxMsg)
TxHeader.IDE = CAN_ID_EXT;
TxHeader.TransmitGlobalTime = DISABLE;
TxHeader.RTR = CAN_RTR_DATA;
- extID tmp_eID;
+ ProtoCanId_t tmp_eID;
tmp_eID.BitAll = _rxMsg.eID.BitAll;
- tmp_eID.Fields.Route = ROUTE_SLAVE;
- tmp_eID.Fields.MsgType = DATA_TYPE_ERROR;
- msgErrorType msg;
+ tmp_eID.Fields.Route = PROTOCAN_ROUTE_FROM_DEVICE;
+ tmp_eID.Fields.MsgType = PROTOCAN_MSGTYPE_ERROR;
+ msgBodyErrorType msg;
msg.Fields.ErrorCode = 0xFF;
msg.Fields.Info = 0;
tmp_eID.Fields.MsgBody = msg.Body;
TxHeader.ExtId = tmp_eID.BitAll;
TxHeader.DLC = 0;
- return HAL_CAN_AddTxMessage(_HCAN, &TxHeader, data, &TxMailBox);
+ return (PROTOCAN_StatusTypeDef)HAL_CAN_AddTxMessage(_HCAN, &TxHeader, data, &TxMailBox);
}
/**
@@ -860,7 +865,7 @@ __weak HAL_StatusTypeDef CanRequestError(struct RXMsg _rxMsg)
* @param tmp_DATA Указатель на массив данных, полученных из CAN.
* @param tmp_LastStep Индекс позиции в буфере, куда записывать сообщение.
*/
-void TakeRxMsgToBuffer(extID tmp_eID, uint32_t tmp_IDE, uint32_t tmp_RTR, uint32_t tmp_DLC, uint8_t *tmp_DATA, uint16_t tmp_LastStep)
+void TakeRxMsgToBuffer(ProtoCanId_t tmp_eID, uint32_t tmp_IDE, uint32_t tmp_RTR, uint32_t tmp_DLC, uint8_t *tmp_DATA, uint16_t tmp_LastStep)
{
rxMsg[tmp_LastStep].eID.BitAll = tmp_eID.BitAll;
rxMsg[tmp_LastStep].info.EXT = tmp_IDE;
@@ -888,19 +893,19 @@ void ProtoCanRxFifo0MsgPendingCallback(CAN_HandleTypeDef *hcan)
//Расширенный ID
if(RxHeader.IDE == CAN_ID_EXT)
{
- if(!((CAN_RX_BUFFER_SIZE + LastStep - (CurrentStep-1))&CAN_RX_BUFFER_SIZE))
+ if(!((PROTOCAN_RX_BUFFER_SIZE + LastStep - (CurrentStep-1))&PROTOCAN_RX_BUFFER_SIZE))
{
//Буффер переполнен
return;
}
- uint16_t tmp_LastStep = (uint16_t)(LastStep + 1) % CAN_RX_BUFFER_SIZE;
+ uint16_t tmp_LastStep = (uint16_t)(LastStep + 1) % PROTOCAN_RX_BUFFER_SIZE;
- extID ExtID_Of_RX_MSG;
+ ProtoCanId_t ExtID_Of_RX_MSG;
ExtID_Of_RX_MSG.BitAll = RxHeader.ExtId;
//Полученное сообщение - пульс устройств в сети
- if(ExtID_Of_RX_MSG.Fields.MsgType == DATA_TYPE_PULSE)
+ if(ExtID_Of_RX_MSG.Fields.MsgType == PROTOCAN_MSGTYPE_PULSE)
{
Device_on_the_Network[ExtID_Of_RX_MSG.Fields.DeviceType][ExtID_Of_RX_MSG.Fields.DeviceID].Status = ONLINE;
Device_on_the_Network[ExtID_Of_RX_MSG.Fields.DeviceType][ExtID_Of_RX_MSG.Fields.DeviceID].TimeFromLastPulse = 0;
@@ -923,14 +928,14 @@ void ProtoCanPulseCallback(TIM_HandleTypeDef *htim)
static unsigned PulseStage = 0;
CAN_TxHeaderTypeDef TxHeader;
uint32_t TxMailBox = 0;
- extID currentID;
+ ProtoCanId_t currentID;
currentID.BitAll = 0;
- currentID.Fields.MsgBody = 0;
- currentID.Fields.DeviceID = CURRENT_ID_DEVICE;
+ currentID.Fields.Priority = PROTOCAN_PRIORITY_STANDARD;
+ currentID.Fields.Route = PROTOCAN_ROUTE_FROM_DEVICE;
currentID.Fields.DeviceType = CURRENT_TYPE_DEVICE;
- currentID.Fields.MsgType = DATA_TYPE_PULSE;
- currentID.Fields.Route = ROUTE_SLAVE;
- currentID.Fields.Priority = PRIORITY_STANDARD;
+ currentID.Fields.DeviceID = CURRENT_ID_DEVICE;
+ currentID.Fields.MsgType = PROTOCAN_MSGTYPE_PULSE;
+ currentID.Fields.MsgBody = 0;
TxHeader.ExtId = currentID.BitAll;
uint8_t data[8];
TxHeader.IDE = CAN_ID_EXT;
@@ -988,52 +993,54 @@ void PROTOCAN_RTC_SYNC(uint8_t *data)
*/
void PROTOCAN_CONFIG_FILTER(uint8_t filterBank, uint32_t idFilter, uint32_t idMask)
{
- CAN_FilterTypeDef canFilterConfig;
- canFilterConfig.FilterBank = filterBank;
- canFilterConfig.FilterMode = CAN_FILTERMODE_IDMASK;
- canFilterConfig.FilterScale = CAN_FILTERSCALE_32BIT;
- canFilterConfig.FilterFIFOAssignment = CAN_RX_FIFO0;
- canFilterConfig.FilterActivation = ENABLE;
- canFilterConfig.SlaveStartFilterBank = 14;
+ CAN_FilterTypeDef canFilterConfig;
+ canFilterConfig.FilterBank = filterBank;
+ canFilterConfig.FilterMode = CAN_FILTERMODE_IDMASK;
+ canFilterConfig.FilterScale = CAN_FILTERSCALE_32BIT;
+ canFilterConfig.FilterFIFOAssignment = CAN_RX_FIFO0;
+ canFilterConfig.FilterActivation = ENABLE;
+ canFilterConfig.SlaveStartFilterBank = 14;
- // Разбиваем 32-битный ID и маску для фильтрации на High и Low 16 бит
- canFilterConfig.FilterIdHigh = (uint16_t)(((idFilter) >> 13)); // верхние 16 бит
- canFilterConfig.FilterIdLow = (uint16_t)((((idFilter) << 3)) | CAN_IDE_32); // низкие 16 бит,
- canFilterConfig.FilterMaskIdHigh = (uint16_t)(((idMask) >> 13));
- canFilterConfig.FilterMaskIdLow = (uint16_t)((((idMask) << 3)) | CAN_IDE_32);
+ #define CAN_IDE_32 0b00000100 // Для 32-х битного масштаба
+
+ // Разбиваем 32-битный ID и маску для фильтрации на High и Low 16 бит
+ canFilterConfig.FilterIdHigh = (uint16_t)(((idFilter) >> 13)); // верхние 16 бит
+ canFilterConfig.FilterIdLow = (uint16_t)((((idFilter) << 3)) | CAN_IDE_32); // низкие 16 бит,
+ canFilterConfig.FilterMaskIdHigh = (uint16_t)(((idMask) >> 13));
+ canFilterConfig.FilterMaskIdLow = (uint16_t)((((idMask) << 3)) | CAN_IDE_32);
- if(HAL_CAN_ConfigFilter(_HCAN, &canFilterConfig) != HAL_OK)
- {
- Error_Handler();
- }
+ if(HAL_CAN_ConfigFilter(_HCAN, &canFilterConfig) != HAL_OK)
+ {
+ Error_Handler();
+ }
}
-#define BIT27 (1UL << 27)
-#define BITS_20_23_MASK (0xFUL << 20) // 4 бита (20..23)
-#define BITS_24_26_MASK (0x7UL << 24) // 3 бита (24..26)
-
-uint32_t filter1_id = BIT27 | (CURRENT_TYPE_DEVICE << 24) | (CURRENT_ID_DEVICE << 20);
-uint32_t filter1_mask = BIT27 | BITS_24_26_MASK | BITS_20_23_MASK; // все проверяемые биты
-
-#define BITS_16_19_MASK (0xFUL << 16)
-
-uint32_t filter2_id = DATA_TYPE_BROADCAST << 16;
-uint32_t filter2_mask = BITS_16_19_MASK;
-
-uint32_t filter3_id = DATA_TYPE_PULSE << 16;
-uint32_t filter3_mask = BITS_16_19_MASK;
-
/**
* @brief Конфигурирует три фильтра CAN для различных типов сообщений.
*/
void PROTOCAN_FILTERS()
{
- // Первый фильтр: проверяем 20-27 биты, где 27-й всегда 1
- PROTOCAN_CONFIG_FILTER(0, filter1_id, filter1_mask);
+ #define BIT27 (1UL << 27)
+ #define BITS_20_23_MASK (0xFUL << 20) // 4 бита (20..23)
+ #define BITS_24_26_MASK (0x7UL << 24) // 3 бита (24..26)
+
+ uint32_t filter1_id = BIT27 | (CURRENT_TYPE_DEVICE << 24) | (CURRENT_ID_DEVICE << 20);
+ uint32_t filter1_mask = BIT27 | BITS_24_26_MASK | BITS_20_23_MASK; // все проверяемые биты
- // Второй фильтр: проверяем 16-19 биты, равны DATA_TYPE_BROADCASTE
- PROTOCAN_CONFIG_FILTER(1, filter2_id, filter2_mask);
+ #define BITS_16_19_MASK (0xFUL << 16)
- // Третий фильтр: проверяем 16-19 биты, равны DATA_TYPE_PULSE
- PROTOCAN_CONFIG_FILTER(2, filter3_id, filter3_mask);
+ uint32_t filter2_id = PROTOCAN_MSGTYPE_BROADCAST << 16;
+ uint32_t filter2_mask = BITS_16_19_MASK;
+
+ uint32_t filter3_id = PROTOCAN_MSGTYPE_PULSE << 16;
+ uint32_t filter3_mask = BITS_16_19_MASK;
+
+ // Первый фильтр: проверяем 20-27 биты, где 27-й всегда 1
+ PROTOCAN_CONFIG_FILTER(0, filter1_id, filter1_mask);
+
+ // Второй фильтр: проверяем 16-19 биты, равны PROTOCAN_MSGTYPE_BROADCASTE
+ PROTOCAN_CONFIG_FILTER(1, filter2_id, filter2_mask);
+
+ // Третий фильтр: проверяем 16-19 биты, равны PROTOCAN_MSGTYPE_PULSE
+ PROTOCAN_CONFIG_FILTER(2, filter3_id, filter3_mask);
}
diff --git a/Core/Src/tim.c b/Core/Src/tim.c
index bce7bc9..4a78080 100644
--- a/Core/Src/tim.c
+++ b/Core/Src/tim.c
@@ -21,7 +21,8 @@
#include "tim.h"
/* USER CODE BEGIN 0 */
-
+// TIM defines
+#define TIM_PROTOCAN_Prescaler 64000
/* USER CODE END 0 */
TIM_HandleTypeDef htim4;
diff --git a/MDK-ARM/F103C8T6.uvguix.Iurii b/MDK-ARM/F103C8T6.uvguix.Iurii
index 570bcee..0405429 100644
--- a/MDK-ARM/F103C8T6.uvguix.Iurii
+++ b/MDK-ARM/F103C8T6.uvguix.Iurii
@@ -28,17 +28,17 @@
38003
Registers
- 140 90
+ 140 100
346
Code Coverage
- 1010 160
+ 1010 309
204
Performance Analyzer
- 1170
+ 869 175 175 100
@@ -114,17 +114,17 @@
-1
- 60
- 229
- 1669
- 844
+ 185
+ 0
+ 1440
+ 969
0
2021
- 01000000040000000100000001000000010000000100000000000000020000000000000001000000010000000000000028000000280000000100000016000000020000000100000024443A5C576F726B5C4D43555C46313033433854365C436F72655C5372635C6D61696E2E6300000000066D61696E2E6300000000C5D4F200FFFFFFFF24443A5C576F726B5C4D43555C46313033433854365C436F72655C496E635C6D61696E2E6800000000066D61696E2E6800000000FFDC7800FFFFFFFF28443A5C576F726B5C4D43555C46313033433854365C436F72655C5372635C70726F746F63616E2E63000000000A70726F746F63616E2E6300000000BECEA100FFFFFFFF2C443A5C576F726B5C4D43555C46313033433854365C436F72655C5372635C73746D3332663178785F69742E63000000000E73746D3332663178785F69742E6300000000F0A0A100FFFFFFFF31443A5C576F726B5C4D43555C46313033433854365C436F72655C5372635C73746D3332663178785F68616C5F6D73702E63000000001373746D3332663178785F68616C5F6D73702E6300000000BCA8E100FFFFFFFF49443A5C576F726B5C4D43555C46313033433854365C447269766572735C53544D3332463178785F48414C5F4472697665725C5372635C73746D3332663178785F68616C5F63616E2E63000000001373746D3332663178785F68616C5F63616E2E63000000009CC1B600FFFFFFFF23443A5C576F726B5C4D43555C46313033433854365C436F72655C5372635C74696D2E63000000000574696D2E6300000000F7B88600FFFFFFFF23443A5C576F726B5C4D43555C46313033433854365C436F72655C5372635C7274632E6300000000057274632E6300000000D9ADC200FFFFFFFF45443A5C576F726B5C4D43555C46313033433854365C447269766572735C53544D3332463178785F48414C5F4472697665725C5372635C73746D3332663178785F68616C2E63000000000F73746D3332663178785F68616C2E6300000000A5C2D700FFFFFFFF23443A5C576F726B5C4D43555C46313033433854365C436F72655C5372635C63616E2E63000000000563616E2E6300000000B3A6BE00FFFFFFFF28443A5C576F726B5C4D43555C46313033433854365C436F72655C496E635C70726F746F63616E2E68000000000A70726F746F63616E2E6800000000EAD6A300FFFFFFFF32443A5C576F726B5C4D43555C46313033433854365C4D444B2D41524D5C737461727475705F73746D33326631303378622E730000000015737461727475705F73746D33326631303378622E7300000000F6FA7D00FFFFFFFF35443A5C576F726B5C4D43555C46313033433854365C447269766572735C434D5349535C496E636C7564655C636F72655F636D332E68000000000A636F72655F636D332E6800000000B5E99D00FFFFFFFF49443A5C576F726B5C4D43555C46313033433854365C447269766572735C53544D3332463178785F48414C5F4472697665725C5372635C73746D3332663178785F68616C5F74696D2E63000000001373746D3332663178785F68616C5F74696D2E63000000005FC3CF00FFFFFFFF4C443A5C576F726B5C4D43555C46313033433854365C447269766572735C53544D3332463178785F48414C5F4472697665725C5372635C73746D3332663178785F68616C5F74696D5F65782E63000000001673746D3332663178785F68616C5F74696D5F65782E6300000000C1838300FFFFFFFF49443A5C576F726B5C4D43555C46313033433854365C447269766572735C53544D3332463178785F48414C5F4472697665725C496E635C73746D3332663178785F68616C5F63616E2E68000000001373746D3332663178785F68616C5F63616E2E6800000000CACAD500FFFFFFFF4C443A5C576F726B5C4D43555C46313033433854365C447269766572735C434D5349535C4465766963655C53545C53544D3332463178785C496E636C7564655C73746D33326631303378622E68000000000D73746D33326631303378622E6800000000C5D4F200FFFFFFFF2B443A5C576F726B5C4D43555C46313033433854365C436F72655C5372635C63616E6572726F72626F782E63000000000D63616E6572726F72626F782E6300000000FFDC7800FFFFFFFF2B443A5C576F726B5C4D43555C46313033433854365C436F72655C496E635C63616E6572726F72626F782E68000000000D63616E6572726F72626F782E6800000000BECEA100FFFFFFFF49443A5C576F726B5C4D43555C46313033433854365C447269766572735C53544D3332463178785F48414C5F4472697665725C496E635C73746D3332663178785F68616C5F6465662E68000000001373746D3332663178785F68616C5F6465662E6800000000F0A0A100FFFFFFFF49443A5C576F726B5C4D43555C46313033433854365C447269766572735C53544D3332463178785F48414C5F4472697665725C496E635C73746D3332663178785F68616C5F74696D2E68000000001373746D3332663178785F68616C5F74696D2E6800000000BCA8E100FFFFFFFF27433A5C4B65696C5F76355C41524D5C41524D434C414E475C696E636C7564655C737464696F2E680000000007737464696F2E68000000009CC1B600FFFFFFFF0100000010000000C5D4F200FFDC7800BECEA100F0A0A100BCA8E1009CC1B600F7B88600D9ADC200A5C2D700B3A6BE00EAD6A300F6FA7D00B5E99D005FC3CF00C1838300CACAD500010000000000000002000000F40000006500000080070000E7030000
+ 010000000400000001000000010000000100000001000000000000000200000000000000010000000100000000000000280000002800000001000000160000000A0000000100000024443A5C576F726B5C4D43555C46313033433854365C436F72655C5372635C6D61696E2E6300000000066D61696E2E6300000000C5D4F200FFFFFFFF24443A5C576F726B5C4D43555C46313033433854365C436F72655C496E635C6D61696E2E6800000000066D61696E2E6800000000FFDC7800FFFFFFFF28443A5C576F726B5C4D43555C46313033433854365C436F72655C5372635C70726F746F63616E2E63000000000A70726F746F63616E2E6300000000BECEA100FFFFFFFF2C443A5C576F726B5C4D43555C46313033433854365C436F72655C5372635C73746D3332663178785F69742E63000000000E73746D3332663178785F69742E6300000000F0A0A100FFFFFFFF31443A5C576F726B5C4D43555C46313033433854365C436F72655C5372635C73746D3332663178785F68616C5F6D73702E63000000001373746D3332663178785F68616C5F6D73702E6300000000BCA8E100FFFFFFFF49443A5C576F726B5C4D43555C46313033433854365C447269766572735C53544D3332463178785F48414C5F4472697665725C5372635C73746D3332663178785F68616C5F63616E2E63000000001373746D3332663178785F68616C5F63616E2E63000000009CC1B600FFFFFFFF23443A5C576F726B5C4D43555C46313033433854365C436F72655C5372635C74696D2E63000000000574696D2E6300000000F7B88600FFFFFFFF23443A5C576F726B5C4D43555C46313033433854365C436F72655C5372635C7274632E6300000000057274632E6300000000D9ADC200FFFFFFFF45443A5C576F726B5C4D43555C46313033433854365C447269766572735C53544D3332463178785F48414C5F4472697665725C5372635C73746D3332663178785F68616C2E63000000000F73746D3332663178785F68616C2E6300000000A5C2D700FFFFFFFF23443A5C576F726B5C4D43555C46313033433854365C436F72655C5372635C63616E2E63000000000563616E2E6300000000B3A6BE00FFFFFFFF28443A5C576F726B5C4D43555C46313033433854365C436F72655C496E635C70726F746F63616E2E68000000000A70726F746F63616E2E6800000000EAD6A300FFFFFFFF32443A5C576F726B5C4D43555C46313033433854365C4D444B2D41524D5C737461727475705F73746D33326631303378622E730000000015737461727475705F73746D33326631303378622E7300000000F6FA7D00FFFFFFFF35443A5C576F726B5C4D43555C46313033433854365C447269766572735C434D5349535C496E636C7564655C636F72655F636D332E68000000000A636F72655F636D332E6800000000B5E99D00FFFFFFFF49443A5C576F726B5C4D43555C46313033433854365C447269766572735C53544D3332463178785F48414C5F4472697665725C5372635C73746D3332663178785F68616C5F74696D2E63000000001373746D3332663178785F68616C5F74696D2E63000000005FC3CF00FFFFFFFF4C443A5C576F726B5C4D43555C46313033433854365C447269766572735C53544D3332463178785F48414C5F4472697665725C5372635C73746D3332663178785F68616C5F74696D5F65782E63000000001673746D3332663178785F68616C5F74696D5F65782E6300000000C1838300FFFFFFFF49443A5C576F726B5C4D43555C46313033433854365C447269766572735C53544D3332463178785F48414C5F4472697665725C496E635C73746D3332663178785F68616C5F63616E2E68000000001373746D3332663178785F68616C5F63616E2E6800000000CACAD500FFFFFFFF4C443A5C576F726B5C4D43555C46313033433854365C447269766572735C434D5349535C4465766963655C53545C53544D3332463178785C496E636C7564655C73746D33326631303378622E68000000000D73746D33326631303378622E6800000000C5D4F200FFFFFFFF2B443A5C576F726B5C4D43555C46313033433854365C436F72655C5372635C63616E6572726F72626F782E63000000000D63616E6572726F72626F782E6300000000FFDC7800FFFFFFFF2B443A5C576F726B5C4D43555C46313033433854365C436F72655C496E635C63616E6572726F72626F782E68000000000D63616E6572726F72626F782E6800000000BECEA100FFFFFFFF49443A5C576F726B5C4D43555C46313033433854365C447269766572735C53544D3332463178785F48414C5F4472697665725C496E635C73746D3332663178785F68616C5F6465662E68000000001373746D3332663178785F68616C5F6465662E6800000000F0A0A100FFFFFFFF49443A5C576F726B5C4D43555C46313033433854365C447269766572735C53544D3332463178785F48414C5F4472697665725C496E635C73746D3332663178785F68616C5F74696D2E68000000001373746D3332663178785F68616C5F74696D2E6800000000BCA8E100FFFFFFFF27433A5C4B65696C5F76355C41524D5C41524D434C414E475C696E636C7564655C737464696F2E680000000007737464696F2E68000000009CC1B600FFFFFFFF0100000010000000C5D4F200FFDC7800BECEA100F0A0A100BCA8E1009CC1B600F7B88600D9ADC200A5C2D700B3A6BE00EAD6A300F6FA7D00B5E99D005FC3CF00C1838300CACAD5000100000000000000020000000F0100006500000080070000E7030000
@@ -147,7 +147,7 @@
16
- 74F9FFFF65000000FCFFFFFFFD030000
+ F4000000650000007C070000FD030000
@@ -163,7 +163,7 @@
0
16
- 0300000066000000ED000000B8030000
+ 030000006600000008010000B8030000
16
@@ -183,7 +183,7 @@
0
16
- 0300000066000000ED000000B8030000
+ 030000006600000008010000B8030000
16
@@ -463,7 +463,7 @@
0
16
- 0300000066000000ED000000B8030000
+ 030000006600000008010000B8030000
16
@@ -483,7 +483,7 @@
0
16
- 0300000066000000ED000000B8030000
+ 030000006600000008010000B8030000
16
@@ -1163,7 +1163,7 @@
0
16
- 0300000066000000ED000000B8030000
+ 030000006600000008010000B8030000
16
@@ -1812,14 +1812,14 @@
3315
- 000000000B000000000000000010000000000000FFFFFFFFFFFFFFFF7C0700004F00000080070000E7030000000000000200000004000000010000000000000000000000FFFFFFFF05000000C7000000B4010000D2010000CF01000077940000FFFF02000B004354616262656450616E65001000000000000074F9FFFF65000000FCFFFFFFFD030000F40000004F0000007C070000E70300000000000040820046050000000D46696E6420496E2046696C657300000000C700000001000000FFFFFFFFFFFFFFFF0A4572726F72204C69737400000000B401000001000000FFFFFFFFFFFFFFFF0E536F757263652042726F7773657200000000D201000001000000FFFFFFFFFFFFFFFF0E416C6C205265666572656E63657300000000CF01000001000000FFFFFFFFFFFFFFFF0742726F77736572000000007794000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFC700000001000000FFFFFFFFC7000000000000000020000000000000FFFFFFFFFFFFFFFFF4000000DF00000090050000E3000000000000000100000004000000010000000000000000000000FFFFFFFF08000000CB00000057010000CC000000F08B00005A01000079070000D6010000458900000180002000000000000074F9FFFF6500000010FEFFFFF5000000F40000004F00000090050000DF0000000000000040280046080000000B446973617373656D626C7900000000CB00000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A6572000000005701000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A657200000000CC00000001000000FFFFFFFFFFFFFFFF0E4C6F67696320416E616C797A657200000000F08B000001000000FFFFFFFFFFFFFFFF0D436F646520436F766572616765000000005A01000001000000FFFFFFFFFFFFFFFF11496E737472756374696F6E205472616365000000007907000001000000FFFFFFFFFFFFFFFF0F53797374656D20416E616C797A657200000000D601000001000000FFFFFFFFFFFFFFFF104576656E742053746174697374696373000000004589000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFCB00000001000000FFFFFFFFCB000000000000000040000000000000FFFFFFFFFFFFFFFF9C0400004F000000A00400002B020000000000000200000004000000010000000000000000000000FFFFFFFF2B000000E2050000CA0900002D8C00002E8C00002F8C0000308C0000318C0000328C0000338C0000348C0000358C0000368C0000378C0000388C0000398C00003A8C00003B8C00003C8C00003D8C00003E8C00003F8C0000408C0000418C000050C3000051C3000052C3000053C3000054C3000055C3000056C3000057C3000058C3000059C300005AC300005BC300005CC300005DC300005EC300005FC3000060C3000061C3000062C3000063C300000180004000000000000020FDFFFF6500000010FEFFFF41020000A00400004F000000900500002B02000000000000404100462B0000000753796D626F6C7300000000E205000001000000FFFFFFFFFFFFFFFF0A5472616365204461746100000000CA09000001000000FFFFFFFFFFFFFFFF00000000002D8C000001000000FFFFFFFFFFFFFFFF00000000002E8C000001000000FFFFFFFFFFFFFFFF00000000002F8C000001000000FFFFFFFFFFFFFFFF0000000000308C000001000000FFFFFFFFFFFFFFFF0000000000318C000001000000FFFFFFFFFFFFFFFF0000000000328C000001000000FFFFFFFFFFFFFFFF0000000000338C000001000000FFFFFFFFFFFFFFFF0000000000348C000001000000FFFFFFFFFFFFFFFF0000000000358C000001000000FFFFFFFFFFFFFFFF0000000000368C000001000000FFFFFFFFFFFFFFFF0000000000378C000001000000FFFFFFFFFFFFFFFF0000000000388C000001000000FFFFFFFFFFFFFFFF0000000000398C000001000000FFFFFFFFFFFFFFFF00000000003A8C000001000000FFFFFFFFFFFFFFFF00000000003B8C000001000000FFFFFFFFFFFFFFFF00000000003C8C000001000000FFFFFFFFFFFFFFFF00000000003D8C000001000000FFFFFFFFFFFFFFFF00000000003E8C000001000000FFFFFFFFFFFFFFFF00000000003F8C000001000000FFFFFFFFFFFFFFFF0000000000408C000001000000FFFFFFFFFFFFFFFF0000000000418C000001000000FFFFFFFFFFFFFFFF000000000050C3000001000000FFFFFFFFFFFFFFFF000000000051C3000001000000FFFFFFFFFFFFFFFF000000000052C3000001000000FFFFFFFFFFFFFFFF000000000053C3000001000000FFFFFFFFFFFFFFFF000000000054C3000001000000FFFFFFFFFFFFFFFF000000000055C3000001000000FFFFFFFFFFFFFFFF000000000056C3000001000000FFFFFFFFFFFFFFFF000000000057C3000001000000FFFFFFFFFFFFFFFF000000000058C3000001000000FFFFFFFFFFFFFFFF000000000059C3000001000000FFFFFFFFFFFFFFFF00000000005AC3000001000000FFFFFFFFFFFFFFFF00000000005BC3000001000000FFFFFFFFFFFFFFFF00000000005CC3000001000000FFFFFFFFFFFFFFFF00000000005DC3000001000000FFFFFFFFFFFFFFFF00000000005EC3000001000000FFFFFFFFFFFFFFFF00000000005FC3000001000000FFFFFFFFFFFFFFFF000000000060C3000001000000FFFFFFFFFFFFFFFF000000000061C3000001000000FFFFFFFFFFFFFFFF000000000062C3000001000000FFFFFFFFFFFFFFFF000000000063C3000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFE205000001000000FFFFFFFFE2050000000000000010000001000000FFFFFFFFFFFFFFFFF00000004F000000F4000000D1030000010000000200001004000000010000000000000000000000FFFFFFFF05000000ED0300006D000000C3000000C4000000739400000180001000000100000080F8FFFF6500000070F9FFFFE7030000000000004F000000F0000000D10300000000000040410056050000000750726F6A65637401000000ED03000001000000FFFFFFFFFFFFFFFF05426F6F6B73010000006D00000001000000FFFFFFFFFFFFFFFF0946756E6374696F6E7301000000C300000001000000FFFFFFFFFFFFFFFF0954656D706C6174657301000000C400000001000000FFFFFFFFFFFFFFFF09526567697374657273000000007394000001000000FFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000001000000FFFFFFFFED03000001000000FFFFFFFFED030000000000000080000000000000FFFFFFFFFFFFFFFF0000000017020000900500001B02000000000000010000000400000001000000000000000000000000000000000000000000000001000000C6000000FFFFFFFF0F0000008F070000930700009407000095070000960700009007000091070000B5010000B801000038030000B9050000BA050000BB050000BC050000CB0900000180008000000000000080F8FFFF3102000010FEFFFFD5020000000000001B02000090050000BF02000000000000404100460F0000001343616C6C20537461636B202B204C6F63616C73000000008F07000001000000FFFFFFFFFFFFFFFF0755415254202331000000009307000001000000FFFFFFFFFFFFFFFF0755415254202332000000009407000001000000FFFFFFFFFFFFFFFF0755415254202333000000009507000001000000FFFFFFFFFFFFFFFF15446562756720287072696E74662920566965776572000000009607000001000000FFFFFFFFFFFFFFFF0757617463682031000000009007000001000000FFFFFFFFFFFFFFFF0757617463682032000000009107000001000000FFFFFFFFFFFFFFFF10547261636520457863657074696F6E7300000000B501000001000000FFFFFFFFFFFFFFFF0E4576656E7420436F756E7465727300000000B801000001000000FFFFFFFFFFFFFFFF09554C494E4B706C7573000000003803000001000000FFFFFFFFFFFFFFFF084D656D6F7279203100000000B905000001000000FFFFFFFFFFFFFFFF084D656D6F7279203200000000BA05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203300000000BB05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203400000000BC05000001000000FFFFFFFFFFFFFFFF105472616365204E617669676174696F6E00000000CB09000001000000FFFFFFFFFFFFFFFFFFFFFFFF0000000001000000000000000000000001000000FFFFFFFFC80200001B020000CC020000BF02000000000000020000000400000000000000000000000000000000000000000000000000000002000000C6000000FFFFFFFF8F07000001000000FFFFFFFF8F07000001000000C60000000000000001000000C5000000008000000100000000000000E7030000800700005C04000001000000010000000100000000000000
+ 000000000B000000000000000010000000000000FFFFFFFFFFFFFFFF7C0700004F00000080070000E7030000000000000200000004000000010000000000000000000000FFFFFFFF05000000C7000000B4010000D2010000CF01000077940000FFFF02000B004354616262656450616E650010000000000000F4000000650000007C070000FD030000F40000004F0000007C070000E70300000000000040820046050000000D46696E6420496E2046696C657300000000C700000001000000FFFFFFFFFFFFFFFF0A4572726F72204C69737400000000B401000001000000FFFFFFFFFFFFFFFF0E536F757263652042726F7773657200000000D201000001000000FFFFFFFFFFFFFFFF0E416C6C205265666572656E63657300000000CF01000001000000FFFFFFFFFFFFFFFF0742726F77736572000000007794000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFC700000001000000FFFFFFFFC7000000000000000020000000000000FFFFFFFFFFFFFFFFF4000000DF00000090050000E3000000000000000100000004000000010000000000000000000000FFFFFFFF08000000CB00000057010000CC000000F08B00005A01000079070000D60100004589000001800020000000000000F40000006500000090050000F5000000F40000004F00000090050000DF0000000000000040280046080000000B446973617373656D626C7900000000CB00000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A6572000000005701000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A657200000000CC00000001000000FFFFFFFFFFFFFFFF0E4C6F67696320416E616C797A657200000000F08B000001000000FFFFFFFFFFFFFFFF0D436F646520436F766572616765000000005A01000001000000FFFFFFFFFFFFFFFF11496E737472756374696F6E205472616365000000007907000001000000FFFFFFFFFFFFFFFF0F53797374656D20416E616C797A657200000000D601000001000000FFFFFFFFFFFFFFFF104576656E742053746174697374696373000000004589000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFCB00000001000000FFFFFFFFCB000000000000000040000000000000FFFFFFFFFFFFFFFF9C0400004F000000A00400002B020000000000000200000004000000010000000000000000000000FFFFFFFF2B000000E2050000CA0900002D8C00002E8C00002F8C0000308C0000318C0000328C0000338C0000348C0000358C0000368C0000378C0000388C0000398C00003A8C00003B8C00003C8C00003D8C00003E8C00003F8C0000408C0000418C000050C3000051C3000052C3000053C3000054C3000055C3000056C3000057C3000058C3000059C300005AC300005BC300005CC300005DC300005EC300005FC3000060C3000061C3000062C3000063C3000001800040000000000000A0040000650000009005000041020000A00400004F000000900500002B02000000000000404100462B0000000753796D626F6C7300000000E205000001000000FFFFFFFFFFFFFFFF0A5472616365204461746100000000CA09000001000000FFFFFFFFFFFFFFFF00000000002D8C000001000000FFFFFFFFFFFFFFFF00000000002E8C000001000000FFFFFFFFFFFFFFFF00000000002F8C000001000000FFFFFFFFFFFFFFFF0000000000308C000001000000FFFFFFFFFFFFFFFF0000000000318C000001000000FFFFFFFFFFFFFFFF0000000000328C000001000000FFFFFFFFFFFFFFFF0000000000338C000001000000FFFFFFFFFFFFFFFF0000000000348C000001000000FFFFFFFFFFFFFFFF0000000000358C000001000000FFFFFFFFFFFFFFFF0000000000368C000001000000FFFFFFFFFFFFFFFF0000000000378C000001000000FFFFFFFFFFFFFFFF0000000000388C000001000000FFFFFFFFFFFFFFFF0000000000398C000001000000FFFFFFFFFFFFFFFF00000000003A8C000001000000FFFFFFFFFFFFFFFF00000000003B8C000001000000FFFFFFFFFFFFFFFF00000000003C8C000001000000FFFFFFFFFFFFFFFF00000000003D8C000001000000FFFFFFFFFFFFFFFF00000000003E8C000001000000FFFFFFFFFFFFFFFF00000000003F8C000001000000FFFFFFFFFFFFFFFF0000000000408C000001000000FFFFFFFFFFFFFFFF0000000000418C000001000000FFFFFFFFFFFFFFFF000000000050C3000001000000FFFFFFFFFFFFFFFF000000000051C3000001000000FFFFFFFFFFFFFFFF000000000052C3000001000000FFFFFFFFFFFFFFFF000000000053C3000001000000FFFFFFFFFFFFFFFF000000000054C3000001000000FFFFFFFFFFFFFFFF000000000055C3000001000000FFFFFFFFFFFFFFFF000000000056C3000001000000FFFFFFFFFFFFFFFF000000000057C3000001000000FFFFFFFFFFFFFFFF000000000058C3000001000000FFFFFFFFFFFFFFFF000000000059C3000001000000FFFFFFFFFFFFFFFF00000000005AC3000001000000FFFFFFFFFFFFFFFF00000000005BC3000001000000FFFFFFFFFFFFFFFF00000000005CC3000001000000FFFFFFFFFFFFFFFF00000000005DC3000001000000FFFFFFFFFFFFFFFF00000000005EC3000001000000FFFFFFFFFFFFFFFF00000000005FC3000001000000FFFFFFFFFFFFFFFF000000000060C3000001000000FFFFFFFFFFFFFFFF000000000061C3000001000000FFFFFFFFFFFFFFFF000000000062C3000001000000FFFFFFFFFFFFFFFF000000000063C3000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFE205000001000000FFFFFFFFE2050000000000000010000001000000FFFFFFFFFFFFFFFF0B0100004F0000000F010000D10300000100000002000010040000000100000076FFFFFFEB060000FFFFFFFF05000000ED0300006D000000C3000000C4000000739400000180001000000100000000000000650000000B010000E7030000000000004F0000000B010000D10300000000000040410056050000000750726F6A65637401000000ED03000001000000FFFFFFFFFFFFFFFF05426F6F6B73010000006D00000001000000FFFFFFFFFFFFFFFF0946756E6374696F6E7301000000C300000001000000FFFFFFFFFFFFFFFF0954656D706C6174657301000000C400000001000000FFFFFFFFFFFFFFFF09526567697374657273000000007394000001000000FFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000001000000FFFFFFFFED03000001000000FFFFFFFFED030000000000000080000000000000FFFFFFFFFFFFFFFF0000000017020000900500001B02000000000000010000000400000001000000000000000000000000000000000000000000000001000000C6000000FFFFFFFF0F0000008F070000930700009407000095070000960700009007000091070000B5010000B801000038030000B9050000BA050000BB050000BC050000CB09000001800080000000000000000000003102000090050000D5020000000000001B02000090050000BF02000000000000404100460F0000001343616C6C20537461636B202B204C6F63616C73000000008F07000001000000FFFFFFFFFFFFFFFF0755415254202331000000009307000001000000FFFFFFFFFFFFFFFF0755415254202332000000009407000001000000FFFFFFFFFFFFFFFF0755415254202333000000009507000001000000FFFFFFFFFFFFFFFF15446562756720287072696E74662920566965776572000000009607000001000000FFFFFFFFFFFFFFFF0757617463682031000000009007000001000000FFFFFFFFFFFFFFFF0757617463682032000000009107000001000000FFFFFFFFFFFFFFFF10547261636520457863657074696F6E7300000000B501000001000000FFFFFFFFFFFFFFFF0E4576656E7420436F756E7465727300000000B801000001000000FFFFFFFFFFFFFFFF09554C494E4B706C7573000000003803000001000000FFFFFFFFFFFFFFFF084D656D6F7279203100000000B905000001000000FFFFFFFFFFFFFFFF084D656D6F7279203200000000BA05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203300000000BB05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203400000000BC05000001000000FFFFFFFFFFFFFFFF105472616365204E617669676174696F6E00000000CB09000001000000FFFFFFFFFFFFFFFFFFFFFFFF0000000001000000000000000000000001000000FFFFFFFFC80200001B020000CC020000BF02000000000000020000000400000000000000000000000000000000000000000000000000000002000000C6000000FFFFFFFF8F07000001000000FFFFFFFF8F07000001000000C60000000000000001000000C5000000008000000100000000000000E7030000800700005C04000001000000010000000100000000000000
59392
File
- 2968
- 00200000010000002800FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000000000000000000000000000000000000000100000001000000018001E100000000000001000000000000000000000000000000000100000001000000018003E1000000000000020000000000000000000000000000000001000000010000000180CD7F0000000002000300000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018023E100000000040004000000000000000000000000000000000100000001000000018022E100000000040005000000000000000000000000000000000100000001000000018025E10000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001802BE10000000000000700000000000000000000000000000000010000000100000001802CE10000000004000800000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001807A8A0000000000000900000000000000000000000000000000010000000100000001807B8A0000000004000A00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180D3B00000000000000B000000000000000000000000000000000100000001000000018015B10000000004000C0000000000000000000000000000000001000000010000000180F4B00000000004000D000000000000000000000000000000000100000001000000018036B10000000004000E00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FF88000000000400460000000000000000000000000000000001000000010000000180FE880000000004004500000000000000000000000000000000010000000100000001800B810000000004001300000000000000000000000000000000010000000100000001800C810000000004001400000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180F0880000020000000F000000000000000000000000000000000100000001000000FFFF0100120043555646696E64436F6D626F427574746F6EE8030000000000000000000000000000000000000000000000010000000100000096000000020020500000000012554152545F48616E646C65547970654465669600000000000000140012554152545F48616E646C65547970654465660E7374646F75745F707574636861720C49544D5F53656E64436861722350524F544F43414E5F47656E6572616C4164647265737353706163655F416E73776572055F4854494D1D48414C5F54494D5F506572696F64456C617073656443616C6C6261636B0C43616E52657175657374546F09524551554553544552055F4843414E2148414C5F43414E5F52784669666F304D736750656E64696E6743616C6C6261636B0863616C6C6261636B0C43414E5F52585F4649464F300C43414E5F49545F4552524F520E43414E5F496E74657272757074731A48414C5F43414E5F526567697374657243616C6C6261636B28290852656769737465721757616B65557046726F6D52784D736743616C6C6261636B0E43414E5F4572726F725F436F64651548414C5F43414E5F4572726F7243616C6C6261636B037278660000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000018024E10000000000001100000000000000000000000000000000010000000100000001800A810000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E2280000002000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B46350000000000000000000000000100000001000000000000000000000001000000020021802280000000000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B4635000000000000000000000000010000000100000000000000000000000100000000002180E0010000000000007500000021456E65726779204D6561737572656D656E742026776974686F75742044656275670000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C488000000000000160000000000000000000000000000000001000000010000000180C988000000000400180000000000000000000000000000000001000000010000000180C788000000000000190000000000000000000000000000000001000000010000002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000003002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000000002180E50100000000000078000000264B696C6C20416C6C20427265616B706F696E747320696E204163746976652050726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180E601000000000000790000002F4B696C6C20416C6C20427265616B706F696E747320696E204D756C74692D50726F6A65637420576F726B73706163650000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000021804C010000020001001A0000000F2650726F6A6563742057696E646F77000000000000000000000000010000000100000000000000000000000100000008002180DD880000000000001A0000000750726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180DC8B0000000000003A00000005426F6F6B73000000000000000000000000010000000100000000000000000000000100000000002180E18B0000000000003B0000000946756E6374696F6E73000000000000000000000000010000000100000000000000000000000100000000002180E28B000000000000400000000954656D706C6174657300000000000000000000000001000000010000000000000000000000010000000000218018890000000000003D0000000E536F757263652042726F777365720000000000000000000000000100000001000000000000000000000001000000000021800000000000000400FFFFFFFF00000000000000000001000000000000000100000000000000000000000100000000002180D988000000000000390000000C4275696C64204F7574707574000000000000000000000000010000000100000000000000000000000100000000002180E38B000000000000410000000B46696E64204F75747075740000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FB7F0000000000001B000000000000000000000000000000000100000001000000000000000446696C65C6030000
+ 2928
+ 00200000010000002800FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000000000000000000000000000000000000000100000001000000018001E100000000000001000000000000000000000000000000000100000001000000018003E1000000000000020000000000000000000000000000000001000000010000000180CD7F0000000002000300000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018023E100000000040004000000000000000000000000000000000100000001000000018022E100000000040005000000000000000000000000000000000100000001000000018025E10000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001802BE10000000000000700000000000000000000000000000000010000000100000001802CE10000000004000800000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001807A8A0000000000000900000000000000000000000000000000010000000100000001807B8A0000000000000A00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180D3B00000000000000B000000000000000000000000000000000100000001000000018015B10000000004000C0000000000000000000000000000000001000000010000000180F4B00000000004000D000000000000000000000000000000000100000001000000018036B10000000004000E00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FF88000000000400460000000000000000000000000000000001000000010000000180FE880000000004004500000000000000000000000000000000010000000100000001800B810000000004001300000000000000000000000000000000010000000100000001800C810000000004001400000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180F0880000020000000F000000000000000000000000000000000100000001000000FFFF0100120043555646696E64436F6D626F427574746F6EE803000000000000000000000000000000000000000000000001000000010000009600000002002050000000000C50726F746F43616E49645F74960000000000000012000C50726F746F43616E49645F7404646174610D70726F746F43616E44617461200C70726F746F43616E446174610B70726F746F43616E4964200A70726F746F43616E49641243414E5F52585F4255464645525F53495A4506545F73656E73134E4F4E4558495354454E545F454C454D454E54154D4F444255535F53454354494F4E5F46494C544552134D4F444255535F53454354494F4E5F4D41534B18434F554E545F4F465F4D4F444255535F53454354494F4E530A43414E5F4944455F33322050524F544F43414E5F46494C5445525F444154415F545950455F46494C5445520565787449442050726F746F43616E4D7367546F47656E6572616C4164647265737353706163652350524F544F43414E5F47656E6572616C4164647265737353706163655F416E737765720647656E657261000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000018024E10000000000001100000000000000000000000000000000010000000100000001800A810000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E2280000002000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B46350000000000000000000000000100000001000000000000000000000001000000020021802280000000000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B4635000000000000000000000000010000000100000000000000000000000100000000002180E0010000000000007500000021456E65726779204D6561737572656D656E742026776974686F75742044656275670000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C488000000000000160000000000000000000000000000000001000000010000000180C988000000000400180000000000000000000000000000000001000000010000000180C788000000000000190000000000000000000000000000000001000000010000002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000003002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000000002180E50100000000000078000000264B696C6C20416C6C20427265616B706F696E747320696E204163746976652050726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180E601000000000000790000002F4B696C6C20416C6C20427265616B706F696E747320696E204D756C74692D50726F6A65637420576F726B73706163650000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000021804C010000020001001A0000000F2650726F6A6563742057696E646F77000000000000000000000000010000000100000000000000000000000100000008002180DD880000000000001A0000000750726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180DC8B0000000000003A00000005426F6F6B73000000000000000000000000010000000100000000000000000000000100000000002180E18B0000000000003B0000000946756E6374696F6E73000000000000000000000000010000000100000000000000000000000100000000002180E28B000000000000400000000954656D706C6174657300000000000000000000000001000000010000000000000000000000010000000000218018890000000000003D0000000E536F757263652042726F777365720000000000000000000000000100000001000000000000000000000001000000000021800000000000000400FFFFFFFF00000000000000000001000000000000000100000000000000000000000100000000002180D988000000000000390000000C4275696C64204F7574707574000000000000000000000000010000000100000000000000000000000100000000002180E38B000000000000410000000B46696E64204F75747075740000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FB7F0000000000001B000000000000000000000000000000000100000001000000000000000446696C65C6030000
1423
@@ -1835,7 +1835,7 @@
Build
976
- 00200000010000001000FFFF01001100434D4643546F6F6C426172427574746F6ECF7F0000000000001C0000000000000000000000000000000001000000010000000180D07F0000000000001D000000000000000000000000000000000100000001000000018030800000000000001E000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6EC7040000000000006A0000000C4261746368204275696C2664000000000000000000000000010000000100000000000000000000000100000004000580C7040000000000006A0000000C4261746368204275696C266400000000000000000000000001000000010000000000000000000000010000000000058046070000000000006B0000000D42617463682052656275696C640000000000000000000000000100000001000000000000000000000001000000000005804707000000000000FFFFFFFF0B426174636820436C65616E0100000000000000000000000100000001000000000000000000000001000000000005809E8A0000000000001F0000000F4261746326682053657475702E2E2E000000000000000000000000010000000100000000000000000000000100000000000180D17F0000000004002000000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001804C8A0000000000002100000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001900434D4643546F6F6C426172436F6D626F426F78427574746F6EBA000000000000000000000000000000000000000000000000010000000100000096000000030020500000000008463130334338543696000000000000000100084631303343385436000000000180EB880000000000002200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C07F000000000000230000000000000000000000000000000001000000010000000180B08A000000000400240000000000000000000000000000000001000000010000000180A8010000000000004E00000000000000000000000000000000010000000100000001807202000000000000530000000000000000000000000000000001000000010000000180BE010000000000005000000000000000000000000000000000010000000100000000000000054275696C64DC010000
+ 00200000010000001000FFFF01001100434D4643546F6F6C426172427574746F6ECF7F0000000004001C0000000000000000000000000000000001000000010000000180D07F0000000000001D000000000000000000000000000000000100000001000000018030800000000000001E000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6EC7040000000000006A0000000C4261746368204275696C2664000000000000000000000000010000000100000000000000000000000100000004000580C7040000000000006A0000000C4261746368204275696C266400000000000000000000000001000000010000000000000000000000010000000000058046070000000000006B0000000D42617463682052656275696C640000000000000000000000000100000001000000000000000000000001000000000005804707000000000000FFFFFFFF0B426174636820436C65616E0100000000000000010000000000000001000000000000000000000001000000000005809E8A0000000000001F0000000F4261746326682053657475702E2E2E000000000000000000000000010000000100000000000000000000000100000000000180D17F0000000004002000000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001804C8A0000000000002100000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001900434D4643546F6F6C426172436F6D626F426F78427574746F6EBA000000000000000000000000000000000000000000000000010000000100000096000000030020500000000008463130334338543696000000000000000100084631303343385436000000000180EB880000000000002200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C07F000000000000230000000000000000000000000000000001000000010000000180B08A000000000400240000000000000000000000000000000001000000010000000180A8010000000000004E00000000000000000000000000000000010000000100000001807202000000000000530000000000000000000000000000000001000000010000000180BE010000000000005000000000000000000000000000000000010000000100000000000000054275696C64DC010000
583
@@ -1851,7 +1851,7 @@
Debug
2373
- 00200000000000001900FFFF01001100434D4643546F6F6C426172427574746F6ECC880000000000002500000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018017800000000000002600000000000000000000000000000000010000000100000001801D800000000000002700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001801A800000000000002800000000000000000000000000000000010000000100000001801B80000000000000290000000000000000000000000000000001000000010000000180E57F0000000000002A00000000000000000000000000000000010000000100000001801C800000000000002B00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018000890000000000002C00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180E48B0000000000002D0000000000000000000000000000000001000000010000000180F07F0000000000002E0000000000000000000000000000000001000000010000000180E8880000000000003700000000000000000000000000000000010000000100000001803B010000000000002F0000000000000000000000000000000001000000010000000180BB8A00000000000030000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E0E01000000000000310000000D57617463682057696E646F7773000000000000000000000000010000000100000000000000000000000100000003001380D88B00000000000031000000085761746368202631000000000000000000000000010000000100000000000000000000000100000000001380D98B00000000000031000000085761746368202632000000000000000000000000010000000100000000000000000000000100000000001380CE01000000000000FFFFFFFF0C576174636820416E63686F720000000000000000010000000000000001000000000000000000000001000000000013800F01000000000000320000000E4D656D6F72792057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380D28B00000000000032000000094D656D6F7279202631000000000000000000000000010000000100000000000000000000000100000000001380D38B00000000000032000000094D656D6F7279202632000000000000000000000000010000000100000000000000000000000100000000001380D48B00000000000032000000094D656D6F7279202633000000000000000000000000010000000100000000000000000000000100000000001380D58B00000000000032000000094D656D6F72792026340000000000000000000000000100000001000000000000000000000001000000000013801001000000000000330000000E53657269616C2057696E646F77730000000000000000000000000100000001000000000000000000000001000000040013809307000000000000330000000855415254202326310000000000000000000000000100000001000000000000000000000001000000000013809407000000000000330000000855415254202326320000000000000000000000000100000001000000000000000000000001000000000013809507000000000000330000000855415254202326330000000000000000000000000100000001000000000000000000000001000000000013809607000000000000330000001626446562756720287072696E746629205669657765720000000000000000000000000100000001000000000000000000000001000000000013803C010000000000007200000010416E616C797369732057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380658A000000000000340000000F264C6F67696320416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380DC7F0000000000003E0000001526506572666F726D616E636520416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380E788000000000000380000000E26436F646520436F766572616765000000000000000000000000010000000100000000000000000000000100000000001380CD01000000000000FFFFFFFF0F416E616C7973697320416E63686F7200000000000000000100000000000000010000000000000000000000010000000000138053010000000000003F0000000D54726163652057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013805401000000000000FFFFFFFF115472616365204D656E7520416E63686F720000000000000000010000000000000001000000000000000000000001000000000013802901000000000000350000001553797374656D205669657765722057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013804B01000000000000FFFFFFFF1453797374656D2056696577657220416E63686F720000000000000000010000000000000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000013800189000000000000360000000F26546F6F6C626F782057696E646F7700000000000000000000000001000000010000000000000000000000010000000300138044C5000000000000FFFFFFFF0E5570646174652057696E646F77730000000000000000010000000000000001000000000000000000000001000000000013800000000000000400FFFFFFFF000000000000000000010000000000000001000000000000000000000001000000000013805B01000000000000FFFFFFFF12546F6F6C626F78204D656E75416E63686F72000000000000000001000000000000000100000000000000000000000100000000000000000005446562756764020000
+ 00200000000000001900FFFF01001100434D4643546F6F6C426172427574746F6ECC880000000000002500000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018017800000000000002600000000000000000000000000000000010000000100000001801D800000000000002700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001801A800000000000002800000000000000000000000000000000010000000100000001801B80000000000000290000000000000000000000000000000001000000010000000180E57F0000000000002A00000000000000000000000000000000010000000100000001801C800000000000002B00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018000890000000000002C00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180E48B0000000000002D0000000000000000000000000000000001000000010000000180F07F0000000000002E0000000000000000000000000000000001000000010000000180E8880000000000003700000000000000000000000000000000010000000100000001803B010000000000002F0000000000000000000000000000000001000000010000000180BB8A00000000000030000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E0E01000000000000310000000D57617463682057696E646F7773000000000000000000000000010000000100000000000000000000000100000003001380D88B00000000000031000000085761746368202631000000000000000000000000010000000100000000000000000000000100000000001380D98B00000000000031000000085761746368202632000000000000000000000000010000000100000000000000000000000100000000001380CE01000000000000FFFFFFFF0C576174636820416E63686F720100000000000000010000000000000001000000000000000000000001000000000013800F01000000000000320000000E4D656D6F72792057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380D28B00000000000032000000094D656D6F7279202631000000000000000000000000010000000100000000000000000000000100000000001380D38B00000000000032000000094D656D6F7279202632000000000000000000000000010000000100000000000000000000000100000000001380D48B00000000000032000000094D656D6F7279202633000000000000000000000000010000000100000000000000000000000100000000001380D58B00000000000032000000094D656D6F72792026340000000000000000000000000100000001000000000000000000000001000000000013801001000000000000330000000E53657269616C2057696E646F77730000000000000000000000000100000001000000000000000000000001000000040013809307000000000000330000000855415254202326310000000000000000000000000100000001000000000000000000000001000000000013809407000000000000330000000855415254202326320000000000000000000000000100000001000000000000000000000001000000000013809507000000000000330000000855415254202326330000000000000000000000000100000001000000000000000000000001000000000013809607000000000000330000001626446562756720287072696E746629205669657765720000000000000000000000000100000001000000000000000000000001000000000013803C010000000000007200000010416E616C797369732057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380658A000000000000340000000F264C6F67696320416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380DC7F0000000000003E0000001526506572666F726D616E636520416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380E788000000000000380000000E26436F646520436F766572616765000000000000000000000000010000000100000000000000000000000100000000001380CD01000000000000FFFFFFFF0F416E616C7973697320416E63686F7201000000000000000100000000000000010000000000000000000000010000000000138053010000000000003F0000000D54726163652057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013805401000000000000FFFFFFFF115472616365204D656E7520416E63686F720100000000000000010000000000000001000000000000000000000001000000000013802901000000000000350000001553797374656D205669657765722057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013804B01000000000000FFFFFFFF1453797374656D2056696577657220416E63686F720100000000000000010000000000000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000013800189000000000000360000000F26546F6F6C626F782057696E646F7700000000000000000000000001000000010000000000000000000000010000000300138044C5000000000000FFFFFFFF0E5570646174652057696E646F77730100000000000000010000000000000001000000000000000000000001000000000013800000000000000400FFFFFFFF000000000000000000010000000000000001000000000000000000000001000000000013805B01000000000000FFFFFFFF12546F6F6C626F78204D656E75416E63686F72010000000000000001000000000000000100000000000000000000000100000000000000000005446562756764020000
898
@@ -1884,11 +1884,11 @@
0
16
- 0000000081000000E800000067030000
+ 0000000081000000E80000003F030000
16
- 80F8FFFF9700000068F9FFFF7D030000
+ 0000000097000000E800000055030000
@@ -1904,7 +1904,7 @@
0
16
- 0300000098000000E50000004E030000
+ 0300000098000000E500000026030000
16
@@ -1924,7 +1924,7 @@
0
16
- 0300000098000000E50000004E030000
+ 0300000098000000E500000026030000
16
@@ -1944,7 +1944,7 @@
0
16
- 34050000660000007D0700004E030000
+ 34050000660000007D07000026030000
16
@@ -1964,7 +1964,7 @@
0
16
- 34050000660000007D0700004E030000
+ 34050000660000007D07000026030000
16
@@ -1984,7 +1984,7 @@
0
16
- 34050000660000007D0700004E030000
+ 34050000660000007D07000026030000
16
@@ -2004,7 +2004,7 @@
0
16
- 34050000660000007D0700004E030000
+ 34050000660000007D07000026030000
16
@@ -2024,7 +2024,7 @@
0
16
- 34050000660000007D0700004E030000
+ 34050000660000007D07000026030000
16
@@ -2064,7 +2064,7 @@
0
16
- 34050000660000007D0700004E030000
+ 34050000660000007D07000026030000
16
@@ -2084,7 +2084,7 @@
0
16
- 34050000660000007D0700004E030000
+ 34050000660000007D07000026030000
16
@@ -2104,7 +2104,7 @@
0
16
- 34050000660000007D0700004E030000
+ 34050000660000007D07000026030000
16
@@ -2124,7 +2124,7 @@
0
16
- 34050000660000007D0700004E030000
+ 34050000660000007D07000026030000
16
@@ -2144,7 +2144,7 @@
0
16
- 34050000660000007D0700004E030000
+ 34050000660000007D07000026030000
16
@@ -2164,7 +2164,7 @@
0
16
- 34050000660000007D0700004E030000
+ 34050000660000007D07000026030000
16
@@ -2184,7 +2184,7 @@
0
16
- 34050000660000007D0700004E030000
+ 34050000660000007D07000026030000
16
@@ -2204,7 +2204,7 @@
0
16
- 0300000098000000E50000004E030000
+ 0300000098000000E500000026030000
16
@@ -2224,7 +2224,7 @@
0
16
- 0300000098000000E50000004E030000
+ 0300000098000000E500000026030000
16
@@ -2264,7 +2264,7 @@
0
16
- 000000006B030000800700000F040000
+ 000000004303000080070000E7030000
16
@@ -2364,7 +2364,7 @@
0
16
- 34050000660000007D0700004E030000
+ 34050000660000007D07000026030000
16
@@ -2384,7 +2384,7 @@
0
16
- 34050000660000007D0700004E030000
+ 34050000660000007D07000026030000
16
@@ -2484,7 +2484,7 @@
0
16
- 34050000660000007D0700004E030000
+ 34050000660000007D07000026030000
16
@@ -2504,7 +2504,7 @@
0
16
- 34050000660000007D0700004E030000
+ 34050000660000007D07000026030000
16
@@ -2524,7 +2524,7 @@
0
16
- 34050000660000007D0700004E030000
+ 34050000660000007D07000026030000
16
@@ -2544,7 +2544,7 @@
0
16
- 34050000660000007D0700004E030000
+ 34050000660000007D07000026030000
16
@@ -2564,7 +2564,7 @@
0
16
- 34050000660000007D0700004E030000
+ 34050000660000007D07000026030000
16
@@ -2584,7 +2584,7 @@
0
16
- 34050000660000007D0700004E030000
+ 34050000660000007D07000026030000
16
@@ -2604,7 +2604,7 @@
0
16
- 34050000660000007D0700004E030000
+ 34050000660000007D07000026030000
16
@@ -2624,7 +2624,7 @@
0
16
- 34050000660000007D0700004E030000
+ 34050000660000007D07000026030000
16
@@ -2644,7 +2644,7 @@
0
16
- 34050000660000007D0700004E030000
+ 34050000660000007D07000026030000
16
@@ -2664,7 +2664,7 @@
0
16
- 34050000660000007D0700004E030000
+ 34050000660000007D07000026030000
16
@@ -2684,7 +2684,7 @@
0
16
- 34050000660000007D0700004E030000
+ 34050000660000007D07000026030000
16
@@ -2704,7 +2704,7 @@
0
16
- 34050000660000007D0700004E030000
+ 34050000660000007D07000026030000
16
@@ -2724,7 +2724,7 @@
0
16
- 34050000660000007D0700004E030000
+ 34050000660000007D07000026030000
16
@@ -2744,7 +2744,7 @@
0
16
- 34050000660000007D0700004E030000
+ 34050000660000007D07000026030000
16
@@ -2764,7 +2764,7 @@
0
16
- 34050000660000007D0700004E030000
+ 34050000660000007D07000026030000
16
@@ -2784,7 +2784,7 @@
0
16
- 34050000660000007D0700004E030000
+ 34050000660000007D07000026030000
16
@@ -2804,7 +2804,7 @@
0
16
- 34050000660000007D0700004E030000
+ 34050000660000007D07000026030000
16
@@ -2824,7 +2824,7 @@
0
16
- 34050000660000007D0700004E030000
+ 34050000660000007D07000026030000
16
@@ -2844,7 +2844,7 @@
0
16
- 34050000660000007D0700004E030000
+ 34050000660000007D07000026030000
16
@@ -2864,7 +2864,7 @@
0
16
- 34050000660000007D0700004E030000
+ 34050000660000007D07000026030000
16
@@ -2884,7 +2884,7 @@
0
16
- 34050000660000007D0700004E030000
+ 34050000660000007D07000026030000
16
@@ -2904,7 +2904,7 @@
0
16
- 0300000098000000E50000004E030000
+ 0300000098000000E500000026030000
16
@@ -2964,7 +2964,7 @@
0
16
- 34050000660000007D0700004E030000
+ 34050000660000007D07000026030000
16
@@ -2984,7 +2984,7 @@
0
16
- 34050000660000007D0700004E030000
+ 34050000660000007D07000026030000
16
@@ -3064,7 +3064,7 @@
0
16
- 34050000660000007D0700004E030000
+ 34050000660000007D07000026030000
16
@@ -3084,7 +3084,7 @@
0
16
- 34050000660000007D0700004E030000
+ 34050000660000007D07000026030000
16
@@ -3104,7 +3104,7 @@
0
16
- 34050000660000007D0700004E030000
+ 34050000660000007D07000026030000
16
@@ -3124,7 +3124,7 @@
0
16
- 34050000660000007D0700004E030000
+ 34050000660000007D07000026030000
16
@@ -3144,7 +3144,7 @@
0
16
- 34050000660000007D0700004E030000
+ 34050000660000007D07000026030000
16
@@ -3164,7 +3164,7 @@
0
16
- 34050000660000007D0700004E030000
+ 34050000660000007D07000026030000
16
@@ -3184,7 +3184,7 @@
0
16
- 34050000660000007D0700004E030000
+ 34050000660000007D07000026030000
16
@@ -3204,7 +3204,7 @@
0
16
- 34050000660000007D0700004E030000
+ 34050000660000007D07000026030000
16
@@ -3224,7 +3224,7 @@
0
16
- 34050000660000007D0700004E030000
+ 34050000660000007D07000026030000
16
@@ -3244,7 +3244,7 @@
0
16
- 34050000660000007D0700004E030000
+ 34050000660000007D07000026030000
16
@@ -3264,7 +3264,7 @@
0
16
- 34050000660000007D0700004E030000
+ 34050000660000007D07000026030000
16
@@ -3284,7 +3284,7 @@
0
16
- 34050000660000007D0700004E030000
+ 34050000660000007D07000026030000
16
@@ -3304,7 +3304,7 @@
0
16
- 34050000660000007D0700004E030000
+ 34050000660000007D07000026030000
16
@@ -3324,7 +3324,7 @@
0
16
- 34050000660000007D0700004E030000
+ 34050000660000007D07000026030000
16
@@ -3344,7 +3344,7 @@
0
16
- 34050000660000007D0700004E030000
+ 34050000660000007D07000026030000
16
@@ -3364,7 +3364,7 @@
0
16
- 34050000660000007D0700004E030000
+ 34050000660000007D07000026030000
16
@@ -3384,7 +3384,7 @@
0
16
- 34050000660000007D0700004E030000
+ 34050000660000007D07000026030000
16
@@ -3404,7 +3404,7 @@
0
16
- 34050000660000007D0700004E030000
+ 34050000660000007D07000026030000
16
@@ -3424,7 +3424,7 @@
0
16
- 34050000660000007D0700004E030000
+ 34050000660000007D07000026030000
16
@@ -3444,7 +3444,7 @@
0
16
- 34050000660000007D0700004E030000
+ 34050000660000007D07000026030000
16
@@ -3484,7 +3484,7 @@
0
16
- 000000000F0400008007000022040000
+ 00000000E703000080070000FA030000
16
@@ -3544,7 +3544,7 @@
0
16
- 34050000660000007D0700004E030000
+ 34050000660000007D07000026030000
16
@@ -3553,14 +3553,14 @@
3328
- 000000000A000000000000000010000001000000FFFFFFFFFFFFFFFFE800000081000000EC0000006703000001000000020000100400000001000000000000000000000000000000000000000000000001000000FFFFFFFF05000000ED0300006D000000C3000000C400000073940000FFFF02000B004354616262656450616E65001000000100000080F8FFFF9700000068F9FFFF7D0300000000000081000000E8000000670300000000000040410056050000000750726F6A65637401000000ED03000001000000FFFFFFFFFFFFFFFF05426F6F6B73000000006D00000001000000FFFFFFFFFFFFFFFF0946756E6374696F6E7300000000C300000001000000FFFFFFFFFFFFFFFF0954656D706C6174657300000000C400000001000000FFFFFFFFFFFFFFFF09526567697374657273010000007394000001000000FFFFFFFFFFFFFFFF0000000000000000000000000000000000000000000000000000000001000000FFFFFFFFED03000001000000FFFFFFFFED030000000000000020000001000000FFFFFFFFFFFFFFFF000000007D0000002D050000810000000100000001000010040000000100000072FFFFFF7F020000FFFFFFFF08000000CB00000057010000CC000000F08B00005A01000079070000D6010000458900000180002000000100000080F8FFFF65000000ADFDFFFF93000000000000004F0000002D0500007D0000000000000040280056080000000B446973617373656D626C7901000000CB00000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A6572000000005701000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A657200000000CC00000001000000FFFFFFFFFFFFFFFF0E4C6F67696320416E616C797A657200000000F08B000001000000FFFFFFFFFFFFFFFF0D436F646520436F766572616765000000005A01000001000000FFFFFFFFFFFFFFFF11496E737472756374696F6E205472616365000000007907000001000000FFFFFFFFFFFFFFFF0F53797374656D20416E616C797A657200000000D601000001000000FFFFFFFFFFFFFFFF104576656E742053746174697374696373000000004589000001000000FFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000001000000FFFFFFFFCB00000001000000FFFFFFFFCB000000000000000040000001000000FFFFFFFFFFFFFFFF2D0500004F000000310500006703000001000000020000100400000001000000C8FCFFFF510300000000000000000000000000000100000000000000FFFFFFFF3A0000008F070000930700009407000095070000960700009007000091070000B5010000B801000038030000B9050000BA050000BB050000BC050000CB090000E2050000CA0900002D8C00002E8C00002F8C0000308C0000318C0000328C0000338C0000348C0000358C0000368C0000378C0000388C0000398C00003A8C00003B8C00003C8C00003D8C00003E8C00003F8C0000408C0000418C000050C3000051C3000052C3000053C3000054C3000055C3000056C3000057C3000058C3000059C300005AC300005BC300005CC300005DC300005EC300005FC3000060C3000061C3000062C3000063C3000001800040000001000000B1FDFFFF65000000000000007D030000310500004F000000800700006703000000000000404100563A0000001343616C6C20537461636B202B204C6F63616C73010000008F07000001000000FFFFFFFFFFFFFFFF0755415254202331000000009307000001000000FFFFFFFFFFFFFFFF0755415254202332000000009407000001000000FFFFFFFFFFFFFFFF0755415254202333000000009507000001000000FFFFFFFFFFFFFFFF15446562756720287072696E74662920566965776572000000009607000001000000FFFFFFFFFFFFFFFF0757617463682031010000009007000001000000FFFFFFFFFFFFFFFF0757617463682032000000009107000001000000FFFFFFFFFFFFFFFF10547261636520457863657074696F6E7300000000B501000001000000FFFFFFFFFFFFFFFF0E4576656E7420436F756E7465727300000000B801000001000000FFFFFFFFFFFFFFFF09554C494E4B706C7573000000003803000001000000FFFFFFFFFFFFFFFF084D656D6F7279203101000000B905000001000000FFFFFFFFFFFFFFFF084D656D6F7279203200000000BA05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203300000000BB05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203400000000BC05000001000000FFFFFFFFFFFFFFFF105472616365204E617669676174696F6E00000000CB09000001000000FFFFFFFFFFFFFFFF0753796D626F6C7300000000E205000001000000FFFFFFFFFFFFFFFF0A5472616365204461746100000000CA09000001000000FFFFFFFFFFFFFFFF00000000002D8C000001000000FFFFFFFFFFFFFFFF00000000002E8C000001000000FFFFFFFFFFFFFFFF00000000002F8C000001000000FFFFFFFFFFFFFFFF0000000000308C000001000000FFFFFFFFFFFFFFFF0000000000318C000001000000FFFFFFFFFFFFFFFF0000000000328C000001000000FFFFFFFFFFFFFFFF0000000000338C000001000000FFFFFFFFFFFFFFFF0000000000348C000001000000FFFFFFFFFFFFFFFF0000000000358C000001000000FFFFFFFFFFFFFFFF0000000000368C000001000000FFFFFFFFFFFFFFFF0000000000378C000001000000FFFFFFFFFFFFFFFF0000000000388C000001000000FFFFFFFFFFFFFFFF0000000000398C000001000000FFFFFFFFFFFFFFFF00000000003A8C000001000000FFFFFFFFFFFFFFFF00000000003B8C000001000000FFFFFFFFFFFFFFFF00000000003C8C000001000000FFFFFFFFFFFFFFFF00000000003D8C000001000000FFFFFFFFFFFFFFFF00000000003E8C000001000000FFFFFFFFFFFFFFFF00000000003F8C000001000000FFFFFFFFFFFFFFFF0343414E01000000408C000001000000FFFFFFFFFFFFFFFF0454494D3401000000418C000001000000FFFFFFFFFFFFFFFF000000000050C3000001000000FFFFFFFFFFFFFFFF000000000051C3000001000000FFFFFFFFFFFFFFFF000000000052C3000001000000FFFFFFFFFFFFFFFF000000000053C3000001000000FFFFFFFFFFFFFFFF000000000054C3000001000000FFFFFFFFFFFFFFFF000000000055C3000001000000FFFFFFFFFFFFFFFF000000000056C3000001000000FFFFFFFFFFFFFFFF000000000057C3000001000000FFFFFFFFFFFFFFFF000000000058C3000001000000FFFFFFFFFFFFFFFF000000000059C3000001000000FFFFFFFFFFFFFFFF00000000005AC3000001000000FFFFFFFFFFFFFFFF00000000005BC3000001000000FFFFFFFFFFFFFFFF00000000005CC3000001000000FFFFFFFFFFFFFFFF00000000005DC3000001000000FFFFFFFFFFFFFFFF00000000005EC3000001000000FFFFFFFFFFFFFFFF00000000005FC3000001000000FFFFFFFFFFFFFFFF000000000060C3000001000000FFFFFFFFFFFFFFFF000000000061C3000001000000FFFFFFFFFFFFFFFF000000000062C3000001000000FFFFFFFFFFFFFFFF000000000063C3000001000000FFFFFFFFFFFFFFFF240000000000000002000000000000000000000002000000FFFFFFFF720600004F000000760600003F030000000000000200000004000000000000002BFFFFFFD200000000000000000000000000000001000000FFFFFFFF8F07000001000000FFFFFFFF8F070000000000000080000001000000FFFFFFFFFFFFFFFF0000000067030000800700006B03000001000000010000100400000001000000000000000000000000000000000000000000000001000000C60000000000000001000000000000000000000001000000FFFFFFFFC003000043030000C4030000E703000000000000020000000400000000000000000000000000000000000000000000000000000001000000C600000001000000C6000000000000000080000000000000FFFFFFFFFFFFFFFF000000002B020000900500002F020000000000000100000004000000010000000000000000000000FFFFFFFF06000000C5000000C7000000B4010000D2010000CF010000779400000180008000000000000080F8FFFF4502000010FEFFFFD5020000000000002F02000090050000BF0200000000000040820046060000000C4275696C64204F757470757400000000C500000001000000FFFFFFFFFFFFFFFF0D46696E6420496E2046696C657300000000C700000001000000FFFFFFFFFFFFFFFF0A4572726F72204C69737400000000B401000001000000FFFFFFFFFFFFFFFF0E536F757263652042726F7773657200000000D201000001000000FFFFFFFFFFFFFFFF0E416C6C205265666572656E63657300000000CF01000001000000FFFFFFFFFFFFFFFF0642726F777365000000007794000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFC500000001000000FFFFFFFFC5000000000000000000000000000000
+ 000000000A000000000000000010000001000000FFFFFFFFFFFFFFFFE800000081000000EC0000003F03000001000000020000100400000001000000000000000000000000000000000000000000000001000000FFFFFFFF05000000ED0300006D000000C3000000C400000073940000FFFF02000B004354616262656450616E6500100000010000000000000097000000E8000000550300000000000081000000E80000003F0300000000000040410056050000000750726F6A65637401000000ED03000001000000FFFFFFFFFFFFFFFF05426F6F6B73000000006D00000001000000FFFFFFFFFFFFFFFF0946756E6374696F6E7300000000C300000001000000FFFFFFFFFFFFFFFF0954656D706C6174657300000000C400000001000000FFFFFFFFFFFFFFFF09526567697374657273010000007394000001000000FFFFFFFFFFFFFFFF0000000000000000000000000000000000000000000000000000000001000000FFFFFFFFED03000001000000FFFFFFFFED030000000000000020000001000000FFFFFFFFFFFFFFFF000000007D0000002D050000810000000100000001000010040000000100000072FFFFFF7F020000FFFFFFFF08000000CB00000057010000CC000000F08B00005A01000079070000D6010000458900000180002000000100000000000000650000002D05000093000000000000004F0000002D0500007D0000000000000040280056080000000B446973617373656D626C7901000000CB00000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A6572000000005701000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A657200000000CC00000001000000FFFFFFFFFFFFFFFF0E4C6F67696320416E616C797A657200000000F08B000001000000FFFFFFFFFFFFFFFF0D436F646520436F766572616765000000005A01000001000000FFFFFFFFFFFFFFFF11496E737472756374696F6E205472616365000000007907000001000000FFFFFFFFFFFFFFFF0F53797374656D20416E616C797A657200000000D601000001000000FFFFFFFFFFFFFFFF104576656E742053746174697374696373000000004589000001000000FFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000001000000FFFFFFFFCB00000001000000FFFFFFFFCB000000000000000040000001000000FFFFFFFFFFFFFFFF2D0500004F000000310500003F03000001000000020000100400000001000000C8FCFFFF510300000000000000000000000000000100000000000000FFFFFFFF3A0000008F070000930700009407000095070000960700009007000091070000B5010000B801000038030000B9050000BA050000BB050000BC050000CB090000E2050000CA0900002D8C00002E8C00002F8C0000308C0000318C0000328C0000338C0000348C0000358C0000368C0000378C0000388C0000398C00003A8C00003B8C00003C8C00003D8C00003E8C00003F8C0000408C0000418C000050C3000051C3000052C3000053C3000054C3000055C3000056C3000057C3000058C3000059C300005AC300005BC300005CC300005DC300005EC300005FC3000060C3000061C3000062C3000063C300000180004000000100000031050000650000008007000055030000310500004F000000800700003F03000000000000404100563A0000001343616C6C20537461636B202B204C6F63616C73010000008F07000001000000FFFFFFFFFFFFFFFF0755415254202331000000009307000001000000FFFFFFFFFFFFFFFF0755415254202332000000009407000001000000FFFFFFFFFFFFFFFF0755415254202333000000009507000001000000FFFFFFFFFFFFFFFF15446562756720287072696E74662920566965776572000000009607000001000000FFFFFFFFFFFFFFFF0757617463682031010000009007000001000000FFFFFFFFFFFFFFFF0757617463682032000000009107000001000000FFFFFFFFFFFFFFFF10547261636520457863657074696F6E7300000000B501000001000000FFFFFFFFFFFFFFFF0E4576656E7420436F756E7465727300000000B801000001000000FFFFFFFFFFFFFFFF09554C494E4B706C7573000000003803000001000000FFFFFFFFFFFFFFFF084D656D6F7279203101000000B905000001000000FFFFFFFFFFFFFFFF084D656D6F7279203200000000BA05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203300000000BB05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203400000000BC05000001000000FFFFFFFFFFFFFFFF105472616365204E617669676174696F6E00000000CB09000001000000FFFFFFFFFFFFFFFF0753796D626F6C7300000000E205000001000000FFFFFFFFFFFFFFFF0A5472616365204461746100000000CA09000001000000FFFFFFFFFFFFFFFF00000000002D8C000001000000FFFFFFFFFFFFFFFF00000000002E8C000001000000FFFFFFFFFFFFFFFF00000000002F8C000001000000FFFFFFFFFFFFFFFF0000000000308C000001000000FFFFFFFFFFFFFFFF0000000000318C000001000000FFFFFFFFFFFFFFFF0000000000328C000001000000FFFFFFFFFFFFFFFF0000000000338C000001000000FFFFFFFFFFFFFFFF0000000000348C000001000000FFFFFFFFFFFFFFFF0000000000358C000001000000FFFFFFFFFFFFFFFF0000000000368C000001000000FFFFFFFFFFFFFFFF0000000000378C000001000000FFFFFFFFFFFFFFFF0000000000388C000001000000FFFFFFFFFFFFFFFF0000000000398C000001000000FFFFFFFFFFFFFFFF00000000003A8C000001000000FFFFFFFFFFFFFFFF00000000003B8C000001000000FFFFFFFFFFFFFFFF00000000003C8C000001000000FFFFFFFFFFFFFFFF00000000003D8C000001000000FFFFFFFFFFFFFFFF00000000003E8C000001000000FFFFFFFFFFFFFFFF00000000003F8C000001000000FFFFFFFFFFFFFFFF0343414E01000000408C000001000000FFFFFFFFFFFFFFFF0454494D3401000000418C000001000000FFFFFFFFFFFFFFFF000000000050C3000001000000FFFFFFFFFFFFFFFF000000000051C3000001000000FFFFFFFFFFFFFFFF000000000052C3000001000000FFFFFFFFFFFFFFFF000000000053C3000001000000FFFFFFFFFFFFFFFF000000000054C3000001000000FFFFFFFFFFFFFFFF000000000055C3000001000000FFFFFFFFFFFFFFFF000000000056C3000001000000FFFFFFFFFFFFFFFF000000000057C3000001000000FFFFFFFFFFFFFFFF000000000058C3000001000000FFFFFFFFFFFFFFFF000000000059C3000001000000FFFFFFFFFFFFFFFF00000000005AC3000001000000FFFFFFFFFFFFFFFF00000000005BC3000001000000FFFFFFFFFFFFFFFF00000000005CC3000001000000FFFFFFFFFFFFFFFF00000000005DC3000001000000FFFFFFFFFFFFFFFF00000000005EC3000001000000FFFFFFFFFFFFFFFF00000000005FC3000001000000FFFFFFFFFFFFFFFF000000000060C3000001000000FFFFFFFFFFFFFFFF000000000061C3000001000000FFFFFFFFFFFFFFFF000000000062C3000001000000FFFFFFFFFFFFFFFF000000000063C3000001000000FFFFFFFFFFFFFFFF000000000000000002000000000000000000000002000000FFFFFFFF720600004F000000760600003F030000000000000200000004000000000000002BFFFFFFD200000000000000000000000000000001000000FFFFFFFF8F07000001000000FFFFFFFF8F070000000000000080000001000000FFFFFFFFFFFFFFFF000000003F030000800700004303000001000000010000100400000001000000000000000000000000000000000000000000000001000000C60000000000000001000000000000000000000001000000FFFFFFFFC003000043030000C4030000E703000000000000020000000400000000000000000000000000000000000000000000000000000001000000C600000001000000C6000000000000000080000000000000FFFFFFFFFFFFFFFF000000002B020000900500002F020000000000000100000004000000010000000000000000000000FFFFFFFF06000000C5000000C7000000B4010000D2010000CF0100007794000001800080000000000000000000004502000090050000D5020000000000002F02000090050000BF0200000000000040820046060000000C4275696C64204F757470757400000000C500000001000000FFFFFFFFFFFFFFFF0D46696E6420496E2046696C657300000000C700000001000000FFFFFFFFFFFFFFFF0A4572726F72204C69737400000000B401000001000000FFFFFFFFFFFFFFFF0E536F757263652042726F7773657200000000D201000001000000FFFFFFFFFFFFFFFF0E416C6C205265666572656E63657300000000CF01000001000000FFFFFFFFFFFFFFFF0642726F777365000000007794000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFC500000001000000FFFFFFFFC5000000000000000000000000000000
59392
File
- 2789
- 00200000010000002800FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000000000000000000000000000000000000000100000001000000018001E100000000000001000000000000000000000000000000000100000001000000018003E1000000000000020000000000000000000000000000000001000000010000000180CD7F0000000000000300000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018023E100000000040004000000000000000000000000000000000100000001000000018022E100000000040005000000000000000000000000000000000100000001000000018025E10000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001802BE10000000000000700000000000000000000000000000000010000000100000001802CE10000000004000800000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001807A8A0000000000000900000000000000000000000000000000010000000100000001807B8A0000000000000A00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180D3B00000000000000B000000000000000000000000000000000100000001000000018015B10000000004000C0000000000000000000000000000000001000000010000000180F4B00000000004000D000000000000000000000000000000000100000001000000018036B10000000004000E00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FF88000000000400460000000000000000000000000000000001000000010000000180FE880000000004004500000000000000000000000000000000010000000100000001800B810000000004001300000000000000000000000000000000010000000100000001800C810000000004001400000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180F0880000020000000F000000000000000000000000000000000100000001000000FFFF0100120043555646696E64436F6D626F427574746F6EE803000000000000000000000000000000000000000000000001000000010000009600000002002050000000000843616C6C6261636B96000000000000000C000843616C6C6261636B0011417661696C61626C6543616E52784D73671143414E5F43555252454E545F5350454544125245515545535445525F5254435F53594E431D43616E52657175657374546F42726F61646361737452746353657475701B5245515545535445525F50756C73655F54494D5F48616E646C65720C4D585F54494D375F496E69741245515545535445525F5072657363616C65722148414C5F43414E5F52784669666F304D736750656E64696E6743616C6C6261636B03527846025278000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000018024E10000000000001100000000000000000000000000000000010000000100000001800A810000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E2280000002000100150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B46350000000000000000000000000100000001000000000000000000000001000000020021802280000000000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B4635000000000000000000000000010000000100000000000000000000000100000000002180E0010000000000007500000021456E65726779204D6561737572656D656E742026776974686F75742044656275670000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C488000000000400160000000000000000000000000000000001000000010000000180C988000000000400180000000000000000000000000000000001000000010000000180C788000000000000190000000000000000000000000000000001000000010000002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000003002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000000002180E50100000000000078000000264B696C6C20416C6C20427265616B706F696E747320696E204163746976652050726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180E601000000000000790000002F4B696C6C20416C6C20427265616B706F696E747320696E204D756C74692D50726F6A65637420576F726B73706163650000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000021804C010000020001001A0000000F2650726F6A6563742057696E646F77000000000000000000000000010000000100000000000000000000000100000008002180DD880000000000001A0000000750726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180DC8B0000000000003A00000005426F6F6B73000000000000000000000000010000000100000000000000000000000100000000002180E18B0000000000003B0000000946756E6374696F6E73000000000000000000000000010000000100000000000000000000000100000000002180E28B000000000000400000000954656D706C6174657300000000000000000000000001000000010000000000000000000000010000000000218018890000000000003D0000000E536F757263652042726F777365720000000000000000000000000100000001000000000000000000000001000000000021800000000000000400FFFFFFFF00000000000000000001000000000000000100000000000000000000000100000000002180D988000000000000390000000C4275696C64204F7574707574000000000000000000000000010000000100000000000000000000000100000000002180E38B000000000000410000000B46696E64204F75747075740000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FB7F0000000000001B000000000000000000000000000000000100000001000000000000000446696C65C6030000
+ 2928
+ 00200000010000002800FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000000000000000000000000000000000000000100000001000000018001E100000000000001000000000000000000000000000000000100000001000000018003E1000000000000020000000000000000000000000000000001000000010000000180CD7F0000000000000300000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018023E100000000040004000000000000000000000000000000000100000001000000018022E100000000040005000000000000000000000000000000000100000001000000018025E10000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001802BE10000000000000700000000000000000000000000000000010000000100000001802CE10000000004000800000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001807A8A0000000000000900000000000000000000000000000000010000000100000001807B8A0000000000000A00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180D3B00000000000000B000000000000000000000000000000000100000001000000018015B10000000004000C0000000000000000000000000000000001000000010000000180F4B00000000004000D000000000000000000000000000000000100000001000000018036B10000000004000E00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FF88000000000400460000000000000000000000000000000001000000010000000180FE880000000004004500000000000000000000000000000000010000000100000001800B810000000004001300000000000000000000000000000000010000000100000001800C810000000004001400000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180F0880000020000000F000000000000000000000000000000000100000001000000FFFF0100120043555646696E64436F6D626F427574746F6EE803000000000000000000000000000000000000000000000001000000010000009600000002002050000000000C50726F746F43616E49645F74960000000000000012000C50726F746F43616E49645F7404646174610D70726F746F43616E44617461200C70726F746F43616E446174610B70726F746F43616E4964200A70726F746F43616E49641243414E5F52585F4255464645525F53495A4506545F73656E73134E4F4E4558495354454E545F454C454D454E54154D4F444255535F53454354494F4E5F46494C544552134D4F444255535F53454354494F4E5F4D41534B18434F554E545F4F465F4D4F444255535F53454354494F4E530A43414E5F4944455F33322050524F544F43414E5F46494C5445525F444154415F545950455F46494C5445520565787449442050726F746F43616E4D7367546F47656E6572616C4164647265737353706163652350524F544F43414E5F47656E6572616C4164647265737353706163655F416E737765720647656E657261000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000018024E10000000000001100000000000000000000000000000000010000000100000001800A810000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E2280000002000300150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B46350000000000000000000000000100000001000000000000000000000001000000020021802280000000000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B4635000000000000000000000000010000000100000000000000000000000100000000002180E0010000000000007500000021456E65726779204D6561737572656D656E742026776974686F75742044656275670000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C488000000000000160000000000000000000000000000000001000000010000000180C988000000000400180000000000000000000000000000000001000000010000000180C788000000000000190000000000000000000000000000000001000000010000002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000003002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000000002180E50100000000000078000000264B696C6C20416C6C20427265616B706F696E747320696E204163746976652050726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180E601000000000000790000002F4B696C6C20416C6C20427265616B706F696E747320696E204D756C74692D50726F6A65637420576F726B73706163650000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000021804C010000020001001A0000000F2650726F6A6563742057696E646F77000000000000000000000000010000000100000000000000000000000100000008002180DD880000000000001A0000000750726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180DC8B0000000000003A00000005426F6F6B73000000000000000000000000010000000100000000000000000000000100000000002180E18B0000000000003B0000000946756E6374696F6E73000000000000000000000000010000000100000000000000000000000100000000002180E28B000000000000400000000954656D706C6174657300000000000000000000000001000000010000000000000000000000010000000000218018890000000000003D0000000E536F757263652042726F777365720000000000000000000000000100000001000000000000000000000001000000000021800000000000000400FFFFFFFF00000000000000000001000000000000000100000000000000000000000100000000002180D988000000000000390000000C4275696C64204F7574707574000000000000000000000000010000000100000000000000000000000100000000002180E38B000000000000410000000B46696E64204F75747075740000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FB7F0000000000001B000000000000000000000000000000000100000001000000000000000446696C65C6030000
1423
@@ -3592,7 +3592,7 @@
Debug
2362
- 00200000010000001900FFFF01001100434D4643546F6F6C426172427574746F6ECC880000000000002500000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018017800000000000002600000000000000000000000000000000010000000100000001801D800000000004002700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001801A800000000000002800000000000000000000000000000000010000000100000001801B80000000000000290000000000000000000000000000000001000000010000000180E57F0000000000002A00000000000000000000000000000000010000000100000001801C800000000004002B00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018000890000000000002C00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180E48B0000020001002D0000000000000000000000000000000001000000010000000180F07F0000020001002E0000000000000000000000000000000001000000010000000180E8880000020000003700000000000000000000000000000000010000000100000001803B010000020001002F0000000000000000000000000000000001000000010000000180BB8A00000200010030000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E0E01000002000100310000000D57617463682057696E646F7773000000000000000000000000010000000100000000000000000000000100000003001380D88B00000000000031000000085761746368202631000000000000000000000000010000000100000000000000000000000100000000001380D98B00000000000031000000085761746368202632000000000000000000000000010000000100000000000000000000000100000000001380CE01000000000000FFFFFFFF0C576174636820416E63686F720100000000000000010000000000000001000000000000000000000001000000000013800F0100000200010032000000094D656D6F7279202631000000000000000000000000010000000100000000000000000000000100000004001380D28B00000000000032000000094D656D6F7279202631000000000000000000000000010000000100000000000000000000000100000000001380D38B00000000000032000000094D656D6F7279202632000000000000000000000000010000000100000000000000000000000100000000001380D48B00000000000032000000094D656D6F7279202633000000000000000000000000010000000100000000000000000000000100000000001380D58B00000000000032000000094D656D6F72792026340000000000000000000000000100000001000000000000000000000001000000000013801001000002000000330000000855415254202326310000000000000000000000000100000001000000000000000000000001000000040013809307000000000000330000000855415254202326310000000000000000000000000100000001000000000000000000000001000000000013809407000000000000330000000855415254202326320000000000000000000000000100000001000000000000000000000001000000000013809507000000000000330000000855415254202326330000000000000000000000000100000001000000000000000000000001000000000013809607000000000000330000001626446562756720287072696E746629205669657765720000000000000000000000000100000001000000000000000000000001000000000013803C010000000000007200000010416E616C797369732057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380658A000000000000340000000F264C6F67696320416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380DC7F0000000000003E0000001526506572666F726D616E636520416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380E788000000000000380000000E26436F646520436F766572616765000000000000000000000000010000000100000000000000000000000100000000001380CD01000000000000FFFFFFFF0F416E616C7973697320416E63686F7201000000000000000100000000000000010000000000000000000000010000000000138053010000000000003F0000000D54726163652057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013805401000000000000FFFFFFFF115472616365204D656E7520416E63686F720100000000000000010000000000000001000000000000000000000001000000000013802901000000000000350000001553797374656D205669657765722057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013804B01000000000000FFFFFFFF1453797374656D2056696577657220416E63686F720100000000000000010000000000000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000013800189000002000000360000000F26546F6F6C626F782057696E646F7700000000000000000000000001000000010000000000000000000000010000000300138044C5000000000000FFFFFFFF0E5570646174652057696E646F77730100000000000000010000000000000001000000000000000000000001000000000013800000000000000400FFFFFFFF000000000000000000010000000000000001000000000000000000000001000000000013805B01000000000000FFFFFFFF12546F6F6C626F78204D656E75416E63686F72010000000000000001000000000000000100000000000000000000000100000000000000000005446562756764020000
+ 00200000010000001900FFFF01001100434D4643546F6F6C426172427574746F6ECC880000000000002500000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018017800000000000002600000000000000000000000000000000010000000100000001801D800000000004002700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001801A800000000000002800000000000000000000000000000000010000000100000001801B80000000000000290000000000000000000000000000000001000000010000000180E57F0000000000002A00000000000000000000000000000000010000000100000001801C800000000000002B00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018000890000000000002C00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180E48B0000020001002D0000000000000000000000000000000001000000010000000180F07F0000020001002E0000000000000000000000000000000001000000010000000180E8880000020000003700000000000000000000000000000000010000000100000001803B010000020001002F0000000000000000000000000000000001000000010000000180BB8A00000200010030000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E0E01000002000100310000000D57617463682057696E646F7773000000000000000000000000010000000100000000000000000000000100000003001380D88B00000000000031000000085761746368202631000000000000000000000000010000000100000000000000000000000100000000001380D98B00000000000031000000085761746368202632000000000000000000000000010000000100000000000000000000000100000000001380CE01000000000000FFFFFFFF0C576174636820416E63686F720100000000000000010000000000000001000000000000000000000001000000000013800F0100000200010032000000094D656D6F7279202631000000000000000000000000010000000100000000000000000000000100000004001380D28B00000000000032000000094D656D6F7279202631000000000000000000000000010000000100000000000000000000000100000000001380D38B00000000000032000000094D656D6F7279202632000000000000000000000000010000000100000000000000000000000100000000001380D48B00000000000032000000094D656D6F7279202633000000000000000000000000010000000100000000000000000000000100000000001380D58B00000000000032000000094D656D6F72792026340000000000000000000000000100000001000000000000000000000001000000000013801001000002000000330000000855415254202326310000000000000000000000000100000001000000000000000000000001000000040013809307000000000000330000000855415254202326310000000000000000000000000100000001000000000000000000000001000000000013809407000000000000330000000855415254202326320000000000000000000000000100000001000000000000000000000001000000000013809507000000000000330000000855415254202326330000000000000000000000000100000001000000000000000000000001000000000013809607000000000000330000001626446562756720287072696E746629205669657765720000000000000000000000000100000001000000000000000000000001000000000013803C010000000000007200000010416E616C797369732057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380658A000000000000340000000F264C6F67696320416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380DC7F0000000000003E0000001526506572666F726D616E636520416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380E788000000000000380000000E26436F646520436F766572616765000000000000000000000000010000000100000000000000000000000100000000001380CD01000000000000FFFFFFFF0F416E616C7973697320416E63686F7201000000000000000100000000000000010000000000000000000000010000000000138053010000000000003F0000000D54726163652057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013805401000000000000FFFFFFFF115472616365204D656E7520416E63686F720100000000000000010000000000000001000000000000000000000001000000000013802901000000000000350000001553797374656D205669657765722057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013804B01000000000000FFFFFFFF1453797374656D2056696577657220416E63686F720100000000000000010000000000000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000013800189000002000000360000000F26546F6F6C626F782057696E646F7700000000000000000000000001000000010000000000000000000000010000000300138044C5000000000000FFFFFFFF0E5570646174652057696E646F77730100000000000000010000000000000001000000000000000000000001000000000013800000000000000400FFFFFFFF000000000000000000010000000000000001000000000000000000000001000000000013805B01000000000000FFFFFFFF12546F6F6C626F78204D656E75416E63686F72010000000000000001000000000000000100000000000000000000000100000000000000000005446562756764020000
898
@@ -3616,12 +3616,12 @@
0
100
- 2
+ 10
../Core/Src/main.c
- 14
- 76
- 98
+ 0
+ 63
+ 76
1
0
@@ -3637,9 +3637,9 @@
..\Core\Src\protocan.c
- 20
- 58
- 85
+ 46
+ 1097
+ 1121
1
0
@@ -3664,18 +3664,18 @@
../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_can.c
- 3
- 557
- 564
+ 0
+ 550
+ 668
1
1709
0
../Core/Src/tim.c
- 17
- 16
- 27
+ 21
+ 10
+ 26
1
0
@@ -3700,18 +3700,18 @@
../Core/Src/can.c
- 38
- 80
- 98
+ 16
+ 1
+ 30
1
0
..\Core\Inc\protocan.h
- 1
- 266
- 268
+ 18
+ 1
+ 12
1
0
@@ -3719,7 +3719,7 @@
startup_stm32f103xb.s
0
- 118
+ 119
132
1
@@ -3727,9 +3727,9 @@
..\Drivers\CMSIS\Include\core_cm3.h
- 0
+ 30
1
- 1
+ 6
1
0
diff --git a/MDK-ARM/F103C8T6.uvoptx b/MDK-ARM/F103C8T6.uvoptx
index e4be771..09343d6 100644
--- a/MDK-ARM/F103C8T6.uvoptx
+++ b/MDK-ARM/F103C8T6.uvoptx
@@ -145,78 +145,14 @@
0
ST-LINKIII-KEIL_SWO
- -U37FF71064E57343634C31443 -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
+ -U37FF71064E57343634C31443 -O2254 -SF10000 -C0 -A0 -I0 -HNlocalhost -HP7184 -P1 -N00("ARM CoreSight SW-DP (ARM Core") -D00(2BA01477) -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
- 55
- 1
- 134234964
- 0
- 0
- 0
- 0
- 0
- 1
- D:\Work\MCU\F103C8T6\Core\Src\requester.c
-
- \\F103C8T6\../Core/Src/requester.c\55
-
-
- 1
- 0
- 690
- 1
- 134224302
- 0
- 0
- 0
- 0
- 0
- 1
- D:\Work\MCU\F103C8T6\Core\Src\requester.c
-
- \\F103C8T6\../Core/Src/requester.c\690
-
-
- 2
- 0
- 56
- 1
- 0
- 0
- 0
- 0
- 0
- 0
- 0
- D:\Work\MCU\F103C8T6\Core\Src\requester.c
-
-
-
-
- 3
- 0
- 691
- 1
- 0
- 0
- 0
- 0
- 0
- 0
- 0
- D:\Work\MCU\F103C8T6\Core\Src\requester.c
-
-
-
-
- 4
- 0
- 63
+ 135
1
0
0
@@ -229,10 +165,74 @@
+
+ 1
+ 0
+ 158
+ 1
+ 134236802
+ 0
+ 0
+ 0
+ 0
+ 0
+ 1
+ ..\Core\Src\protocan.c
+
+ \\F103C8T6\../Core/Src/protocan.c\158
+
+
+ 2
+ 0
+ 76
+ 1
+ 134243560
+ 0
+ 0
+ 0
+ 0
+ 0
+ 1
+ ../Core/Src/main.c
+
+ \\F103C8T6\../Core/Src/main.c\76
+
+
+ 3
+ 0
+ 66
+ 1
+ 134235748
+ 0
+ 0
+ 0
+ 0
+ 0
+ 1
+ ..\Core\Src\protocan.c
+
+ \\F103C8T6\../Core/Src/protocan.c\66
+
+
+ 4
+ 0
+ 717
+ 1
+ 134237434
+ 0
+ 0
+ 0
+ 0
+ 0
+ 1
+ ..\Core\Src\protocan.c
+
+ \\F103C8T6\../Core/Src/protocan.c\717
+
5
0
- 64
+ 159
1
0
0
@@ -248,7 +248,7 @@
6
0
- 695
+ 160
1
0
0
@@ -264,7 +264,7 @@
7
0
- 696
+ 718
1
0
0
@@ -280,263 +280,7 @@
8
0
- 100
- 1
- 0
- 0
- 0
- 0
- 0
- 0
- 0
- ..\Core\Src\protocan.c
-
-
-
-
- 9
- 0
- 101
- 1
- 0
- 0
- 0
- 0
- 0
- 0
- 0
- ..\Core\Src\protocan.c
-
-
-
-
- 10
- 0
- 733
- 1
- 0
- 0
- 0
- 0
- 0
- 0
- 0
- ..\Core\Src\protocan.c
-
-
-
-
- 11
- 0
- 734
- 1
- 0
- 0
- 0
- 0
- 0
- 0
- 0
- ..\Core\Src\protocan.c
-
-
-
-
- 12
- 0
- 700
- 1
- 0
- 0
- 0
- 0
- 0
- 0
- 0
- ..\Core\Src\protocan.c
-
-
-
-
- 13
- 0
- 701
- 1
- 0
- 0
- 0
- 0
- 0
- 0
- 0
- ..\Core\Src\protocan.c
-
-
-
-
- 14
- 0
- 738
- 1
- 0
- 0
- 0
- 0
- 0
- 0
- 0
- ..\Core\Src\protocan.c
-
-
-
-
- 15
- 0
- 739
- 1
- 0
- 0
- 0
- 0
- 0
- 0
- 0
- ..\Core\Src\protocan.c
-
-
-
-
- 16
- 0
- 61
- 1
- 0
- 0
- 0
- 0
- 0
- 0
- 0
- ..\Core\Src\protocan.c
-
-
-
-
- 17
- 0
- 104
- 1
- 0
- 0
- 0
- 0
- 0
- 0
- 0
- ..\Core\Src\protocan.c
-
-
-
-
- 18
- 0
- 105
- 1
- 0
- 0
- 0
- 0
- 0
- 0
- 0
- ..\Core\Src\protocan.c
-
-
-
-
- 19
- 0
- 699
- 1
- 0
- 0
- 0
- 0
- 0
- 0
- 0
- ..\Core\Src\protocan.c
-
-
-
-
- 20
- 0
- 704
- 1
- 0
- 0
- 0
- 0
- 0
- 0
- 0
- ..\Core\Src\protocan.c
-
-
-
-
- 21
- 0
- 705
- 1
- 0
- 0
- 0
- 0
- 0
- 0
- 0
- ..\Core\Src\protocan.c
-
-
-
-
- 22
- 0
- 737
- 1
- 0
- 0
- 0
- 0
- 0
- 0
- 0
- ..\Core\Src\protocan.c
-
-
-
-
- 23
- 0
- 742
- 1
- 0
- 0
- 0
- 0
- 0
- 0
- 0
- ..\Core\Src\protocan.c
-
-
-
-
- 24
- 0
- 743
+ 719
1
0
0
@@ -596,6 +340,16 @@
1
idFilter
+
+ 9
+ 1
+ CAN_RC_RESULT
+
+
+ 10
+ 1
+ tmp_hcan
+
0
@@ -737,7 +491,7 @@
2
6
1
- 1
+ 0
0
0
../Core/Src/main.c
diff --git a/MDK-ARM/F103C8T6/F103C8T6.axf b/MDK-ARM/F103C8T6/F103C8T6.axf
index ecb422a..35c68aa 100644
Binary files a/MDK-ARM/F103C8T6/F103C8T6.axf and b/MDK-ARM/F103C8T6/F103C8T6.axf differ
diff --git a/MDK-ARM/F103C8T6/F103C8T6.build_log.htm b/MDK-ARM/F103C8T6/F103C8T6.build_log.htm
index 3ad01e8..2208b24 100644
--- a/MDK-ARM/F103C8T6/F103C8T6.build_log.htm
+++ b/MDK-ARM/F103C8T6/F103C8T6.build_log.htm
@@ -27,6 +27,10 @@ Project File Date: 05/29/2026
Output:
*** Using Compiler 'V6.19', folder: 'C:\Keil_v5\ARM\ARMCLANG\Bin'
Build target 'F103C8T6'
+compiling main.c...
+linking...
+Program Size: Code=25688 RO-data=424 RW-data=16 ZI-data=6656
+FromELF: creating hex file...
"F103C8T6\F103C8T6.axf" - 0 Error(s), 0 Warning(s).
Software Packages used:
@@ -51,7 +55,7 @@ Package Vendor: Keil
* Component: ARM::CMSIS:CORE:5.6.0
Include file: CMSIS/Core/Include/tz_context.h
-Build Time Elapsed: 00:00:00
+Build Time Elapsed: 00:00:01