Uses msgset.write_header and header_len again.

This commit is contained in:
2022-07-29 12:11:19 +02:00
parent 51416668c4
commit 7dab041047
13 changed files with 87 additions and 63 deletions

View File

@ -12,7 +12,7 @@ int cw_out_generic(struct cw_ElemHandler * handler, struct cw_ElemHandlerParams
, uint8_t * dst)
{
struct cw_KTV * elem, search;
struct cw_KTV * elem;
int start, len, l;
/* Get the element */
@ -49,7 +49,7 @@ int cw_out_generic(struct cw_ElemHandler * handler, struct cw_ElemHandlerParams
/* Size for msg elem header depends on
vendor specific payload */
/* start = handler->vendor ? 10 : 4; */
start = cw_header_len(handler);
start = params->msgset->header_len(handler);
if (cw_ktv_cast(elem,handler->type)==NULL){
cw_log(LOG_ERR,"Can't put element '%s'- can't cast from %s to %s for key: %s", handler->name,
@ -67,7 +67,7 @@ int cw_out_generic(struct cw_ElemHandler * handler, struct cw_ElemHandlerParams
return len + cw_put_elem_vendor_hdr(dst, handler->vendor, handler->id, len);
l = len + cw_put_elem_hdr(dst, handler->id, len); */
l = cw_write_header(handler,dst,len);
l = params->msgset->write_header(handler,dst,len);
cw_dbg_elem(DBG_ELEM_OUT,NULL,params->msgdata->type,handler,dst,l);
/* cw_dbg_elem(DBG_ELEM_OUT,params->conn,params->msgdata->type,handler,dst,l);*/

View File

@ -10,7 +10,6 @@ int cw_out_generic_indexed_enum(struct cw_ElemHandler * handler, struct cw_ElemH
uint8_t * ob;
const cw_KTVIndexed_t *ie;
cw_KTVEnum_t * e;
struct cw_ElemHandler thandler;
ie = handler->type;
@ -22,10 +21,13 @@ int cw_out_generic_indexed_enum(struct cw_ElemHandler * handler, struct cw_ElemH
for(i=0; e[i].name!=NULL; i++) {
sprintf(key,"%s/%s",handler->key,e[i].name);
printf("Her is the Key: %s - %s\n",key, );
result = cw_ktv_base_exists(params->local_cfg,key);
if (result==NULL)
continue;
start = cw_header_len(handler);
start = params->msgset->header_len(handler);
len = 0;
if (ie->idxpos==0)
len = 1;
@ -36,17 +38,11 @@ int cw_out_generic_indexed_enum(struct cw_ElemHandler * handler, struct cw_ElemH
len += cw_ktv_write_struct(params->local_cfg,
NULL,e[i].type,key,ob+start+len);
/* thandler.type=e[i].type;
thandler.key=key;
len += e->fun_out(&thandler,params,ob+start+len);
*/
cw_set_byte(ob+start+ie->idxpos,e[i].value);
if (ie->idxpos==len)
len++;
ob += cw_write_header(handler,ob,len);
ob += params->msgset->write_header(handler,ob,len);
}

View File

@ -30,12 +30,12 @@ int cw_out_generic_struct(struct cw_ElemHandler * handler, struct cw_ElemHandler
return 0;
}
start = cw_header_len(handler);
start = params->msgset->header_len(handler);
len = cw_ktv_write_struct(params->local_cfg,
params->default_cfg,
handler->type,handler->key,dst+start);
return cw_write_header(handler,dst,len);
return params->msgset->write_header(handler,dst,len);
}

View File

@ -24,12 +24,12 @@ int cw_out_generic_with_index(struct cw_ElemHandler * eh,
if (strncmp(result->key,key,strlen(key))!=0)
break;
start = cw_header_len(eh);
start = params->msgset->header_len(eh);
len = cw_put_byte(ob+start,idx);
len += result->type->put(result,ob+start+len);
ob += cw_write_header(eh,ob,len);
ob += params->msgset->write_header(eh,ob,len);
idx++;

View File

@ -37,15 +37,13 @@ int cw_out_idx_generic_struct(struct cw_ElemHandler * handler, struct cw_ElemHan
sprintf(key,handler->key,idx);
printf("Here we are '%s'! --> %d\n",key,idx);
len =0;
start = mdst + cw_header_len(handler);
start = mdst + params->msgset->header_len(handler);
len += cw_put_byte(start+len,idx);
len += cw_ktv_write_struct(params->local_cfg,NULL, handler->type,key,start+len);
mdst += cw_write_header(handler,mdst,len);
mdst += params->msgset->write_header(handler,mdst,len);
i=idx+1;

View File

@ -14,7 +14,7 @@ int cw_out_radio_generic_struct(struct cw_ElemHandler * handler, struct cw_ElemH
cdst = dst;
offset = cw_header_len(handler);
offset = params->msgset->header_len(handler);
i=-1;
while(1){
@ -37,7 +37,7 @@ int cw_out_radio_generic_struct(struct cw_ElemHandler * handler, struct cw_ElemH
l+= cw_ktv_write_struct(params->local_cfg,NULL, handler->type,basekey,cdst+offset+l);
cdst+=cw_write_header(handler,cdst,l);
cdst+=params->msgset->write_header(handler,cdst,l);
}
return cdst-dst;
}
@ -61,7 +61,7 @@ int cw_out_traverse0(struct cw_ElemHandler * handler, struct cw_ElemHandlerParam
if (result != NULL){
int offset;
int i,l;
offset = cw_header_len(handler);
offset = params->msgset->header_len(handler);
printf("Yea! We can do it: %s\n",result->key);
for (i=0;i<stack[0];i++){
printf("I=%i\n",stack[i+1]);
@ -71,7 +71,7 @@ int cw_out_traverse0(struct cw_ElemHandler * handler, struct cw_ElemHandlerParam
printf("Write struct len %i\n",l);
l=cw_write_header(handler,dst,l);
l=params->msgset->write_header(handler,dst,l);
printf("header wr len %d\n",l);
if (handler->patch){
handler->patch(dst+offset,stack);

View File

@ -154,6 +154,7 @@ printf("Elem: %d %d %d %s\n", data->proto, data->vendor, data->id, handler->name
cw_decode_elements( &params, elems_ptr,elems_len);
printf ("----------------------------------- end redecode -----------------------------\n");
}

View File

@ -10,6 +10,8 @@ int cw_write_header(struct cw_ElemHandler * handler, uint8_t * dst, int len)
return len + cw_put_elem_hdr(dst, handler->id, len);
}
int cw_header_len(struct cw_ElemHandler * handler)
{
return handler->vendor ? 10 : 4;

View File

@ -7,13 +7,6 @@
#include "ktv.h"
struct cw_MsgSet {
mavl_t msgdata;
mavl_t handlers_by_id;
mavl_t handlers_by_key;
mavl_t types_tree;
mavl_t state_machine;
};
struct cw_ElemDef{
int proto;
@ -68,6 +61,19 @@ struct cw_ElemHandler {
};
struct cw_MsgSet {
mavl_t msgdata;
mavl_t handlers_by_id;
mavl_t handlers_by_key;
mavl_t types_tree;
mavl_t state_machine;
int (*write_header)(struct cw_ElemHandler * handler, uint8_t * dst, int len);
int (*header_len)(struct cw_ElemHandler *handler);
};
struct cw_State{
uint8_t state;
uint8_t next;