/****************************************************************************** * file Inc/common.h * author YuLiang * version 1.0.0 * date 10-Jun-2022 * brief This file provides all the headers of the common functions. ****************************************************************************** * @attention * *

© COPYRIGHT(c) 2022 LandPower

* * Redistribution and use in source and binary forms, with or without modification, * are permitted provided that the following conditions are met: * 1. Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * 3. Neither the name of STMicroelectronics nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * ******************************************************************************/ #ifndef __COMMON_H #define __COMMON_H /* Includes ------------------------------------------------------------------*/ #include #include "stm32l4xx_hal.h" /* Define --------------------------------------------------------------------*/ #define VERSION_MAJOR 1 #define VERSION_MINOR 5 #define COMPILE_TIME (__DATE__" "__TIME__) #define NAME_LEN 32 #define DEV_COMPILE_TIME_LEN 32 #define DEV_VERSION_STR_LEN 32 #define NUM_LEN 11 #define DEV_RESET_INFO_NUM 10 /* 以下宏保证dev_info_t结构体大小是4096byte,正好占用1个扇区大小. */ #define DEV_INFO_SIZE 512 #define DEV_FLASH_REPETITION 3 #define IS_VERSION_CHG (strncmp((char*)dev_info.boot_compile_time, COMPILE_TIME, DEV_COMPILE_TIME_LEN - 1) != 0) /* 配置串口进入IAP的等待时间(ENTRY_IAP_DELAY_COUNTER*ENTRY_IAP_RX_TIMEOUT)ms */ #define ENTRY_IAP_DELAY_COUNTER 30 #define ENTRY_IAP_RX_TIMEOUT 100 /* bin校验使用后 */ #define BIN_PKT_TYPE_LEN 4 #define BIN_PKT_HEAD_LEN 8 #define IS_CAP_LETTER(c) (((c) >= 'A') && ((c) <= 'F')) #define IS_LC_LETTER(c) (((c) >= 'a') && ((c) <= 'f')) #define IS_09(c) (((c) >= '0') && ((c) <= '9')) #define ISVALIDHEX(c) (IS_CAP_LETTER(c) || IS_LC_LETTER(c) || IS_09(c)) #define ISVALIDDEC(c) IS_09(c) #define CONVERTDEC(c) (c - '0') #define CONVERTHEX_ALPHA(c) (IS_CAP_LETTER(c) ? ((c) - 'A'+10) : ((c) - 'a'+10)) #define CONVERTHEX(c) (IS_09(c) ? ((c) - '0') : CONVERTHEX_ALPHA(c)) #define CONTROL(X) ((X) - '@') #define PRINT_USART_BUF_LEN 128 #define MAC_LEN 6 #define MAC_STR_LEN 18 #define MAC_STR_BYTE_LEN 3 #define MAC_STR_HIGH_BIT 0 #define MAC_STR_LOWER_BIT 1 #define MAC_STR_SEQ_BIT 2 #define IP_STR_LEN 17 #define TYPE_STR_LEN 5 #define PORT_STR_LEN 7 #define ID_STR_LEN 9 #define FALSE 0 #define TRUE 1 /* Constants used by Serial Command Line Mode */ #define TX_TIMEOUT ((uint32_t)100) #define RX_TIMEOUT HAL_MAX_DELAY /* Exported types ---------------------------------------------------------------------*/ /* 重启类型号. */ typedef enum { RESET_WATCHDOG = 0, RESET_CLI, RESET_IAP, RESET_RESET, RESET_UPDATE, RESET_SET_DEFAULT_CLI, RESET_SET_DEFAULT } RESET_INFO_E; /* bin报文头结构体. */ typedef struct { uint8_t dev_type_m; uint8_t dev_type_s; uint8_t file_type; uint8_t version_m; uint16_t version_s; int8_t reserve[10]; uint32_t crc32; } bin_pkt_tail_t; /* 时间信息.8byte. */ typedef struct { uint16_t year; uint8_t mon; uint8_t day; uint8_t hour; uint8_t min; uint8_t sec; uint8_t state; /* 空开状态.用于断电报警,其他代码可做无效位. */ } dev_time_t; /* 电源上闪光灯功率信息.4byte. */ typedef struct { uint16_t power; uint16_t noise; } dev_light_power_t; /* 记录补光灯功率计算值. */ typedef struct { uint16_t max; uint16_t min; uint8_t conut_max; uint8_t conut_min; uint16_t time; } dev_light_cal_t; /* 信息记录保存. */ typedef struct { /* UPDATE_MAGIC,INIT_DONE_MAGIC. 4byte */ uint32_t magic; /* 重启信息保存. 84byte */ dev_time_t reset_info[DEV_RESET_INFO_NUM]; uint8_t reset_index; uint8_t reset_type; uint8_t reserve0[2]; /* 保证配置区 512byte 的保留位. */ uint8_t reserve[420]; /* INIT_DONE_MAGIC. 4byte */ uint32_t magic_bak; } dev_record_t; /* 器件信息保存. */ typedef struct { /* INIT_DONE_MAGIC. 4byte */ uint32_t magic; /* 设备信息. 36byte */ uint8_t type_m; uint8_t type_s; uint8_t mac[6]; uint8_t id[4]; uint8_t ip[4]; uint8_t ip_mask[4]; uint8_t ip_gw[4]; uint8_t server_ip[4]; uint8_t power_type; uint8_t wireless_server_ip[3]; uint16_t server_port; uint16_t wireless_server_port; /* 版本信息. 224byte */ uint8_t boot_version[DEV_VERSION_STR_LEN]; uint8_t boot_compile_time[DEV_COMPILE_TIME_LEN]; uint8_t img_version[DEV_VERSION_STR_LEN]; uint8_t img_compile_time[DEV_COMPILE_TIME_LEN]; uint8_t hardware_version[DEV_VERSION_STR_LEN]; uint8_t FPGA_version[DEV_VERSION_STR_LEN]; uint8_t factory_time[DEV_COMPILE_TIME_LEN]; /* 内部flash和spi flash中img的大小. 32byte */ uint32_t fireware_size; uint32_t spi_fireware_size; /* 保留空间,以便以后添加成员的时候不用再升级IAP程序. */ uint8_t reserved[236]; /* INIT_DONE_MAGIC. 4byte */ uint32_t magic_bak; } dev_info_t; /* Exported macro ------------------------------------------------------------*/ /* 大小端网络序处理 */ #ifndef LITTLE_ENDIAN #define LITTLE_ENDIAN 1234 #endif #ifndef BIG_ENDIAN #define BIG_ENDIAN 4321 #endif #ifndef BYTE_ORDER #define BYTE_ORDER LITTLE_ENDIAN #endif #if BYTE_ORDER == BIG_ENDIAN #define iap_htons(x) (x) #define iap_ntohs(x) (x) #define iap_htonl(x) (x) #define iap_ntohl(x) (x) #define PP_HTONS(x) (x) #define PP_NTOHS(x) (x) #define PP_HTONL(x) (x) #define PP_NTOHL(x) (x) #else /* BYTE_ORDER != BIG_ENDIAN */ #ifndef iap_htons uint16_t iap_htons(uint16_t x); #endif #define iap_ntohs(x) iap_htons(x) #ifndef iap_htonl uint32_t iap_htonl(uint32_t x); #endif #define iap_ntohl(x) iap_htonl(x) /* These macros should be calculated by the preprocessor and are used with compile-time constants only (so that there is no little-endian overhead at runtime). */ #define PP_HTONS(x) ((((x) & 0xff) << 8) | (((x) & 0xff00) >> 8)) #define PP_NTOHS(x) PP_HTONS(x) #define PP_HTONL(x) ((((x) & 0xff) << 24) | \ (((x) & 0xff00) << 8) | \ (((x) & 0xff0000UL) >> 8) | \ (((x) & 0xff000000UL) >> 24)) #define PP_NTOHL(x) PP_HTONL(x) #endif /* BYTE_ORDER == BIG_ENDIAN */ #define HAL_E_RETURN(_f_) \ do { \ HAL_StatusTypeDef _rv_ = HAL_ERROR; \ if ((_rv_ = _f_) != 0) \ { \ Serial_PutString("\r\nError return "__FILE__"("); \ Int2Str(number_str, __LINE__); \ Serial_PutString(number_str); \ Serial_PutString(").\r\n"); \ return _rv_; \ } \ } while(0) /* Extern global variables ---------------------------------------------------*/ extern dev_info_t dev_info; extern uint8_t number_str[NUM_LEN]; /* Exported functions ------------------------------------------------------- */ extern void Int2Str(uint8_t *p_str, uint32_t intnum); extern uint32_t Str2Int(uint8_t *inputstr, uint32_t *intnum); extern void Serial_PutString(uint8_t *p_string); extern HAL_StatusTypeDef Serial_PutByte(uint8_t param); extern HAL_StatusTypeDef Serial_PutBytes(uint8_t* buf, uint16_t len, uint32_t timeout); extern void vty_print(char *format, ...); extern void phy_reset(void); extern void crc32_table_init(void); extern uint32_t crc32_update(uint32_t crc, char* buf, uint32_t len); extern HAL_StatusTypeDef dev_info_init(void); extern HAL_StatusTypeDef dev_info_save(void); extern HAL_StatusTypeDef dev_record_read(void); extern void menu_entry(void); extern void watchdog_refresh(void); #endif /* __COMMON_H */ /************************ (C) COPYRIGHT LandPower *****END OF FILE****/