added toplevel makefile for xpd

This commit is contained in:
dan
2014-01-22 11:00:41 +00:00
parent 7c42307440
commit 98b3bdba95
47 changed files with 2789 additions and 2778 deletions

View File

@@ -4,7 +4,7 @@
#include <string.h>
#include <xclib.h>
#ifndef FLASH_MAX_UPGRADE_SIZE
#ifndef FLASH_MAX_UPGRADE_SIZE
#define FLASH_MAX_UPGRADE_SIZE 128 * 1024 // 128K default
#endif
@@ -40,11 +40,11 @@ void DFUCustomFlashDisable()
return;
}
int flash_cmd_init(void)
int flash_cmd_init(void)
{
fl_BootImageInfo image;
if (!flash_device_open)
if (!flash_device_open)
{
if (flash_cmd_enable_ports())
flash_device_open = 1;
@@ -56,14 +56,14 @@ int flash_cmd_init(void)
// Disable flash protection
fl_setProtection(0);
if (fl_getFactoryImage(&image) != 0)
if (fl_getFactoryImage(&image) != 0)
{
return 0;
}
factory_image = image;
if (fl_getNextBootImage(&image) == 0)
if (fl_getNextBootImage(&image) == 0)
{
upgrade_image_valid = 1;
upgrade_image = image;
@@ -72,43 +72,43 @@ int flash_cmd_init(void)
return 0;
}
int flash_cmd_deinit(void)
int flash_cmd_deinit(void)
{
if (!flash_device_open)
return 0;
flash_cmd_disable_ports();
flash_device_open = 0;
return 0;
}
int flash_cmd_read_page(unsigned char *data)
int flash_cmd_read_page(unsigned char *data)
{
if (!upgrade_image_valid)
if (!upgrade_image_valid)
{
*(unsigned int *)data = 1;
return 4;
}
if (*(unsigned int *)data == 0)
if (*(unsigned int *)data == 0)
{
fl_startImageRead(&upgrade_image);
}
current_flash_subpage_index = 0;
if (fl_readImageRead(current_flash_page_data) == 0)
if (fl_readImageRead(current_flash_page_data) == 0)
{
*(unsigned int *)data = 0;
}
else
}
else
{
*(unsigned int *)data = 1;
}
return 4;
}
int flash_cmd_read_page_data(unsigned char *data)
int flash_cmd_read_page_data(unsigned char *data)
{
unsigned char *page_data_ptr = &current_flash_page_data[current_flash_subpage_index * 64];
memcpy(data, page_data_ptr, 64);
@@ -124,27 +124,27 @@ static void begin_write()
// TODO this will take a long time. To minimise the amount of time spent
// paused on this operation it would be preferable to move to this to a
// seperate command, e.g. start_write.
do
do
{
result = fl_startImageAdd(&factory_image, FLASH_MAX_UPGRADE_SIZE, 0);
} while (result > 0);
if (result < 0)
FLASH_ERROR();
}
static int pages_written = 0;
int flash_cmd_write_page(unsigned char *data)
int flash_cmd_write_page(unsigned char *data)
{
unsigned int flag = *(unsigned int *)data;
if (upgrade_image_valid)
if (upgrade_image_valid)
{
return 0;
}
}
switch (flag)
switch (flag)
{
case 0:
// First page.
@@ -158,7 +158,7 @@ int flash_cmd_write_page(unsigned char *data)
// Termination.
if (fl_endWriteImage() != 0)
FLASH_ERROR();
// Sanity check
fl_BootImageInfo image = factory_image;
if (fl_getNextBootImage(&image) != 0)
@@ -173,7 +173,7 @@ int flash_cmd_write_page(unsigned char *data)
static int isAllOnes(unsigned char page[256])
{
unsigned i;
for (i = 0; i < 256; i++)
for (i = 0; i < 256; i++)
{
if (page[i] != 0xff)
return 0;
@@ -181,16 +181,16 @@ static int isAllOnes(unsigned char page[256])
return 1;
}
int flash_cmd_write_page_data(unsigned char *data)
int flash_cmd_write_page_data(unsigned char *data)
{
unsigned char *page_data_ptr = &current_flash_page_data[current_flash_subpage_index * 64];
if (upgrade_image_valid)
if (upgrade_image_valid)
{
return 0;
}
if (current_flash_subpage_index >= 4)
if (current_flash_subpage_index >= 4)
{
return 0;
}
@@ -199,11 +199,11 @@ int flash_cmd_write_page_data(unsigned char *data)
current_flash_subpage_index++;
if (current_flash_subpage_index == 4)
if (current_flash_subpage_index == 4)
{
if (isAllOnes(data))
FLASH_ERROR();
if (fl_writeImagePage(current_flash_page_data) != 0)
if (fl_writeImagePage(current_flash_page_data) != 0)
FLASH_ERROR();
pages_written++;
}
@@ -211,22 +211,22 @@ int flash_cmd_write_page_data(unsigned char *data)
return 0;
}
int flash_cmd_erase_all(void)
int flash_cmd_erase_all(void)
{
fl_BootImageInfo tmp_image = upgrade_image;
if (upgrade_image_valid)
if (upgrade_image_valid)
{
if (fl_deleteImage(&upgrade_image) != 0)
{
FLASH_ERROR();
}
// Keep deleting all upgrade images
// TODO Perhaps using replace would be nicer...
// TODO Perhaps using replace would be nicer...
while(1)
{
if (fl_getNextBootImage(&tmp_image) == 0)
if (fl_getNextBootImage(&tmp_image) == 0)
{
if (fl_deleteImage(&tmp_image) != 0)
{
@@ -238,7 +238,7 @@ int flash_cmd_erase_all(void)
break;
}
}
upgrade_image_valid = 0;
}
return 0;