stm32_ota/SYSTEM/SYSLIB/syslib.h

82 lines
3.7 KiB
C
Raw Permalink Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

#ifndef __SYSLIB_H
#define __SYSLIB_H
#include <stdint.h>
#include <string.h>
#include "stm32f10x.h"
/********************************************************
*常变量定义
*********************************************************/
/*二级stringfication,将宏定义转为字符串*/
#define STR1(R) #R //#:会把参数转换为字符串
#define STR2(R) STR1(R) //二级stringfication,将宏定义转为字符串
#define ENUM_CHIP_TYPE_CASE(x) case x: return(#x) ; //#:会把参数转换为字符串
typedef enum {InParamErr = 0, OutParamErr = 1, RUNERR = 2, RUNOK=3, TIMEOUT=4} RunResult ; //RunResult枚举类型用于枚举函数执行结果类型
/**************************************************************************************************
* 名 称: static inline const char *RunResultToString(RunResult result)
* 功能说明: 输出枚举成员名的字符串指针。
* 入口参数: RunResult类型的枚举
* 出口参数: 为枚举的成员名字符串指针
**************************************************************************************************/
static inline const char *RunResultToString(RunResult result)
{
switch (result)
{
ENUM_CHIP_TYPE_CASE(InParamErr)
ENUM_CHIP_TYPE_CASE(OutParamErr)
ENUM_CHIP_TYPE_CASE(RUNERR)
ENUM_CHIP_TYPE_CASE(RUNOK)
ENUM_CHIP_TYPE_CASE(TIMEOUT)
}
return "未知错误";
}
/*环形缓冲区代码*/
#define MAX_QUEUE_LEN (1024*2) //帧环形缓冲区长度bytes
#define RW_OK 0 //帧环形缓冲区读数据成功
#define FULL_ERROR 1 //帧环形缓冲区写数据溢出
#define EMPTY_ERROR 2 //帧环形缓冲区读数据空
#define HEAD1 0x12 //帧数据帧头第一个字节
#define HEAD2 0x34 //帧数据帧头第二个字节
#define TAIL1 0x56 //帧数据帧尾第一个字节
#define TAIL2 0x78 //帧数据帧尾第二个字节
/********************************************************
*自定义数据类型
*********************************************************/
typedef struct
{
volatile uint16_t getIndex ; //帧环形缓冲区读指针
volatile uint16_t insertIndex ; //帧环形缓冲区写指针
volatile uint16_t hasDataLen ; //帧环形缓冲区现有数据长度
char dataBuf[MAX_QUEUE_LEN];//帧环形缓冲区数据区
} FrameQueue_s ; //帧环形缓冲区结构体
/*****************************************
*内部函数声明
****************************************/
void kmp_next2(const char* _ptn, char* _next) ;
/*****************************************
*对外接口函数声明
****************************************/
extern void InitQueueMem(FrameQueue_s *sFrame) ; //环形缓冲区初始化
extern uint8_t InsertQueueMemData(FrameQueue_s *sFrame, char *data, uint16_t len) ; //插入帧数据到环形缓冲区中
extern uint8_t GetQueueMemData(FrameQueue_s* sFrame, char* data, uint16_t* pLen); //从环形缓冲区中取出一帧数据
extern void SysStrcat(char *dest, uint16_t destSize, char *src) ; //将destSize长度的数据src拷贝到dest中
extern void CopyStr(char *dest, char *src, char startLot, char endLot, uint16_t maxLen) ; //从src的startLot字符开始endLot字符结束的数据拷贝到dest中
extern uint16_t CopyValues(uint8_t *dest, uint8_t *src, uint8_t lot, uint16_t maxLen) ; //将src中的数据拷贝到dest中遇到lot或者拷贝长度大约maxLen则停止拷贝
extern void HexConvertToString(uint8_t * dest, uint8_t * src, uint16_t length); //hex数组转字符串
extern void ByteToHexStr( uint8_t* dest, const uint8_t* src, uint16_t sourceLen) ; //byte转字符串
extern int kmp(const char* _str, const char* _ptn) ; //查找子串
//extern uint16_t atoi(const char *nptr) ;
extern char *itoa(int value, char *string, int radix) ;
extern char * uitoa(unsigned int value, char *string) ;
#endif