source: asp3_tinet_ecnl_rx/trunk/ntshell/fatfs/ffarch.c@ 337

Last change on this file since 337 was 337, checked in by coas-nagasima, 6 years ago

ASP3版ECNLを追加

  • Property svn:eol-style set to native
  • Property svn:mime-type set to text/x-csrc;charset=UTF-8
File size: 5.9 KB
Line 
1/*
2 * TOPPERS ECHONET Lite Communication Middleware
3 *
4 * Copyright (C) 2014-2017 Cores Co., Ltd. Japan
5 *
6 * 上記著作権者は,以下の(1)~(4)の条件を満たす場合に限り,本ソフトウェ
7 * ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改
8 * 変・再配布(以下,利用と呼ぶ)することを無償で許諾する.
9 * (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
10 * 権表示,この利用条件および下記の無保証規定が,そのままの形でソー
11 * スコード中に含まれていること.
12 * (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
13 * 用できる形で再配布する場合には,再配布に伴うドキュメント(利用
14 * 者マニュアルなど)に,上記の著作権表示,この利用条件および下記
15 * の無保証規定を掲載すること.
16 * (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
17 * 用できない形で再配布する場合には,次のいずれかの条件を満たすこ
18 * と.
19 * (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
20 * 作権表示,この利用条件および下記の無保証規定を掲載すること.
21 * (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに
22 * 報告すること.
23 * (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
24 * 害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
25 * また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理
26 * 由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを
27 * 免責すること.
28 *
29 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お
30 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
31 * に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
32 * アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
33 * の責任を負わない.
34 *
35 */
36
37/*
38 * サンプルプログラム(1)の本体
39 */
40
41#include "shellif.h"
42#include <kernel.h>
43#include <stdlib.h>
44#include <string.h>
45#include "t_stdlib.h"
46#include "syssvc/serial.h"
47#include "syssvc/syslog.h"
48#include "target_syssvc.h"
49#include "kernel_cfg.h"
50#include "diskio.h"
51#include "mmc_rspi.h"
52#include "ff.h"
53#include "util/ntstdio.h"
54#include "mbed_api.h"
55
56//extern ntstdio_t ntstdio;
57
58FATFS RomDisk;
59
60//gpio_t ins;
61//sdfs_t sdfs;
62#define WP() false
63
64typedef struct SD {
65 DSTATUS dst;
66 BYTE type;
67 FATFS FatFs;
68} SD;
69SD Sd;
70
71bool_t romdisk_init();
72bool_t SD_begin();
73
74#define P7_8 1
75#define P8_5 2
76#define P8_6 3
77#define P8_3 4
78#define P8_4 5
79
80int ffarch_init()
81{
82 int result = -1;
83
84 /* SD_CD */
85 //gpio_init_in(&ins, P7_8);
86
87 /* SDカードを初期化 */
88 //sdfs_init(&sdfs, P8_5, P8_6, P8_3, P8_4, "sd");
89
90 result = SD_begin() ? 0 : -1;
91 if (result == 0) {
92 printf("SD card (1:) OK!\n");
93 }
94 else {
95 printf("SD card (1:) NG!\n");
96 }
97 sta_cyc(MMC_RSPI_CYC);
98
99 if (romdisk_init())
100 result = 0;
101
102 if (result == 0) {
103 printf("ROM disk (0:) OK!\n");
104 }
105 else {
106 printf("ROM disk (0:) NG!\n");
107 }
108
109 /* uploadディレクトリを作成しておく */
110 f_mkdir("1:/upload");
111
112 serial_ctl_por(SIO_PORTID, IOCTL_FCSND | IOCTL_FCRCV);
113
114 return result;
115}
116
117bool_t romdisk_init()
118{
119 DSTATUS dst;
120 FRESULT res;
121
122 if (RomDisk.fs_type != 0)
123 return true;
124
125 if ((dst = ramdisk_initialize()) != RES_OK) {
126 return false;
127 }
128
129 if ((res = f_mount(&RomDisk, "0:", 1)) != FR_OK) {
130 return false;
131 }
132
133 return true;
134}
135
136bool_t SD_begin()
137{
138 DSTATUS dst;
139 FRESULT res;
140 BYTE pdrv = 1, type;
141
142 if (Sd.FatFs.fs_type != 0)
143 return true;
144
145 if ((dst = disk_initialize(pdrv)) != RES_OK) {
146 return false;
147 }
148
149 if ((dst = disk_ioctl(pdrv, MMC_GET_TYPE, &type)) != RES_OK) {
150 Sd.dst = dst;
151 Sd.type = 0;
152 }
153 else {
154 Sd.dst = RES_OK;
155 Sd.type = type;
156 }
157
158 if ((res = f_mount(&Sd.FatFs, "1:", 1)) != FR_OK) {
159 return false;
160 }
161
162 return true;
163}
164
165DSTATUS disk_initialize(BYTE pdrv)
166{
167 switch (pdrv) {
168 case 0:
169 return ramdisk_initialize();
170 case 1:
171 return mmc_rspi_initialize();
172 }
173 return STA_NOINIT;
174}
175
176DSTATUS disk_status(BYTE pdrv)
177{
178 switch (pdrv) {
179 case 0:
180 return ramdisk_get_status();
181 case 1:
182 return mmc_rspi_status();
183 }
184 return STA_NOINIT;
185}
186
187DRESULT disk_read(BYTE pdrv, BYTE *buff, DWORD sector, UINT count)
188{
189 switch (pdrv) {
190 case 0:
191 return ramdisk_read(buff, sector, count);
192 case 1:
193 return mmc_rspi_read(buff, sector, count);
194 }
195 return RES_PARERR;
196}
197
198DRESULT disk_write(BYTE pdrv, const BYTE *buff, DWORD sector, UINT count)
199{
200 switch (pdrv) {
201 case 0:
202 return ramdisk_write(buff, sector, count);
203 case 1:
204 return mmc_rspi_write(buff, sector, count);
205 }
206 return RES_PARERR;
207}
208
209DRESULT disk_ioctl(BYTE pdrv, BYTE cmd, void *buff)
210{
211 switch (pdrv) {
212 case 0:
213 return RES_PARERR; /* ramdisk_ioctl(cmd, buff); */
214 case 1:
215 return mmc_rspi_ioctl(cmd, buff);
216 }
217 return RES_PARERR;
218}
219
220int ff_cre_syncobj(BYTE vol, _SYNC_t* sobj)
221{
222 return 1;
223}
224
225int ff_req_grant(_SYNC_t sobj)
226{
227 ER ret;
228 ret = wai_sem(SEM_FILESYSTEM);
229 return ret == E_OK;
230}
231
232void ff_rel_grant(_SYNC_t sobj)
233{
234 sig_sem(SEM_FILESYSTEM);
235}
236
237int ff_del_syncobj(_SYNC_t sobj)
238{
239 return 1;
240}
241
242void* ff_memalloc (UINT msize)
243{
244 return malloc(msize);
245}
246
247void ff_memfree (void* mblock)
248{
249 free(mblock);
250}
251
252DWORD get_fattime(void)
253{
254 time_t temp;
255 struct tm _tm;
256
257 temp = rtc_read();
258 gmtime_r(&temp, &_tm);
259
260 return ((DWORD)(_tm.tm_year - 1980) << 25)
261 | ((DWORD)_tm.tm_mon << 21)
262 | ((DWORD)_tm.tm_mday << 16)
263 | ((DWORD)_tm.tm_hour << 11)
264 | ((DWORD)_tm.tm_min << 5)
265 | ((DWORD)_tm.tm_sec >> 1);
266}
Note: See TracBrowser for help on using the repository browser.