You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
#include "sample_data_manager_service.h"
#include "board/board.h"
#include "board/board_sdcard_driver.h"
#include "znordic.h"
/*******************************************************************************
* ȫ�ֱ��� * *******************************************************************************/ static FIL m_default_file_handler; static sample_data_fileinfo_list_t m_sample_fileinfo_list; static sample_data_fileinfo_t m_sample_fileinfo[FILE_MAX_COUNT];
/*******************************************************************************
* �ӿڲ� * *******************************************************************************/
static void read_file_info() { /**
* @brief * * fdate: * bit15:9 * Year origin from 1980 (0..127) * bit8:5 * Month (1..12) * bit4:0 * Day of the month(1..31) * ftime: * bit15:11 * Hour (0..23) * bit10:5 * Minute (0..59) * bit4:0 * Second / 2 (0..29) */ FILINFO fno; FRESULT ff_result = f_stat("0.bin", &fno); m_sample_fileinfo_list.fileinfo[0] = &m_sample_fileinfo[0];
if (ff_result == FR_OK) { static sample_data_filename_t _filename; _filename.year = (fno.fdate >> 9) + 1980 - 2000; _filename.month = (fno.fdate >> 5) & 0x0F; _filename.day = fno.fdate & 0x1F; _filename.hour = (fno.ftime >> 11); _filename.min = (fno.ftime >> 5) & 0x3F; _filename.sec = (fno.ftime & 0x1F) * 2; memcpy(m_sample_fileinfo_list.fileinfo[0]->filename, &_filename, sizeof(sample_data_filename_t)); m_sample_fileinfo_list.fileinfo[0]->size = fno.fsize; m_sample_fileinfo_list.count = 1;
ZLOGI("filelist:"); ZLOGI(" name:%s", "0.bin"); ZLOGI(" size:%d", fno.fsize);
} else { m_sample_fileinfo_list.fileinfo[0]->size = 0; m_sample_fileinfo_list.count = 0; } }
/**
* @brief �ļ��������� */ void SampleDataMgr_init() { Board_sdcardInit(); // �����ӵ���Ƭ������ȡ���ļ�״̬��Ϣ
SampleDataMgr_changeToLocalMode(); SampleDataMgr_changeToExtMode(); } void SampleDataMgr_loadDriver() { // donothing
} void SampleDataMgr_unloadDriver() { // donothin
} typedef struct { uint8_t filename[8]; uint32_t filesize;
} disk_state_t;
/**
* @brief �洢�����ӵ�Ƭ�� */ void SampleDataMgr_changeToLocalMode() { ZLOGI("change to local mode"); Board_sdcardConnectToInternal(); read_file_info(); } /**
* @brief �洢�������ⲿtypec */ void SampleDataMgr_changeToExtMode() { ZLOGI("change to ext mode"); if (Board_sdcardGetConnectTo() == kConnectToInternal) { read_file_info(); } Board_sdcardConnectToExt(); }
/**
* @brief �����ļ� * * @param filename * @param flag * @return int32_t */
static FIL m_default_file_handler; static bool m_is_open;
int32_t SampleDataMgr_open(sample_data_filename_t* filename, wrflag_t flag) { if (flag == kwrflag_write_only) { FRESULT ff_result = f_open(&m_default_file_handler, (const TCHAR*)"0.bin", FA_CREATE_ALWAYS | FA_READ | FA_WRITE); ZASSERT(ff_result == FR_OK); m_is_open = true; return 1; } else { FRESULT ff_result = f_open(&m_default_file_handler, (const TCHAR*)"0.bin", FA_READ); if (ff_result != FR_OK) { return -1; } m_is_open = true; return 1; } } int32_t SampleDataMgr_close(int32_t fd) { ZASSERT(m_is_open); FRESULT ff_result = f_close(&m_default_file_handler); ZASSERT(ff_result == FR_OK); m_is_open = false; return 0; } int32_t SampleDataMgr_write(int32_t fd, const uint8_t* data, int32_t size) { ZASSERT(m_is_open); UINT write_size; FRESULT ff_result = f_write(&m_default_file_handler, data, size, &write_size); ZASSERT(ff_result == FR_OK); return write_size; } int32_t SampleDataMgr_read(int32_t fd, uint8_t* data, int32_t size) { ZASSERT(m_is_open); UINT read_size; FRESULT ff_result = f_read(&m_default_file_handler, data, size, &read_size); ZASSERT(ff_result == FR_OK); return read_size; } uint32_t SampleDataMgr_getFileSizeByFd(int32_t fd) { ZASSERT(m_is_open); return f_size(&m_default_file_handler); }
int32_t SampleDataMgr_deleteFile(sample_data_filename_t* filename) { if (Board_sdcardGetConnectTo() == kConnectToExt) { /**
* @brief * �����豸���нΣ�SD�����ӵ����ⲿ��������������ɾ���ļ� */ ZLOGW("unsupport now"); return 0; } f_unlink((const TCHAR*)"0.bin"); return 0; }
sample_data_fileinfo_list_t* SampleDataMgr_getFileinfoList() { //
return &m_sample_fileinfo_list; } bool SampleDataMgr_storageIsFull() { return m_sample_fileinfo_list.count >= FILE_MAX_COUNT; } int32_t SampleDataMgr_getFileNum() { return m_sample_fileinfo_list.count; }
|