8 #include "memory_manage.h"
9 #include "squirrel_wrap.h"
10 #include "flash_device.h"
12 static void call(HSQUIRRELVM v, const char *devicename)
15 sq_pushstring(v, _SC("flash_device_get"), -1);
16 if(SQ_SUCCEEDED(sq_get(v,-2))){
18 sq_pushstring(v, _SC(devicename), -1);
19 SQRESULT r = sq_call(v, 2, SQTrue, SQTrue);
21 r++; //avoid warning unused variable with -DNDEBUG
24 static bool long_get(HSQUIRRELVM v, const char *field, long *ret)
26 sq_pushstring(v, _SC(field), -1);
27 SQRESULT r = sq_get(v, -2);
31 if(sq_gettype(v, -1) != OT_INTEGER){
35 r = sq_getinteger(v, -1, &i);
43 static bool bool_get(HSQUIRRELVM v, const char *field, bool *ret)
45 sq_pushstring(v, _SC(field), -1);
46 SQRESULT r = sq_get(v, -2);
50 if(sq_gettype(v, -1) != OT_BOOL){
54 r = sq_getbool(v, -1, &i);
66 bool flash_device_get(const char *name, struct flash_device *t)
68 HSQUIRRELVM v = qr_open(NULL);
69 if(SQ_FAILED(sqstd_dofile(v, _SC("flashdevice.nut"), SQFalse, SQTrue))){
70 puts("flash device script error");
74 SQInteger top = sq_gettop(v);
76 if(sq_gettype(v, -1) != OT_TABLE){
80 if(long_get(v, "capacity", &t->capacity) == false){
83 if(long_get(v, "pagesize", &t->pagesize) == false){
86 if(long_get(v, "erase_wait", &t->erase_wait) == false){
89 if(bool_get(v, "erase_require", &t->erase_require) == false){
92 if(bool_get(v, "retry", &t->retry) == false){
95 if(long_get(v, "command_mask", &t->command_mask) == false){
99 if(long_get(v, "id_manufacurer", &dd) == false){
102 t->id_manufacurer = dd;
103 if(long_get(v, "id_device", &dd) == false){
112 puts("script field error");
117 static int flash_device_number_get(HSQUIRRELVM v)
120 sq_pushstring(v, _SC("flash_device_number_get"), -1);
121 if(SQ_SUCCEEDED(sq_get(v,-2))){
123 SQRESULT r = sq_call(v, 1, SQTrue, SQTrue);
127 if(sq_gettype(v, -1) != OT_INTEGER){
131 if(SQ_FAILED(sq_getinteger(v, -1, &i))){
137 static int flash_device_name_get(HSQUIRRELVM v, int index, const char **str)
140 sq_pushstring(v, _SC("flash_device_name_get"), -1);
141 if(SQ_SUCCEEDED(sq_get(v,-2))){
143 sq_pushinteger(v, index);
144 SQRESULT r = sq_call(v, 2, SQTrue, SQTrue);
148 if(sq_gettype(v, -1) != OT_STRING){
151 if(SQ_FAILED(sq_getstring(v, -1, str))){
157 void flash_device_listup(struct flash_listup *t)
160 HSQUIRRELVM v = qr_open(NULL);
161 SQInteger top = sq_gettop(v);
163 if(SQ_FAILED(sqstd_dofile(v, _SC("flashdevice.nut"), SQFalse, SQTrue))){
164 // puts("flash device script error");
170 const int device_num = flash_device_number_get(v);
173 for(i = 0; i < device_num; i++){
174 flash_device_name_get(v, i, &str);
175 if(strncmp(str, "dummy", 6) != 0){
176 t->append(t->obj_cpu, str);
177 t->append(t->obj_ppu, str);