X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;f=demos%2Fstm32f429_disco%2Fmain.c;fp=demos%2Fstm32f429_disco%2Fmain.c;h=d553ea1f11b9d2abb40c54d424394697f5e71631;hb=0a123dfadb99f0f34c392e8643fde8f69f69d11a;hp=935e94298690a21622b168623880c26af4adca00;hpb=b43526da4f49142491954695917b090e0802b672;p=lwext4.git diff --git a/demos/stm32f429_disco/main.c b/demos/stm32f429_disco/main.c index 935e942..d553ea1 100644 --- a/demos/stm32f429_disco/main.c +++ b/demos/stm32f429_disco/main.c @@ -1,172 +1,169 @@ -/* - * Copyright (c) 2013 Grzegorz Kostka (kostka.grzegorz@gmail.com) - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * - Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include "../../blockdev/test_lwext4.h" - - -/**@brief Read-write size*/ -#define READ_WRITE_SZIZE 1024 * 16 - -/**@brief Delay test (slower LCD scroll)*/ -#define TEST_DELAY_MS 1000 - -/**@brief Input stream name.*/ -char input_name[128] = "ext2"; - -/**@brief Read-write size*/ -static int rw_szie = READ_WRITE_SZIZE; - -/**@brief Read-write size*/ -static int rw_count = 100; - -/**@brief Directory test count*/ -static int dir_cnt = 100; - -/**@brief Static or dynamic cache mode*/ -static bool cache_mode = false; - -/**@brief Cleanup after test.*/ -static bool cleanup_flag = false; - -/**@brief Block device stats.*/ -static bool bstat = false; - -/**@brief Superblock stats.*/ -static bool sbstat = false; - -/**@brief Block device handle.*/ -static struct ext4_blockdev *bd; - -/**@brief Block cache handle.*/ -static struct ext4_bcache *bc; - -static bool open_filedev(void) -{ - - bd = ext4_usb_msc_get(); - bc = ext4_usb_msc_cache_get(); - if(!bd || !bc){ - printf("open_filedev: fail\n"); - return false; - } - return true; -} - -int main(void) -{ - hw_init(); - - setbuf(stdout, 0); - printf("connect usb drive...\n"); - - while(!hw_usb_connected()) - hw_usb_process(); - printf("usb drive connected\n"); - - while(!hw_usb_enum_done()) - hw_usb_process(); - printf("usb drive enum done\n"); - - hw_led_red(1); - - printf("test conditions:\n"); - printf(" rw size: %d\n", rw_szie); - printf(" rw count: %d\n", rw_count); - printf(" cache mode: %s\n", cache_mode ? "dynamic" : "static"); - - if (!open_filedev()) - goto Finish; - - tim_wait_ms(TEST_DELAY_MS); - if(!test_lwext4_mount(bd, bc)) - return EXIT_FAILURE; - - tim_wait_ms(TEST_DELAY_MS); - - ext4_cache_write_back("/mp/", 1); - test_lwext4_cleanup(); - - if(sbstat){ - tim_wait_ms(TEST_DELAY_MS); - test_lwext4_mp_stats(); - } - - tim_wait_ms(TEST_DELAY_MS); - test_lwext4_dir_ls("/mp/"); - if(!test_lwext4_dir_test(dir_cnt)) - return EXIT_FAILURE; - - tim_wait_ms(TEST_DELAY_MS); - if(!test_lwext4_file_test(rw_szie, rw_count)) - return EXIT_FAILURE; - - if(sbstat){ - tim_wait_ms(TEST_DELAY_MS); - test_lwext4_mp_stats(); - } - - if(cleanup_flag){ - tim_wait_ms(TEST_DELAY_MS); - test_lwext4_cleanup(); - } - - if(bstat){ - tim_wait_ms(TEST_DELAY_MS); - test_lwext4_block_stats(); - } - - ext4_cache_write_back("/mp/", 0); - if(!test_lwext4_umount()) - return EXIT_FAILURE; - - printf("press RESET button to restart\n"); - Finish: - while (1) { - tim_wait_ms(500); - hw_led_green(1); - tim_wait_ms(500); - hw_led_green(0); - - } -} - +/* + * Copyright (c) 2013 Grzegorz Kostka (kostka.grzegorz@gmail.com) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * - The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include "../../blockdev/test_lwext4.h" + +/**@brief Read-write size*/ +#define READ_WRITE_SZIZE 1024 * 16 + +/**@brief Delay test (slower LCD scroll)*/ +#define TEST_DELAY_MS 1000 + +/**@brief Input stream name.*/ +char input_name[128] = "ext2"; + +/**@brief Read-write size*/ +static int rw_szie = READ_WRITE_SZIZE; + +/**@brief Read-write size*/ +static int rw_count = 100; + +/**@brief Directory test count*/ +static int dir_cnt = 100; + +/**@brief Static or dynamic cache mode*/ +static bool cache_mode = false; + +/**@brief Cleanup after test.*/ +static bool cleanup_flag = false; + +/**@brief Block device stats.*/ +static bool bstat = false; + +/**@brief Superblock stats.*/ +static bool sbstat = false; + +/**@brief Block device handle.*/ +static struct ext4_blockdev *bd; + +/**@brief Block cache handle.*/ +static struct ext4_bcache *bc; + +static bool open_filedev(void) +{ + + bd = ext4_usb_msc_get(); + bc = ext4_usb_msc_cache_get(); + if (!bd || !bc) { + printf("open_filedev: fail\n"); + return false; + } + return true; +} + +int main(void) +{ + hw_init(); + + setbuf(stdout, 0); + printf("connect usb drive...\n"); + + while (!hw_usb_connected()) + hw_usb_process(); + printf("usb drive connected\n"); + + while (!hw_usb_enum_done()) + hw_usb_process(); + printf("usb drive enum done\n"); + + hw_led_red(1); + + printf("test conditions:\n"); + printf(" rw size: %d\n", rw_szie); + printf(" rw count: %d\n", rw_count); + printf(" cache mode: %s\n", cache_mode ? "dynamic" : "static"); + + if (!open_filedev()) + goto Finish; + + tim_wait_ms(TEST_DELAY_MS); + if (!test_lwext4_mount(bd, bc)) + return EXIT_FAILURE; + + tim_wait_ms(TEST_DELAY_MS); + + ext4_cache_write_back("/mp/", 1); + test_lwext4_cleanup(); + + if (sbstat) { + tim_wait_ms(TEST_DELAY_MS); + test_lwext4_mp_stats(); + } + + tim_wait_ms(TEST_DELAY_MS); + test_lwext4_dir_ls("/mp/"); + if (!test_lwext4_dir_test(dir_cnt)) + return EXIT_FAILURE; + + tim_wait_ms(TEST_DELAY_MS); + if (!test_lwext4_file_test(rw_szie, rw_count)) + return EXIT_FAILURE; + + if (sbstat) { + tim_wait_ms(TEST_DELAY_MS); + test_lwext4_mp_stats(); + } + + if (cleanup_flag) { + tim_wait_ms(TEST_DELAY_MS); + test_lwext4_cleanup(); + } + + if (bstat) { + tim_wait_ms(TEST_DELAY_MS); + test_lwext4_block_stats(); + } + + ext4_cache_write_back("/mp/", 0); + if (!test_lwext4_umount()) + return EXIT_FAILURE; + + printf("press RESET button to restart\n"); +Finish: + while (1) { + tim_wait_ms(500); + hw_led_green(1); + tim_wait_ms(500); + hw_led_green(0); + } +}