/
main.xc
52 lines (38 loc) · 940 Bytes
/
main.xc
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
#include <platform.h>
#include <flash.h>
#define MAX_PSIZE 256
/* initializers defined in XN file
* and available via platform.h */
fl_SPIPorts SPI = { PORT_SPI_MISO,
PORT_SPI_SS,
PORT_SPI_CLK,
PORT_SPI_MOSI,
XS1_CLKBLK_1 };
int upgrade(chanend c, int usize) {
/* obtain an upgrade image and write
* it to flash memory
* error checking omitted */
fl_BootImageInfo b;
unsigned char page[MAX_PSIZE];
int psize;
fl_connect(SPI);
psize = fl_getPageSize();
fl_getFactoryImage(b);
fl_getNextBootImage(b);
while(fl_startImageReplace(b, usize))
;
c :> psize;
while (psize) {
for(int i=0;i<psize;i++)
c :> page[i];
fl_writeImagePage(page);
c :> psize;
}
fl_endWriteImage();
fl_disconnect();
return 0;
}
int main() {
/* main application - calls upgrade
* to perform an in-field upgrade */
}