Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in
Toggle navigation
Menu
Open sidebar
TASTE
uPython-mirror
Commits
40048ada
Commit
40048ada
authored
Jan 24, 2014
by
mux
Browse files
Move file obj to separate module
parent
2b2cb7b7
Changes
4
Hide whitespace changes
Inline
Side-by-side
stm/Makefile
View file @
40048ada
...
...
@@ -65,6 +65,7 @@ SRC_C = \
usrsw.c
\
adc.c
\
rtc.c
\
file.c
\
# pybwlan.c
\
SRC_S
=
\
...
...
stm/file.c
0 → 100644
View file @
40048ada
#include <stdio.h>
#include <stm32f4xx.h>
#include "misc.h"
#include "mpconfig.h"
#include "mpconfigport.h"
#include "qstr.h"
#include "obj.h"
#include "file.h"
#include "ff.h"
typedef
struct
_pyb_file_obj_t
{
mp_obj_base_t
base
;
FIL
fp
;
}
pyb_file_obj_t
;
void
file_obj_print
(
void
(
*
print
)(
void
*
env
,
const
char
*
fmt
,
...),
void
*
env
,
mp_obj_t
self_in
,
mp_print_kind_t
kind
)
{
printf
(
"<file %p>"
,
self_in
);
}
mp_obj_t
file_obj_read
(
mp_obj_t
self_in
,
mp_obj_t
arg
)
{
pyb_file_obj_t
*
self
=
self_in
;
int
n
=
mp_obj_get_int
(
arg
);
byte
*
buf
=
m_new
(
byte
,
n
);
UINT
n_out
;
f_read
(
&
self
->
fp
,
buf
,
n
,
&
n_out
);
return
mp_obj_new_str
(
buf
,
n_out
,
false
);
}
mp_obj_t
file_obj_write
(
mp_obj_t
self_in
,
mp_obj_t
arg
)
{
pyb_file_obj_t
*
self
=
self_in
;
uint
l
;
const
byte
*
s
=
mp_obj_str_get_data
(
arg
,
&
l
);
UINT
n_out
;
FRESULT
res
=
f_write
(
&
self
->
fp
,
s
,
l
,
&
n_out
);
if
(
res
!=
FR_OK
)
{
printf
(
"File error: could not write to file; error code %d
\n
"
,
res
);
}
else
if
(
n_out
!=
l
)
{
printf
(
"File error: could not write all data to file; wrote %d / %d bytes
\n
"
,
n_out
,
l
);
}
return
mp_const_none
;
}
mp_obj_t
file_obj_close
(
mp_obj_t
self_in
)
{
pyb_file_obj_t
*
self
=
self_in
;
f_close
(
&
self
->
fp
);
return
mp_const_none
;
}
static
MP_DEFINE_CONST_FUN_OBJ_2
(
file_obj_read_obj
,
file_obj_read
);
static
MP_DEFINE_CONST_FUN_OBJ_2
(
file_obj_write_obj
,
file_obj_write
);
static
MP_DEFINE_CONST_FUN_OBJ_1
(
file_obj_close_obj
,
file_obj_close
);
// TODO gc hook to close the file if not already closed
static
const
mp_method_t
file_methods
[]
=
{
{
"read"
,
&
file_obj_read_obj
},
{
"write"
,
&
file_obj_write_obj
},
{
"close"
,
&
file_obj_close_obj
},
{
NULL
,
NULL
},
};
static
const
mp_obj_type_t
file_obj_type
=
{
{
&
mp_const_type
},
"File"
,
.
print
=
file_obj_print
,
.
methods
=
file_methods
,
};
mp_obj_t
pyb_io_open
(
mp_obj_t
o_filename
,
mp_obj_t
o_mode
)
{
const
char
*
filename
=
mp_obj_str_get_str
(
o_filename
);
const
char
*
mode
=
mp_obj_str_get_str
(
o_mode
);
pyb_file_obj_t
*
self
=
m_new_obj
(
pyb_file_obj_t
);
self
->
base
.
type
=
&
file_obj_type
;
if
(
mode
[
0
]
==
'r'
)
{
// open for reading
FRESULT
res
=
f_open
(
&
self
->
fp
,
filename
,
FA_READ
);
if
(
res
!=
FR_OK
)
{
printf
(
"FileNotFoundError: [Errno 2] No such file or directory: '%s'
\n
"
,
filename
);
return
mp_const_none
;
}
}
else
if
(
mode
[
0
]
==
'w'
)
{
// open for writing, truncate the file first
FRESULT
res
=
f_open
(
&
self
->
fp
,
filename
,
FA_WRITE
|
FA_CREATE_ALWAYS
);
if
(
res
!=
FR_OK
)
{
printf
(
"?FileError: could not create file: '%s'
\n
"
,
filename
);
return
mp_const_none
;
}
}
else
{
printf
(
"ValueError: invalid mode: '%s'
\n
"
,
mode
);
return
mp_const_none
;
}
return
self
;
}
stm/file.h
0 → 100644
View file @
40048ada
mp_obj_t
pyb_io_open
(
mp_obj_t
o_filename
,
mp_obj_t
o_mode
);
stm/main.c
View file @
40048ada
...
...
@@ -43,6 +43,7 @@
#include "usrsw.h"
#include "adc.h"
#include "rtc.h"
#include "file.h"
int
errno
;
...
...
@@ -544,90 +545,6 @@ mp_obj_t pyb_hid_send_report(mp_obj_t arg) {
return
mp_const_none
;
}
typedef
struct
_pyb_file_obj_t
{
mp_obj_base_t
base
;
FIL
fp
;
}
pyb_file_obj_t
;
void
file_obj_print
(
void
(
*
print
)(
void
*
env
,
const
char
*
fmt
,
...),
void
*
env
,
mp_obj_t
self_in
,
mp_print_kind_t
kind
)
{
printf
(
"<file %p>"
,
self_in
);
}
mp_obj_t
file_obj_read
(
mp_obj_t
self_in
,
mp_obj_t
arg
)
{
pyb_file_obj_t
*
self
=
self_in
;
int
n
=
mp_obj_get_int
(
arg
);
byte
*
buf
=
m_new
(
byte
,
n
);
UINT
n_out
;
f_read
(
&
self
->
fp
,
buf
,
n
,
&
n_out
);
return
mp_obj_new_str
(
buf
,
n_out
,
false
);
}
mp_obj_t
file_obj_write
(
mp_obj_t
self_in
,
mp_obj_t
arg
)
{
pyb_file_obj_t
*
self
=
self_in
;
uint
l
;
const
byte
*
s
=
mp_obj_str_get_data
(
arg
,
&
l
);
UINT
n_out
;
FRESULT
res
=
f_write
(
&
self
->
fp
,
s
,
l
,
&
n_out
);
if
(
res
!=
FR_OK
)
{
printf
(
"File error: could not write to file; error code %d
\n
"
,
res
);
}
else
if
(
n_out
!=
l
)
{
printf
(
"File error: could not write all data to file; wrote %d / %d bytes
\n
"
,
n_out
,
l
);
}
return
mp_const_none
;
}
mp_obj_t
file_obj_close
(
mp_obj_t
self_in
)
{
pyb_file_obj_t
*
self
=
self_in
;
f_close
(
&
self
->
fp
);
return
mp_const_none
;
}
static
MP_DEFINE_CONST_FUN_OBJ_2
(
file_obj_read_obj
,
file_obj_read
);
static
MP_DEFINE_CONST_FUN_OBJ_2
(
file_obj_write_obj
,
file_obj_write
);
static
MP_DEFINE_CONST_FUN_OBJ_1
(
file_obj_close_obj
,
file_obj_close
);
// TODO gc hook to close the file if not already closed
static
const
mp_method_t
file_methods
[]
=
{
{
"read"
,
&
file_obj_read_obj
},
{
"write"
,
&
file_obj_write_obj
},
{
"close"
,
&
file_obj_close_obj
},
{
NULL
,
NULL
},
};
static
const
mp_obj_type_t
file_obj_type
=
{
{
&
mp_const_type
},
"File"
,
.
print
=
file_obj_print
,
.
methods
=
file_methods
,
};
mp_obj_t
pyb_io_open
(
mp_obj_t
o_filename
,
mp_obj_t
o_mode
)
{
const
char
*
filename
=
mp_obj_str_get_str
(
o_filename
);
const
char
*
mode
=
mp_obj_str_get_str
(
o_mode
);
pyb_file_obj_t
*
self
=
m_new_obj
(
pyb_file_obj_t
);
self
->
base
.
type
=
&
file_obj_type
;
if
(
mode
[
0
]
==
'r'
)
{
// open for reading
FRESULT
res
=
f_open
(
&
self
->
fp
,
filename
,
FA_READ
);
if
(
res
!=
FR_OK
)
{
printf
(
"FileNotFoundError: [Errno 2] No such file or directory: '%s'
\n
"
,
filename
);
return
mp_const_none
;
}
}
else
if
(
mode
[
0
]
==
'w'
)
{
// open for writing, truncate the file first
FRESULT
res
=
f_open
(
&
self
->
fp
,
filename
,
FA_WRITE
|
FA_CREATE_ALWAYS
);
if
(
res
!=
FR_OK
)
{
printf
(
"?FileError: could not create file: '%s'
\n
"
,
filename
);
return
mp_const_none
;
}
}
else
{
printf
(
"ValueError: invalid mode: '%s'
\n
"
,
mode
);
return
mp_const_none
;
}
return
self
;
}
mp_obj_t
pyb_rng_get
(
void
)
{
return
mp_obj_new_int
(
RNG_GetRandomNumber
()
>>
16
);
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment