#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