244 lines
5.8 KiB
C
244 lines
5.8 KiB
C
|
||
#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
|
||
|
||
|
||
|
||
|