optical/EMBOS/Users/EmbFunc/operator/datafile.h

244 lines
5.8 KiB
C
Raw Normal View History

2025-09-04 01:45:08 +00:00
#ifndef __DATAFILE_H__
#define __DATAFILE_H__
#include "datadef.h"
#include "exram.h"
//-------------------------------------------------------------------------
#define MAX_FILE_NUM 16 // ֧<>ֿɱ<D6BF><C9B1><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC>ĸ<EFBFBD><C4B8><EFBFBD><EFBFBD><EFBFBD>16 <20><><EFBFBD>ļ<EFBFBD>
#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
//-------------------------------------------------------------------------
/*
* <EFBFBD>ļ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĸ<EFBFBD><EFBFBD><EFBFBD>
* <EFBFBD><EFBFBD>Ϊ10<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<EFBFBD><EFBFBD>СΪ10
* <EFBFBD>Ե<EFBFBD>ǰ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><EFBFBD>׼,<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:<EFBFBD><EFBFBD>ǰ 7:3<EFBFBD>ı<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<EFBFBD><EFBFBD>ǰ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>󲿷<EFBFBD>
* <EFBFBD><EFBFBD><EFBFBD>ݴ<EFBFBD><EFBFBD>SRAM<EFBFBD><EFBFBD>
*/
#ifndef FILE_EXBUF_NUM
#define FILE_EXBUF_NUM (50)
#endif
#define DAT_BLOCK_SIZE (1024) // ÿ<><C3BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С
#define ITEM_NUM_PER_BLK ((DAT_BLOCK_SIZE)/sizeof(DataItem)) // ÿ<><C3BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɴ洢<C9B4><E6B4A2><EFBFBD><EFBFBD>
#define REQUEST_GAP 200 // <20><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><>λms
typedef struct
{
int exbufFlag[FILE_EXBUF_NUM]; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч<EFBFBD><D0A7>־ 0,<2C><>Ч
u32 datExBeg [FILE_EXBUF_NUM]; // <20><><EFBFBD>ݿ<EFBFBD>ƫ<EFBFBD><C6AB><EFBFBD><EFBFBD>ʼ
u8 datExBlock[FILE_EXBUF_NUM][DAT_BLOCK_SIZE]; // <20><><EFBFBD>ݿ<EFBFBD><DDBF><EFBFBD><EFBFBD>ݻ<EFBFBD><DDBB><EFBFBD><EFBFBD><EFBFBD>
}DatExCtrl;
// <20><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>
typedef struct
{
int enflag; // <20>ļ<EFBFBD><C4BC><EFBFBD>Ч<EFBFBD><D0A7>־<EFBFBD><D6BE>
int storage; // <20>ļ<EFBFBD><C4BC><EFBFBD><E6B4A2>ʽ<EFBFBD><CABD>0<EFBFBD><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ⲿSRAM<41><4D>; 1, <20><><EFBFBD><EFBFBD><EFBFBD>ⲿNorFLASH<53><48>; 2, <20><EFBFBD><E6B4A2><EFBFBD>ⲿNandFlash<73><68>; 3, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD>(<28><><EFBFBD><EFBFBD>);
int newFile; // <20><><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>־
u32 fileIdxMap;
s32 fileIdx; // <20><>ǰ<EFBFBD>ļ<EFBFBD>
DataFileHead * pFileHead; // <20><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>
u32 dataBuff1BegAddr; // <20><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>1<EFBFBD><31>ַ
u32 dataBuff1Len; // <20><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>1<EFBFBD><31>С
u32 dataBuff2BegAddr; // <20><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>2<EFBFBD><32>ַ
u32 dataBuff2Len; // <20><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>2<EFBFBD><32>С
u32 dataBuff3BegAddr; // <20><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>3<EFBFBD><33>ַ,<2C><>EXRAM<41>ж<EFBFBD><D0B6><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD>ڴ<EFBFBD><DAB4>ű߿<C5B1><DFBF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͵<EFBFBD><CDB5>ļ<EFBFBD>
u32 dataBuff3Len; // <20><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>3<EFBFBD><33>С
// <20><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>
DatExCtrl * pDatExCtrl; // <20>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}DatFileCtrl;
#define STORAGE_EXSRAM 0 // <20><EFBFBD><E6B4A2>SRAM<41><4D>
#define STORAGE_NORFLASH 1 // <20><EFBFBD><E6B4A2>NORFlash<73><68>
#define STORAGE_NANDFLASH 2 // <20><EFBFBD><E6B4A2>NANDFlash<73><68>
#define STORAGE_NETWORK 3 // <20><EFBFBD><E6B4A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define STORAGE_SRAMANDNOR 4 // <20><EFBFBD><E6B4A2>SRAM<41><4D>NorFlash<73><68>
#define STORAGE_TRANS 5 // <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>,<2C><><EFBFBD><EFBFBD><EFBFBD>
#define STORAGE_SPAREARAM 6 // <20><EFBFBD><E6B4A2>SRAM<41><4D><EFBFBD>ض<EFBFBD><D8B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD>ڴ洢<DAB4>߿<EFBFBD><DFBF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͵<EFBFBD><CDB5>ļ<EFBFBD>
#define STORAGE_INFLASH 7 // <20><EFBFBD><E6B4A2><EFBFBD>ڲ<EFBFBD>FLASH<53><48>
//-------------------------------------------------------------------------
#define MAX_SQRT 256
typedef struct
{
float begx;
float begy; // <20><><EFBFBD><EFBFBD>
float midx;
float midy; // <20>м<EFBFBD><D0BC><EFBFBD>
/*
float midx2;
float midy2; // <20>м<EFBFBD><D0BC><EFBFBD>2
*/
float endx;
float endy; // <20>յ<EFBFBD>
u8 line_type; // <20><><EFBFBD><EFBFBD> = 0 ֱ<><D6B1> = 1 Բ = 2 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
u8 type; // <20><><EFBFBD><EFBFBD>
u8 blockNum; // <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
u8 blockTimes; // <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
u8 elockNum; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
u8 elockTimes; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
u8 blockjumps; // <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
u8 elockjumps; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
u32 stepSize; // <20><><EFBFBD><EFBFBD>
}__attribute__ ((packed)) SqrtItem;
typedef struct
{
SqrtItem sqrtItem[MAX_SQRT]; // ͼ<><CDBC><EFBFBD>б<EFBFBD>
int sqrtNum; // <20><><EFBFBD><EFBFBD>
u32 stepSize; // <20><><EFBFBD><EFBFBD>
u8 blockNum; // <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
u8 blockTimes; // <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
u8 elockNum; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
u8 elockTimes; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
u8 blockjumps; // <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
u8 elockjumps; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
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
//-------------------------------------------------------------------------
// <20>õ<EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
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