157 lines
2.5 KiB
C
157 lines
2.5 KiB
C
![]() |
#ifndef myjson_h__
|
|||
|
#define myjson_h__
|
|||
|
|
|||
|
#include "cjson.h"
|
|||
|
#include "list.h"
|
|||
|
#include "bytearray.h"
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
#define JSON_GET_INT(j,v) {\
|
|||
|
if(j->type==cJSON_Number)\
|
|||
|
{\
|
|||
|
v=j->valueint;\
|
|||
|
}else{\
|
|||
|
DBG_WARN("%s not a int value.",#j);\
|
|||
|
}}
|
|||
|
|
|||
|
// <20><>ȡ<EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>v==0<><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD>
|
|||
|
#define JSON_GET_STR(j,v) {\
|
|||
|
if(j->type==cJSON_String)\
|
|||
|
{\
|
|||
|
int len=strlen(j->valuestring)+1;\
|
|||
|
if(v==0){\
|
|||
|
v=malloc(len);\
|
|||
|
}\
|
|||
|
memcpy(v,j->valuestring,len);\
|
|||
|
}else{\
|
|||
|
DBG_WARN("%s not a str value.",#j);\
|
|||
|
}}
|
|||
|
|
|||
|
|
|||
|
|
|||
|
typedef void *(*json_to_obj)(cJSON *j);
|
|||
|
typedef void (*del_obj)(void *obj);
|
|||
|
typedef struct {
|
|||
|
int obj_size;
|
|||
|
json_to_obj to_obj_fun;
|
|||
|
del_obj del_fun;
|
|||
|
|
|||
|
// <20><>Щ<EFBFBD><D0A9><EFBFBD>б<EFBFBD><D0B1>Ļص<C4BB>
|
|||
|
sub_fun_def sub;
|
|||
|
del_fun_def del;
|
|||
|
}obj_def;
|
|||
|
|
|||
|
|
|||
|
obj_def *obj_int(void);
|
|||
|
obj_def *obj_str(void);
|
|||
|
list_def *jarray_to_list(cJSON *jarray,obj_def *obj);
|
|||
|
cJSON *json_parse(const char *jstr);/*temp_ptr*/
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Χ
|
|||
|
typedef struct {
|
|||
|
int max;
|
|||
|
int min;
|
|||
|
}sch_range;
|
|||
|
obj_def *obj_range(void);
|
|||
|
int range_in_range(sch_range *r,int num);
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
// <20><><EFBFBD><EFBFBD>
|
|||
|
typedef struct{
|
|||
|
char *brief;
|
|||
|
int task_id;
|
|||
|
int index;
|
|||
|
int param_num;
|
|||
|
list_def *params_info;//str
|
|||
|
list_def *params;//int
|
|||
|
list_def *ranges;//sch_range
|
|||
|
int return_num;
|
|||
|
list_def *returns_info;//str
|
|||
|
int err_jump;
|
|||
|
int retry;
|
|||
|
int failed_code;
|
|||
|
list_def *ret_failed_code;//int
|
|||
|
list_def *ch_errcode;//int
|
|||
|
}sch_task;
|
|||
|
|
|||
|
__packed
|
|||
|
typedef struct{
|
|||
|
uint16_t value;
|
|||
|
uint8_t err;
|
|||
|
}reurn_item;
|
|||
|
__packed
|
|||
|
typedef struct{
|
|||
|
uint8_t size;
|
|||
|
uint8_t index;
|
|||
|
uint8_t id;
|
|||
|
uint8_t ack;
|
|||
|
uint8_t exe_err;
|
|||
|
reurn_item items[0];
|
|||
|
}task_returns;
|
|||
|
|
|||
|
obj_def *obj_task(void);
|
|||
|
array_def *task_to_array(sch_task *t);
|
|||
|
task_returns *task_check_returns(sch_task *t,int ack,array_def *data);
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
typedef struct{
|
|||
|
int err;
|
|||
|
char *info;
|
|||
|
list_def *suberr;//int
|
|||
|
}sch_errcode;
|
|||
|
|
|||
|
obj_def *obj_errcode(void);
|
|||
|
int errcode_in_range(sch_errcode *e,int subcode);
|
|||
|
|
|||
|
|
|||
|
|
|||
|
typedef struct{
|
|||
|
int plan_id;
|
|||
|
char *brief;
|
|||
|
list_def *slave_soft_versions;//int
|
|||
|
list_def *slave_hard_versions;//int
|
|||
|
int timeout_s;
|
|||
|
int timeout_m;
|
|||
|
int task_id_max;
|
|||
|
list_def *errs;//sch_errcode
|
|||
|
list_def *tasks;//sch_task
|
|||
|
list_def *ch_errcode;//int
|
|||
|
}scheme_def;
|
|||
|
|
|||
|
|
|||
|
|
|||
|
obj_def *obj_scheme(void);
|
|||
|
scheme_def *json_to_scheme(cJSON *j);
|
|||
|
void scheme_delete(scheme_def *s);
|
|||
|
array_def *scheme_to_byte_array(scheme_def *s);
|
|||
|
|
|||
|
|
|||
|
__packed
|
|||
|
typedef struct{
|
|||
|
uint16_t size;
|
|||
|
uint8_t errcode;
|
|||
|
uint8_t data[0];
|
|||
|
}scheme_returns;
|
|||
|
scheme_returns *scheme_check_returns(scheme_def *s,array_def *data);
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
#endif
|
|||
|
|