optical/EMBOS/Users/EmbFunc/operator/datafile.h
2025-09-04 09:45:08 +08:00

244 lines
5.8 KiB
C
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#ifndef __DATAFILE_H__
#define __DATAFILE_H__
#include "datadef.h"
#include "exram.h"
//-------------------------------------------------------------------------
#define MAX_FILE_NUM 16 // 支持可保存文件的个数16 个文件
#define DATA_FILE_ADDR1 EXRAM1_DATA_ADDR_BEG
#define DATA_FILE_ADDR2 EXRAM2_DATA_ADDR_BEG
#define DATA_FILE_SIZE1 MAX_DATA_EXRAM1_SIZE
#define DATA_FILE_SIZE2 MAX_DATA_EXRAM2_SIZE
#define DATA_FILE_SIZE (DATA_FILE_SIZE1+DATA_FILE_SIZE2)
#ifndef DATA_FILE_SIZE3
#define DATA_FILE_SIZE3 (0)
#endif
#ifndef DATA3_BASE_ADDR
#define DATA3_BASE_ADDR (EXRAM1_BASE_ADDR)
#endif
//-------------------------------------------------------------------------
/*
* 文件交换区域块(缓冲区)的个数
* 需为10的整倍数,最小为10
* 以当前索引为基准,按照向后:向前 7:3的比例进行数据请求,当前索引所在数据块计入向后部分
* 数据存储在SRAM中
*/
#ifndef FILE_EXBUF_NUM
#define FILE_EXBUF_NUM (50)
#endif
#define DAT_BLOCK_SIZE (1024) // 每个缓冲区大小
#define ITEM_NUM_PER_BLK ((DAT_BLOCK_SIZE)/sizeof(DataItem)) // 每个缓冲区可存储针数
#define REQUEST_GAP 200 // 请求时间间隔,单位ms
typedef struct
{
int exbufFlag[FILE_EXBUF_NUM]; // 缓冲区有效标志 0,无效
u32 datExBeg [FILE_EXBUF_NUM]; // 数据块偏移起始
u8 datExBlock[FILE_EXBUF_NUM][DAT_BLOCK_SIZE]; // 数据块内容缓冲区
}DatExCtrl;
// 数据文件
typedef struct
{
int enflag; // 文件有效标志,
int storage; // 文件存储方式0存在外部SRAM中; 1, 存在外部NorFLASH中; 2, 存储在外部NandFlash中; 3, 存在上位机中(网络);
int newFile; // 新文件标志
u32 fileIdxMap;
s32 fileIdx; // 当前文件
DataFileHead * pFileHead; // 数据文件描述
u32 dataBuff1BegAddr; // 数据文件存放区1地址
u32 dataBuff1Len; // 数据文件存放区1大小
u32 dataBuff2BegAddr; // 数据文件存放区2地址
u32 dataBuff2Len; // 数据文件存放区2大小
u32 dataBuff3BegAddr; // 数据文件存放区3地址,从EXRAM中独立一块区域出来,用于存放边框刺绣等类型的文件
u32 dataBuff3Len; // 数据文件存放区3大小
// 网络文件
DatExCtrl * pDatExCtrl; // 文件交换缓冲区
}DatFileCtrl;
#define STORAGE_EXSRAM 0 // 存储在SRAM中
#define STORAGE_NORFLASH 1 // 存储在NORFlash中
#define STORAGE_NANDFLASH 2 // 存储在NANDFlash中
#define STORAGE_NETWORK 3 // 存储在网络服务器中
#define STORAGE_SRAMANDNOR 4 // 存储在SRAM和NorFlash中
#define STORAGE_TRANS 5 // 数据转发,不做存储
#define STORAGE_SPAREARAM 6 // 存储在SRAM的特定区域内,用于存储边框刺绣等类型的文件
#define STORAGE_INFLASH 7 // 存储在内部FLASH中
//-------------------------------------------------------------------------
#define MAX_SQRT 256
typedef struct
{
float begx;
float begy; // 起点
float midx;
float midy; // 中间点
/*
float midx2;
float midy2; // 中间点2
*/
float endx;
float endy; // 终点
u8 line_type; // 类型 = 0 直线 = 1 圆 = 2 样条曲线
u8 type; // 类型
u8 blockNum; // 起始锁针针数
u8 blockTimes; // 起始锁针次数
u8 elockNum; // 结束锁针针数
u8 elockTimes; // 结束锁针次数
u8 blockjumps; // 起始跳过针数
u8 elockjumps; // 结束跳过针数
u32 stepSize; // 步长
}__attribute__ ((packed)) SqrtItem;
typedef struct
{
SqrtItem sqrtItem[MAX_SQRT]; // 图形列表
int sqrtNum; // 个数
u32 stepSize; // 步长
u8 blockNum; // 起始锁针针数
u8 blockTimes; // 起始锁针次数
u8 elockNum; // 结束锁针针数
u8 elockTimes; // 结束锁针次数
u8 blockjumps; // 起始跳过针数
u8 elockjumps; // 结束跳过针数
s32 startx;
s32 starty;
s32 startx2;
s32 starty2;
u8 defofst;
} SqrtInfo;
int CreateCommFile(SqrtInfo * pSqrt);
int WriteTestFile(int sel, int cx, int cy, int sx, int sy, int dex, int dey, u16 type, int stepSize);
//-------------------------------------------------------------------------
#ifdef _IN_DATAFILE_C
DatFileCtrl g_datFile;
DataFileHead g_fileHead1;
DataFileHead g_fileHead2;
#else
extern DatFileCtrl g_datFile;
extern DataFileHead g_fileHead1;
extern DataFileHead g_fileHead2;
#endif
//-------------------------------------------------------------------------
// 得到一针缝纫数据
int GetADataItem(u8 fileBlk, u32 idx, DataItem * pDat);
int GetADataItemNoSqrt(u8 fileBlk, u32 idx, DataItem * pDat);
int GetADataItemBase(u8 fileBlk, u32 idx, DataItem * pDat, int sqrtflag);
int WriteADataItem(u8 fileBlk, u32 idx, DataItem * pDat);
int WriteFileData(u8 fileBlk, u32 begaddr, u8 * pBuf, u32 size);
u32 GetFileItemNums(void);
s32 GetFileWide(void);
s32 GetFileHigh(void);
int GetMinMaxFromFileDatWithAnchor(s32 * pminx, s32 * pmaxx, s32 * pminy, s32 * pmaxy);
int GetMinMaxFromFileDat(s32 * pminx, s32 * pmaxx, s32 * pminy, s32 * pmaxy);
int GetMinMaxFromFileDatBase(int point, s32 * pminx, s32 * pmaxx, s32 * pminy, s32 * pmaxy);
int InvalidDatFile(u32 idx);
int AvalidDatFile(u32 idx);
int IsDatFileAvailable(void);
int IsDatIndexAvailable(u32 idx);
void InvalidDatBlock(void);
void SetNewDatFlag(u32 idx, int en);
int IsNewDatFile(u32 idx);
void InitNorSectorManage(void);
void NorAllocAndSetUsingFlags(int allocBytes);
int ReleaseSpace(int sync);
//-------------------------------------------------------------------------
void InitDatFiles(void);
void OutFileInfo(void);
int IsDatIdxInBuf(int idx);
int GetBlockIdxNeedtoLoad(int datidx);
#ifndef TEMP_DATA1_SIZE
#define TEMP_DATA1_SIZE (0)
#endif
#ifndef TEMP_DATA1_ADDR
#define TEMP_DATA1_ADDR (EXRAM1_BASE_ADDR)
#endif
#ifndef TEMP_DATA2_SIZE
#define TEMP_DATA2_SIZE (0)
#endif
#ifndef TEMP_DATA2_ADDR
#define TEMP_DATA2_ADDR (TEMP_DATA1_ADDR+TEMP_DATA1_SIZE)
#endif
#ifndef TEMP_DATA3_SIZE
#define TEMP_DATA3_SIZE (0)
#endif
#ifndef TEMP_DATA3_ADDR
#define TEMP_DATA3_ADDR (TEMP_DATA2_ADDR+TEMP_DATA2_SIZE)
#endif
#ifndef TEMP_DATA4_SIZE
#define TEMP_DATA4_SIZE (0)
#endif
#ifndef TEMP_DATA4_ADDR
#define TEMP_DATA4_ADDR (TEMP_DATA3_ADDR+TEMP_DATA3_SIZE)
#endif
void InitTempData(int type);
u8 * GetTempData(int type);
int SetTempData(int type, int idx, u8 * pBuf);
//-------------------------------------------------------------------------
#endif