source: azure_iot_hub_f767zi/trunk/asp_baseplatform/files/diskutils.c@ 457

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

ファイルを追加

  • Property svn:eol-style set to native
  • Property svn:mime-type set to text/x-csrc;charset=UTF-8
File size: 7.8 KB
Line 
1/*
2 * TOPPERS/JSP Kernel
3 * Toyohashi Open Platform for Embedded Real-Time Systems/
4 * Just Standard Profile Kernel
5 *
6 * Copyright (C) 2010-2015 by GJ Designing Center RICOH COMPANY,LTD. JAPAN
7 * Copyright (C) 2015-2016 by TOPPERS PROJECT Educational Working Group.
8 *
9 * 上記著作権者は,以下の (1)~(4) の条件か,Free Software Foundation
10 * によって公表されている GNU General Public License の Version 2 に記
11 * 述されている条件を満たす場合に限り,本ソフトウェア(本ソフトウェア
12 * を改変したものを含む.以下同じ)を使用・複製・改変・再配布(以下,
13 * 利用と呼ぶ)することを無償で許諾する.
14 * (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
15 * 権表示,この利用条件および下記の無保証規定が,そのままの形でソー
16 * スコード中に含まれていること.
17 * (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
18 * 用できる形で再配布する場合には,再配布に伴うドキュメント(利用
19 * 者マニュアルなど)に,上記の著作権表示,この利用条件および下記
20 * の無保証規定を掲載すること.
21 * (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
22 * 用できない形で再配布する場合には,次のいずれかの条件を満たすこ
23 * と.
24 * (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
25 * 作権表示,この利用条件および下記の無保証規定を掲載すること.
26 * (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに
27 * 報告すること.
28 * (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
29 * 害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
30 *
31 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お
32 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,その適用可能性も
33 * 含めて,いかなる保証も行わない.また,本ソフトウェアの利用により直
34 * 接的または間接的に生じたいかなる損害に関しても,その責任を負わない.
35 *
36 * @(#) $Id$
37 */
38
39#include <stdio.h>
40#include <string.h>
41#include "storagedevice.h"
42#include "monitor.h"
43
44#define NUM_VOLUME_CMD 5
45
46static int_t volume_format(int argc, char **argv);
47static int_t volume_dir(int argc, char **argv);
48static int_t volume_mkdir(int argc, char **argv);
49static int_t volume_rmdir(int argc, char **argv);
50static int_t volume_delete(int argc, char **argv);
51
52/*
53 * VOLUMEコマンドテーブル
54 */
55static const COMMAND_INFO volume_command_info[] = {
56 {"FORMAT", volume_format }, /* ボリュームフォーマット */
57 {"DIR", volume_dir }, /* ディレクトリ表示 */
58 {"MKDIR", volume_mkdir }, /* ディレクトリ作成 */
59 {"RMDIR", volume_rmdir }, /* ディレクトリ削除 */
60 {"ERASE", volume_delete } /* ファイル削除 */
61};
62
63static const char volume_name[] = "VOLUME";
64static const char volume_help[] =
65" Volume FORMAT [drive]\n"
66" DIR [path] \n"
67" MKDIR [path] \n"
68" RMDIR [path] \n"
69" ERASE [path] \n";
70
71static COMMAND_LINK volume_command_link = {
72 NULL,
73 NUM_VOLUME_CMD,
74 volume_name,
75 NULL,
76 volume_help,
77 &volume_command_info[0]
78};
79
80static struct dirent2 finfo;
81
82/*
83 * RTCコマンド設定関数
84 */
85void volume_info_init(intptr_t exinf)
86{
87 setup_command(&volume_command_link);
88}
89
90/*
91 * ストレージボリュームフォーマット
92 */
93static int_t
94volume_format(int argc, char **argv)
95{
96 printf("not support !\n");
97 return 0;
98}
99
100/*
101 * ストレージボリュームディレクトリ
102 */
103static int_t
104volume_dir(int argc, char **argv)
105{
106 StorageDevice_t *psdev;
107 struct statfs2 status;
108 char *path, *spath, name[16];
109 int devno, no, count;
110 void *dir;
111
112 name[0] = 0;
113 if(argc > 1)
114 spath = path = argv[1];
115 else
116 spath = path = &name[1];
117 devno = SDMGetDeviceNo((const char **)&path);
118 psdev = SDMGetStorageDevice(devno);
119 if(psdev == 0){
120 printf("\nno device !\n");
121 return -1;
122 }
123 if(psdev->pdevff == 0 || psdev->pdevff->_sdevff_opendir == 0){
124 printf("\nno function !\n");
125 return -1;
126 }
127 if((psdev->_sdev_attribute & SDEV_EMPLOY) == 0){
128 printf("\nno media !\n");
129 return -1;
130 }
131 count = 0;
132 dir = psdev->pdevff->_sdevff_opendir(spath);
133 if(dir != NULL){
134 if(*spath == 0){
135 name[0] = devno + '0';
136 name[1] = ':';
137 name[2] = '/';
138 name[3] = 0;
139 spath = name;
140 }
141 printf("\nDirectory [%s]\n", spath);
142 while(psdev->pdevff->_sdevff_readdir(dir, &finfo) != 0 && finfo.d_name[0] != 0){
143 count++;
144 printf("%3d %s ", count, finfo.d_name);
145 no = strlen(finfo.d_name);
146 while(no < 24){
147 putchar(' ');
148 no++;
149 }
150 printf("%04d/%02d/%02d ", (finfo.d_date>>9)+1980, (finfo.d_date>>5) & 15, finfo.d_date & 31);
151 printf("%02d:%02d:%02d ", finfo.d_time>>11, (finfo.d_time>>5) & 63, (finfo.d_time & 31)*2);
152 if(finfo.d_type & AM_HID)
153 name[0] = '*';
154 else
155 name[0] = ' ';
156 if(finfo.d_type & AM_SYS)
157 name[1] = 'S';
158 else
159 name[1] = ' ';
160 name[2] = 'R';
161 if(finfo.d_type & AM_RDO)
162 name[3] = ' ';
163 else
164 name[3] = 'W';
165 name[4] = 0;
166 if(finfo.d_type & AM_DIR)
167 printf("<DIR> \n");
168 else if(finfo.d_type & AM_VOL)
169 printf("<VOL> \n");
170 else
171 printf("[%s] %8d\n", name, (int)finfo.d_fsize);
172 }
173 printf(" %d file(s)\n", count);
174 psdev->pdevff->_sdevff_closedir(dir);
175 if(psdev->pdevff->_sdevff_statfs != 0
176 && psdev->pdevff->_sdevff_statfs(spath, &status) == 0){
177 printf(" %d free blocks %d bytes in a block\n", (int)status.f_bfree, (int)status.f_bsize);
178 }
179 }
180 else{
181 printf("Disk Error !\n");
182 }
183 return 0;
184}
185
186/*
187 * ストレージボリュームMKDIR
188 */
189static int_t
190volume_mkdir(int argc, char **argv)
191{
192 StorageDevice_t *psdev;
193 char *path, *spath;
194 int devno;
195
196 if(argc > 1){
197 spath = path = argv[1];
198 devno = SDMGetDeviceNo((const char **)&path);
199 psdev = SDMGetStorageDevice(devno);
200 if(psdev == 0){
201 printf("\nno device !\n");
202 return -1;
203 }
204 if(psdev->pdevff == 0 || psdev->pdevff->_sdevff_mkdir == 0){
205 printf("\nno function !\n");
206 return -1;
207 }
208 printf(" mkdir[%s]\n", path);
209 if(psdev->pdevff->_sdevff_mkdir(spath) >= 0)
210 printf(" Ok\n");
211 else
212 printf(" Error\n");
213 }
214 return 0;
215}
216
217/*
218 * ストレージボリュームRMDIR
219 */
220static int_t
221volume_rmdir(int argc, char **argv)
222{
223 StorageDevice_t *psdev;
224 char *path, *spath;
225 int devno;
226
227 if(argc > 1){
228 spath = path = argv[1];
229 devno = SDMGetDeviceNo((const char **)&path);
230 psdev = SDMGetStorageDevice(devno);
231 if(psdev == 0){
232 printf("\nno device !\n");
233 return -1;
234 }
235 if(psdev->pdevff == 0 || psdev->pdevff->_sdevff_rmdir == 0){
236 printf("\nno function !\n");
237 return -1;
238 }
239 printf(" rmdir[%s]\n", path);
240 if(psdev->pdevff->_sdevff_rmdir(spath) >= 0)
241 printf(" Ok\n");
242 else
243 printf(" Error\n");
244 }
245 return 0;
246}
247
248/*
249 * ストレージボリュームファイル削除
250 */
251static int_t
252volume_delete(int argc, char **argv)
253{
254 StorageDevice_t *psdev;
255 char *path, *spath;
256 int devno;
257
258 if(argc > 1){
259 spath = path = argv[1];
260 devno = SDMGetDeviceNo((const char **)&path);
261 psdev = SDMGetStorageDevice(devno);
262 if(psdev == 0){
263 printf("\nno device !\n");
264 return -1;
265 }
266 if(psdev->pdevff == 0 || psdev->pdevff->_sdevff_unlink == 0){
267 printf("\nno function !\n");
268 return -1;
269 }
270 printf(" unlink[%s]\n", path);
271 if(psdev->pdevff->_sdevff_unlink(spath) >= 0)
272 printf(" Ok\n");
273 else
274 printf(" Error\n");
275 }
276 return 0;
277}
278
Note: See TracBrowser for help on using the repository browser.