aboutsummaryrefslogtreecommitdiffhomepage
path: root/AT91SAM7S256/Source/d_loader.h
blob: 95bcb9d268f5fb6a1802edbe73803622166b0734 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
//
// Date init       14.12.2004
//
// Revision date   $Date:: 24-06-09 12:15                                    $
//
// Filename        $Workfile:: d_loader.h                                    $
//
// Version         $Revision:: 18                                            $
//
// Archive         $Archive:: /LMS2006/Sys01/Main_V02/Firmware/Source/d_load $
//
// Platform        C
//

#ifndef   D_LOADER
#define   D_LOADER

#define   FILETABLE_SIZE                ((2 * SECTORSIZE)/4)
#define   STARTOFFILETABLE              (0x140000L - (FILETABLE_SIZE*4))
#define   FILEPTRTABLE                  ((const ULONG*)(0x140000L - (FILETABLE_SIZE*4)))
#ifndef STARTOFUSERFLASH_FROM_LINKER
#ifndef STRIPPED
#define   STARTOFUSERFLASH              (0x126400L)//(0x124600L) 1.31 == (0x122100L)
#else
#define   STARTOFUSERFLASH              (0x122C00L)//(0x124600L) 1.31 == (0x122100L)
#endif
#define   SIZEOFUSERFLASH_MAX           SIZEOFUSERFLASH
#else
extern char __STARTOFUSERFLASH_FROM_LINKER;
#define   STARTOFUSERFLASH              ((ULONG) &__STARTOFUSERFLASH_FROM_LINKER)
#define   SIZEOFUSERFLASH_MAX           ((ULONG) (128 * 1024))
#endif
#define   SIZEOFUSERFLASH               ((ULONG)STARTOFFILETABLE - STARTOFUSERFLASH)

#define   SIZEOFFLASH                   262144L
#define   SECTORSIZE                    256L
#define   SECTORSIZESHIFT               8
#define   NOOFSECTORS                   (SIZEOFFLASH/SECTORSIZE)
#define   HEADERFIXEDSIZE               (FILENAME_SIZE + 4 + 4 + 4 + 2 + 2)
#define   FILENAME_SIZE                 (FILENAME_LENGTH + 1)

#define   FULLNAME                      1
#define   NAME                          2
#define   EXTENTION                     3
#define   WILDCARD                      4

/* Enum related to HandleTable Status */
enum
{
  FREE,
  BUSY,
  DOWNLOADING,
  SEARCHING,
  DLERROR
};

/* Enum related to HandleTable WriteBufNo */
enum
{
  FREEBUFNO = 0xFF
};


/* Constants related to filetype */
enum
{
  SYSTEMFILE = 0x01,
  DATAFILE   = 0x02,
  LINEAR     = 0x04,
  NONLINEAR  = 0x08
};

/* Enum related to seek operation */
enum
{
  SEEK_FROMSTART,
  SEEK_FROMCURRENT,
  SEEK_FROMEND
};

typedef   struct
{
  UBYTE   FileName[FILENAME_SIZE];
  ULONG   FileStartAdr;
  ULONG   FileSize;
  ULONG   DataSize;
  UWORD   CheckSum;
  UWORD   FileType;
  UWORD   FileSectorTable[(SIZEOFUSERFLASH_MAX/SECTORSIZE)];
}FILEHEADER;

void      dLoaderInit(void);
__ramfunc UWORD dLoaderWritePage(ULONG Flash_Address, UWORD Size, ULONG *pBuf);
UWORD     dLoaderInsertPtrTable(const UBYTE *pAdr, UWORD Handle);
UWORD     dLoaderCreateFileHeader(ULONG FileSize, UBYTE *pName, UBYTE LinearState, UBYTE FileType);
UWORD     dLoaderWriteData(UWORD Handle, UBYTE *pBuf, UWORD *pLen);
UWORD     dLoaderCloseHandle(UWORD Handle);
UWORD     dLoaderOpenRead(UBYTE *pFileName, ULONG *pLength);
UWORD     dLoaderSeek(UBYTE Handle, SLONG offset, UBYTE from);
UWORD     dLoaderTell(UBYTE Handle, ULONG* filePos);
UWORD     dLoaderRead(UBYTE Handle, UBYTE *pBuf, ULONG *pLength);
UWORD     dLoaderDelete(UBYTE *pFile);
UWORD     dLoaderFind(UBYTE *pFind, UBYTE *pFound, ULONG *pFileLength, ULONG *pDataLength, UBYTE Session);
UWORD     dLoaderFindNext(UWORD Handle, UBYTE *pFound, ULONG *pFileLength, ULONG *pDataLength);
UWORD     dLoaderDeleteFilePtr(UWORD Handle);
void      dLoaderDeleteAllFiles(void);
UWORD     dLoaderGetFilePtr(UBYTE *pFileName, UBYTE *pPtrToFile, ULONG *pFileLength);
void      dLoaderCopyFileName(UBYTE *pDst, UBYTE *pSrc);
UWORD     dLoaderOpenAppend(UBYTE *pFileName, ULONG *pAvailSize);
void      dLoaderCpyToLower(UBYTE *pDst, UBYTE *pSrc, UBYTE Length);
UWORD     dLoaderCheckName(UBYTE *pName, UBYTE *pSearchStr, UBYTE SearchType);
void      dLoaderInsertSearchStr(UBYTE *pDst, UBYTE *pSrc, UBYTE *pSearchType);
ULONG     dLoaderReturnFreeUserFlash(void);
UWORD     dLoaderRenameFile(UBYTE Handle, UBYTE *pNewName);
UWORD     dLoaderCheckFiles(UBYTE Handle);

UWORD     dLoaderCropDatafile(UBYTE Handle);



void      dLoaderExit(void);

#endif