8 #include "memory_manage.h"
9 #include "squirrel_wrap.h"
10 #include "flash_device.h"
12 static void call(HSQUIRRELVM v, const wgChar *devicename)
15 sq_pushstring(v, _SC("flash_device_get"), -1);
16 if(SQ_SUCCEEDED(sq_get(v,-2))){
18 sq_pushstring(v, devicename, -1);
19 sq_call(v, 2, SQTrue, SQTrue);
22 static bool long_get(HSQUIRRELVM v, const wgChar *field, long *ret)
24 sq_pushstring(v, field, -1);
25 SQRESULT r = sq_get(v, -2);
29 if(sq_gettype(v, -1) != OT_INTEGER){
33 r = sq_getinteger(v, -1, &i);
41 static bool bool_get(HSQUIRRELVM v, const wgChar *field, bool *ret)
43 sq_pushstring(v, field, -1);
44 SQRESULT r = sq_get(v, -2);
48 if(sq_gettype(v, -1) != OT_BOOL){
52 r = sq_getbool(v, -1, &i);
64 bool flash_device_get(const wgChar *name, struct flash_device *t)
66 HSQUIRRELVM v = qr_open(NULL);
67 if(SQ_FAILED(sqstd_dofile(v, _SC("flashdevice.nut"), SQFalse, SQTrue))){
71 SQInteger top = sq_gettop(v);
73 if(sq_gettype(v, -1) != OT_TABLE){
77 if(long_get(v, _SC("capacity"), &t->capacity) == false){
80 if(long_get(v, _SC("pagesize"), &t->pagesize) == false){
83 if(long_get(v, _SC("erase_wait"), &t->erase_wait) == false){
86 if(bool_get(v, _SC("erase_require"), &t->erase_require) == false){
89 if(bool_get(v, _SC("retry"), &t->retry) == false){
92 if(long_get(v, _SC("command_mask"), &t->command_mask) == false){
96 if(long_get(v, _SC("id_manufacurer"), &dd) == false){
99 t->id_manufacurer = dd;
100 if(long_get(v, _SC("id_device"), &dd) == false){
109 // puts("script field error");
114 static int flash_device_number_get(HSQUIRRELVM v)
117 sq_pushstring(v, _SC("flash_device_number_get"), -1);
118 if(SQ_SUCCEEDED(sq_get(v,-2))){
120 SQRESULT r = sq_call(v, 1, SQTrue, SQTrue);
124 if(sq_gettype(v, -1) != OT_INTEGER){
128 if(SQ_FAILED(sq_getinteger(v, -1, &i))){
134 static int flash_device_name_get(HSQUIRRELVM v, int index, const wgChar **str)
137 sq_pushstring(v, _SC("flash_device_name_get"), -1);
138 if(SQ_SUCCEEDED(sq_get(v,-2))){
140 sq_pushinteger(v, index);
141 SQRESULT r = sq_call(v, 2, SQTrue, SQTrue);
145 if(sq_gettype(v, -1) != OT_STRING){
148 if(SQ_FAILED(sq_getstring(v, -1, str))){
155 #define STRNCMP wcsncmp
157 #define STRNCMP strncmp
159 void flash_device_listup(struct flash_listup *t)
162 HSQUIRRELVM v = qr_open(NULL);
163 SQInteger top = sq_gettop(v);
165 if(SQ_FAILED(sqstd_dofile(v, _SC("flashdevice.nut"), SQFalse, SQTrue))){
166 // puts("flash device script error");
172 const int device_num = flash_device_number_get(v);
175 for(i = 0; i < device_num; i++){
176 flash_device_name_get(v, i, &str);
177 if(STRNCMP(str, _SC("dummy"), 6) != 0){
178 t->append(t->obj_cpu, str);
179 t->append(t->obj_ppu, str);