s32 bsp_RfileCallback(u32 channel_id, u32 len, void *context) { void *pData; s32 ret; pData = Rfile_Malloc(len); if(!pData) { bsp_trace(BSP_LOG_LEVEL_DEBUG, BSP_MODU_RFILE, "%d.\n", __LINE__); return BSP_ERROR; } ret = bsp_icc_read(RFILE_MCORE_ICC_RD_CHAN, pData, len); if(len != ret) { bsp_trace(BSP_LOG_LEVEL_ERROR, BSP_MODU_RFILE, "icc_read failed %d.\n", ret); Rfile_Free(pData); return BSP_ERROR; } rfile_CommonCnf(pData); Rfile_Free(pData); osSemaphoreRelease(g_stRfileMain.semReq); return BSP_OK; }
s32 bsp_open(const s8 *path, s32 flags, s32 mode) { s32 ret; u32 ulNameLen, ulSize; struct bsp_rfile_open_req *pstReq; osSemaphoreWait(g_stRfileMain.semAll, osWaitForever); if(!path) { return BSP_ERROR; } ulNameLen = strlen(path) + 1; ulSize = sizeof(struct bsp_rfile_open_req) + ulNameLen; if(ulSize > RFILE_LEN_MAX) { return BSP_ERROR; } pstReq = Rfile_Malloc(ulSize); if(!pstReq) { return BSP_ERROR; } pstReq->opType = EN_RFILE_OP_OPEN; pstReq->pstlist = NULL; pstReq->nameLen = ulNameLen; pstReq->mode = mode; pstReq->flags = flags; memcpy(pstReq->aucData, path, ulNameLen); ret = bsp_icc_send(ICC_CPU_APP, RFILE_MCORE_ICC_WR_CHAN, pstReq, ulSize); if (ulSize != ret) { bsp_trace(BSP_LOG_LEVEL_DEBUG, BSP_MODU_RFILE, "%d.\n", __LINE__); g_stRfileMain.ret = -1; } else { osSemaphoreWait(g_stRfileMain.semReq, osWaitForever); } Rfile_Free(pstReq); osSemaphoreRelease(g_stRfileMain.semAll); return g_stRfileMain.ret; }
static s32 rfile_write(u32 fd ,void *ptr, u32 size) { s32 ret; struct bsp_rfile_write_req *pstReq; u32 ulLen; ulLen = sizeof(struct bsp_rfile_write_req) + size; pstReq = Rfile_Malloc(ulLen); if(!pstReq) { bsp_trace(BSP_LOG_LEVEL_DEBUG, BSP_MODU_RFILE, "%d.\n", __LINE__); return BSP_ERROR; } pstReq->opType = EN_RFILE_OP_WRITE; pstReq->pstlist = NULL; pstReq->fd = fd; pstReq->ulSize = size; memcpy(pstReq->aucData, ptr, size); ret = bsp_icc_send(ICC_CPU_APP, RFILE_MCORE_ICC_WR_CHAN, pstReq, ulLen); if (ulLen != ret) { bsp_trace(BSP_LOG_LEVEL_DEBUG, BSP_MODU_RFILE, "%d.\n", __LINE__); g_stRfileMain.ret = -1; } else { osSemaphoreWait(g_stRfileMain.semReq, osWaitForever); } Rfile_Free(pstReq); return g_stRfileMain.ret; }
/************************************************************************* 函 数 名 : rfile_test_001 功能描述 : 新建目录-->新建文件-->写入内容-->读取内容-->关闭文件-->获取文件状态 *************************************************************************/ s32 rfile_test_001(void) { s32 ret; s8 *dirpar = "/rfiletest001"; s8 *filepath = "/rfiletest001/rfile001.txt"; s8 *wrbuf = "1234567890abcdefghijklmnopqrstuvwxyz"; s8 *rfilewrtmp = NULL; s8 *rfilerdtmp = NULL; s8 rdbuf[64] = {0}; s32 pfile; struct rfile_stat_stru buf = {0}; rfile_print_info("[%s] start =======================================.\n\n", __FUNCTION__); rfile_print_info("test for : mkdir-->fopen-->fseek-->fwrite-->fwrite-->"); rfile_print_info("ftell-->fseek-->ftell-->fread-->fread-->fclose-->stat.\n\n"); rfilewrtmp = Rfile_Malloc(8888); memset(rfilewrtmp, 'x', 8888); rfilerdtmp = Rfile_Malloc(8888); memset(rfilerdtmp, 0, 8888); ret = bsp_mkdir(dirpar, 0660); if(BSP_OK != ret) { rfile_print_info("!!!!!!!! BSP_mkdir failed.\n"); goto rfile_test_001_fail_1; } pfile = bsp_open(filepath, (RFILE_CREAT|RFILE_RDWR), 0755); if(pfile < 0) { rfile_print_info("!!!!!!!! bsp_open failed.\n"); goto rfile_test_001_fail_1; } ret = bsp_lseek(pfile, 0, SEEK_SET); if(BSP_OK != ret) { rfile_print_info("!!!!!!!! BSP_fseek 1 failed .\n"); goto rfile_test_001_fail_2; } ret = bsp_write(pfile, wrbuf, strlen(wrbuf)); if(ret <= 0) { rfile_print_info("!!!!!!!! BSP_fwrite 1 failed .\n"); goto rfile_test_001_fail_2; } ret = bsp_write(pfile, rfilewrtmp, 8888); if(ret <= 0) { rfile_print_info("!!!!!!!! BSP_fwrite 2 failed .\n"); goto rfile_test_001_fail_2; } rfile_print_info("BSP_fwrite %d bytes.\n", ret); for(ret = 0; ret < 28; ret++) { rfile_print_info("-0x%x-", rfilewrtmp[ret]); } rfile_print_info(".\n"); for(ret = 8880; ret < 8888; ret++) { rfile_print_info("-0x%x-", rfilewrtmp[ret]); } rfile_print_info(".\n"); ret = bsp_tell(pfile); if(ret < 0) { rfile_print_info("!!!!!!!! BSP_ftell 1 failed 0x%x.\n", ret); } else { rfile_print_info("!!!!!!!! BSP_ftell 1 success 0x%x .\n", ret); } ret = bsp_lseek(pfile, 0, SEEK_SET); if(BSP_OK != ret) { rfile_print_info("!!!!!!!! BSP_fseek 2 failed .\n"); } ret = bsp_tell(pfile); if(ret < 0) { rfile_print_info("!!!!!!!! BSP_ftell 2 failed 0x%x.\n", ret); } else { rfile_print_info("!!!!!!!! BSP_ftell 2 success 0x%x .\n", ret); } ret = bsp_read(pfile, rdbuf, 64); if(ret <= 0) { rfile_print_info("!!!!!!!! BSP_fread 1 failed .\n"); goto rfile_test_001_fail_2; } ret = bsp_read(pfile, rfilerdtmp, 8888); if(ret <= 0) { rfile_print_info("!!!!!!!! BSP_fread 2 failed .\n"); goto rfile_test_001_fail_2; } rfile_print_info("BSP_fread %d bytes.\n", ret); for(ret = 0; ret < 28; ret++) { rfile_print_info(" 0x%x ", rfilerdtmp[ret]); } rfile_print_info(".\n"); for(ret = 8880; ret < 8888; ret++) { rfile_print_info(" 0x%x ", rfilerdtmp[ret]); } rfile_print_info(".\n"); ret = bsp_close(pfile); if(BSP_OK != ret) { rfile_print_info("!!!!!!!! bsp_close failed.\n"); goto rfile_test_001_fail_1; } ret = bsp_stat(filepath, &buf); if(BSP_OK != ret) { rfile_print_info("!!!!!!!! BSP_stat failed.\n"); goto rfile_test_001_fail_1; } else { rfile_print_info("BSP_stat : buf.mtime.tv_sec %d, buf.mtime.tv_nsec %d, buf.blksize %d\n", (int)buf.mtime.tv_sec, (int)buf.mtime.tv_nsec, (int)buf.blksize); } rfile_print_info("[%s] success.\n", __FUNCTION__); rfile_print_info("[%s] end =======================================.\n", __FUNCTION__); return 0; rfile_test_001_fail_2: bsp_close(pfile); rfile_test_001_fail_1: rfile_print_info("[%s] end =======================================.\n", __FUNCTION__); return -1; }