Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
config.c
00001 /**************************************************************************** 00002 * Copyright 2010 Andy Kirkham, Stellar Technologies Ltd 00003 * 00004 * This file is part of the Satellite Observers Workbench (SOWB). 00005 * 00006 * SOWB is free software: you can redistribute it and/or modify 00007 * it under the terms of the GNU General Public License as published by 00008 * the Free Software Foundation, either version 3 of the License, or 00009 * (at your option) any later version. 00010 * 00011 * SOWB is distributed in the hope that it will be useful, 00012 * but WITHOUT ANY WARRANTY; without even the implied warranty of 00013 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00014 * GNU General Public License for more details. 00015 * 00016 * You should have received a copy of the GNU General Public License 00017 * along with SOWB. If not, see <http://www.gnu.org/licenses/>. 00018 * 00019 * $Id: main.cpp 5 2010-07-12 20:51:11Z ajk $ 00020 * 00021 ***************************************************************************/ 00022 00023 /* Need to come back and finish this. */ 00024 00025 #include "sowb.h" 00026 #include "user.h" 00027 #include "debug.h" 00028 #include "config.h" 00029 #include "ff.h" 00030 00031 CONFIG_UNION system_config; 00032 00033 bool config_block_process; 00034 bool config_loaded; 00035 bool config_reload; 00036 00037 /** config_init 00038 */ 00039 void config_init(void) { 00040 int i, j; 00041 00042 DEBUG_INIT_START; 00043 00044 /* 00045 for (i = CONFIG_FLASH_PAGE_BASE, j = 0; i < 4096; i++, j++) { 00046 flash_read_page(i, system_config.buffers[j], true); 00047 } 00048 00049 config_loaded = true; 00050 config_reload = false; 00051 config_block_process = false; 00052 */ 00053 00054 DEBUG_INIT_END; 00055 } 00056 00057 /** config_process 00058 */ 00059 void config_process(void) { 00060 00061 /* For long period operations (e.g. config_save()) that may call 00062 system _process() functions, block ourselves from re-entering. */ 00063 if (config_block_process) return; 00064 00065 } 00066 00067 void config_save(void) { 00068 int i, j; 00069 char buffer[FLASH_PAGE_SIZE]; 00070 00071 /* Don't re-enter this function from _process(). */ 00072 config_block_process = true; 00073 00074 /* Sector 15 is used as a "scratch area". It allows us to store 00075 pages from other sectors that we need to "restore" since the 00076 LPC1768 doesn't have enough space to store entire sectors. */ 00077 while (flash_sector_erase_in_progress()) WHILE_WAITING_DO_PROCESS_FUNCTIONS; 00078 flash_erase_sector(15); 00079 while (flash_sector_erase_in_progress()) WHILE_WAITING_DO_PROCESS_FUNCTIONS; 00080 00081 /* We need to make a copy of all the pages below our config area 00082 before we store our configuration. */ 00083 for (i = 4096 - 256; i < CONFIG_FLASH_PAGE_BASE; i++) { 00084 flash_read_page(i, buffer, true); 00085 flash_page_write(3840 + i, buffer); 00086 while(flash_write_in_progress()) WHILE_WAITING_DO_PROCESS_FUNCTIONS; 00087 } 00088 00089 /* Now erase the sector in which our config resides. */ 00090 while (flash_sector_erase_in_progress()) WHILE_WAITING_DO_PROCESS_FUNCTIONS; 00091 flash_erase_sector(14); 00092 while (flash_sector_erase_in_progress()) WHILE_WAITING_DO_PROCESS_FUNCTIONS; 00093 00094 00095 for (i = CONFIG_FLASH_PAGE_BASE, j = 0; i < CONFIG_FLASH_PAGE_BASE + CONFIG_FLASH_PAGES; i++, j++) { 00096 while(flash_write_in_progress() || flash_sector_erase_in_progress()) { 00097 WHILE_WAITING_DO_PROCESS_FUNCTIONS; 00098 } 00099 flash_page_write(i, system_config.buffers[j]); 00100 } 00101 00102 config_block_process = false; 00103 } 00104 00105 /** config_copy_flash_page 00106 * 00107 * Used to copy the raw config struct, page by page 00108 * to an external memory buffer. 00109 * 00110 * @param int page The page to copy. 00111 * @param char* buffer The buffer to copy the page to. 00112 */ 00113 void config_copy_flash_page(int page, char *buffer) { 00114 memcpy(buffer, system_config.buffers[page], FLASH_PAGE_SIZE); 00115 } 00116 00117 /** config_get_page 00118 * 00119 * Get the base address of a specific page of config data. 00120 * 00121 * @param int page The page to get the address of. 00122 * @return char* The address of the page. 00123 */ 00124 char * config_get_page(int page) { 00125 return system_config.buffers[page]; 00126 } 00127 00128 00129
Generated on Tue Jul 12 2022 18:05:34 by
1.7.2