| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113 |
- #include "FreeRTOS.h"
- #include "board.h"
- #include "chip.h"
- #include "sfud.h"
- #include "romfile.h"
- #include "ota_update.h"
- #include "sysinfo.h"
- #include "ff_stdio.h"
- #include "delta_update.h"
- #include "test_demo.h"
- #ifdef SDMMC1_SUPPORT
- #if SDMMC_TEST
- static int sdcard_read_test(void)
- {
- #ifdef OTA_UPDATE_SUPPORT
- int filetype;
- char filename[32];
- FF_FILE *fp;
- #ifdef DELTA_UPDATE_SUPPORT
- //Demo从U盘读取patch文件来模拟接收patch文件
- size_t filesize;
- uint8_t *filebuf;
- size_t leftsize;
- size_t wrsize;
- uint32_t offset;
- #if DEVICE_TYPE_SELECT != EMMC_FLASH
- sfud_flash *sflash = sfud_get_device(0);
- #endif
- filebuf = pvPortMalloc(0x10000);
- if (!filebuf) {
- printf("%s filebuf malloc fail.\n", __func__);
- return -1;
- }
- for (filetype = UPFILE_TYPE_LDR; filetype < UPFILE_TYPE_NUM; filetype++) {
- strcpy(filename, "/sd/");
- strcat(filename, g_upfilename[filetype]);
- strcpy(strrchr(filename, '.'), "_patch.bin");
- fp = ff_fopen(filename, "rb");
- if (!fp) {
- printf("not found patch file %s.\n", filename);
- continue;
- }
- offset = OTA_MEDIA_OFFSET;
- filesize = ff_filelength(fp);
- leftsize = filesize;
- #if DEVICE_TYPE_SELECT != EMMC_FLASH
- sfud_erase(sflash, OTA_MEDIA_OFFSET, filesize);
- #endif
- while (leftsize) {
- wrsize = leftsize > 0x10000 ? 0x10000 : leftsize;
- ff_fread(filebuf, 1, wrsize, fp);
- #if DEVICE_TYPE_SELECT == EMMC_FLASH
- emmc_write(offset, wrsize, filebuf);
- #else
- sfud_write(sflash, offset, wrsize, filebuf);
- #endif
- offset += wrsize;
- leftsize -= wrsize;
- }
- ff_fclose(fp);
- delta_update(filetype, filesize);
- }
- vPortFree(filebuf);
- #else
- for (filetype = UPFILE_TYPE_LDR; filetype < UPFILE_TYPE_NUM; filetype++) {
- sprintf(filename, "%s/%s", "/sd", g_upfilename[filetype]);
- fp = ff_fopen(filename, "rb");
- if (fp) {
- ff_fclose(fp);
- update_from_media("/sd", filetype);
- }
- }
- if (get_update_status()) {
- printf("%s, entry wdt reset.\n", __func__);
- wdt_cpu_reboot();
- }
- #endif
- #endif
- return 0;
- }
- static void sdcard_read_thread(void *para)
- {
- unsigned int status = 0;
- for (;;) {
- if (!status) {
- mmcsd_wait_sdio_ready_by_name("/sd",portMAX_DELAY);
- printf("card inserted.\n");
- sdcard_read_test();
- } else {
- mmcsd_wait_sdio_unready_by_name("/sd",portMAX_DELAY);
- printf("card removed.\n");
- }
- status = !status;
- }
- vTaskDelete(NULL);
- }
- void sdcard_read_demo(void)
- {
- xTaskCreate(sdcard_read_thread, "sdcard_read_demo", configMINIMAL_STACK_SIZE * 2, NULL, tskIDLE_PRIORITY + 20, NULL);
- }
- #endif
- #endif
|