1414 * limitations under the License.
1515 ********************************************************************************/
1616
17- #include "schema_display.h"
18-
1917#include "app_mode.h"
2018#include "bech32.h"
2119#include "borsh.h"
20+ #include "schema_display.h"
2221#include "schema_helper.h"
2322#include "schema_reader.h"
24- #include "ui_item_manager.h"
2523#include "ui_utils.h"
2624#include "zxerror.h"
2725#include "zxformat.h"
2826
29- char item_data [MAX_STRING_LENGTH ] = {0 };
30-
3127#define NONE_STRING "None"
3228
33- parser_error_t find_name_registry (parser_tx_t * txObj , bytes_t * name , bytes_t * input_token ) {
29+ parser_error_t find_name_registry (parser_tx_t * txObj , bytes_t * name , bytes_t * input_token , char * outValue ,
30+ uint16_t outValueLen ) {
3431 CHECK_INPUT (txObj );
3532 CHECK_INPUT (name );
3633 CHECK_INPUT (input_token );
34+ CHECK_INPUT (outValue );
3735
3836 name_registries_t registries = txObj -> schema .chain_data .name_registries ;
3937 for (uint32_t i = 0 ; i < registries .qty ; i ++ ) {
@@ -45,9 +43,8 @@ parser_error_t find_name_registry(parser_tx_t *txObj, bytes_t *name, bytes_t *in
4543 CHECK_ERROR (read_registry (& name_registry .registry , & registry ));
4644 if (registry .data .len == input_token -> len &&
4745 MEMCMP (registry .data .ptr , input_token -> ptr , input_token -> len ) == 0 ) {
48- MEMZERO (item_data , sizeof (item_data ));
49- MEMCPY (item_data , registry .name .ptr , registry .name .len );
50- append_item_data (item_data , registry .name .len );
46+ MEMZERO (outValue , outValueLen );
47+ MEMCPY (outValue , registry .name .ptr , registry .name .len );
5148 return parser_ok ;
5249 }
5350 }
@@ -57,10 +54,10 @@ parser_error_t find_name_registry(parser_tx_t *txObj, bytes_t *name, bytes_t *in
5754 return parser_name_registry_not_found ;
5855}
5956
60- parser_error_t render_fixed_point (parser_context_t * ctx , parser_tx_t * txObj , fixed_point_display_t display ,
61- uint128_t value ) {
57+ parser_error_t render_fixed_point (parser_context_t * ctx , fixed_point_display_t display , uint128_t value , char * outValue ,
58+ uint16_t outValueLen ) {
6259 CHECK_INPUT (ctx );
63- CHECK_INPUT (txObj );
60+ CHECK_INPUT (outValue );
6461
6562 switch (display .type ) {
6663 case FIXED_POINT_DISPLAY_DECIMALS :
@@ -74,90 +71,100 @@ parser_error_t render_fixed_point(parser_context_t *ctx, parser_tx_t *txObj, fix
7471 }
7572 uint8_t offset = ctx -> buffer .ptr [ctx -> offset + display .from_sibling_field .byte_offset ];
7673
77- MEMZERO (item_data , sizeof (item_data ));
78- CHECK_ERROR (render_number (value .hi , value .lo , offset , "" , "" , item_data , sizeof (item_data )));
79- append_item_data (item_data , strlen (item_data ));
74+ MEMZERO (outValue , outValueLen );
75+ CHECK_ERROR (render_number (value .hi , value .lo , offset , "" , "" , outValue , outValueLen ));
8076
8177 return parser_ok ;
8278 default :
8379 return parser_unexpected_type ;
8480 }
8581}
8682
87- parser_error_t render_primitive_integer (parser_context_t * ctx , parser_tx_t * txObj , integer_display_t display ,
88- uint128_t value ) {
83+ parser_error_t render_primitive_integer (parser_context_t * ctx , integer_display_t display , uint128_t value , char * outValue ,
84+ uint16_t outValueLen ) {
8985 CHECK_INPUT (ctx );
90- CHECK_INPUT (txObj );
86+ CHECK_INPUT (outValue );
9187
9288 switch (display .type ) {
9389 case INTEGER_DISPLAY_HEX :
9490 // TODO: Implement me
9591 print_string ("render_primitive_integer IMPLEMENT ME 0" );
9692 return parser_unexpected_type ;
9793 case INTEGER_DISPLAY_DECIMAL :
98- MEMZERO (item_data , sizeof ( item_data ) );
99- CHECK_ERROR ( render_number ( value . hi , value . lo , 0 , "" , "" , item_data , sizeof ( item_data )) );
100- append_item_data ( item_data , strlen ( item_data ));
94+ MEMZERO (outValue , outValueLen );
95+ print_u8 ( "INTEGER_DISPLAY_DECIMAL: " , display . type );
96+ CHECK_ERROR ( render_number ( value . hi , value . lo , 0 , "" , "" , outValue , outValueLen ));
10197 break ;
10298 case INTEGER_DISPLAY_FIXED_POINT :
103- CHECK_ERROR (render_fixed_point (ctx , txObj , display .fixed_point , value ));
99+ print_u8 ("INTEGER_DISPLAY_FIXED_POINT: " , display .type );
100+ CHECK_ERROR (render_fixed_point (ctx , display .fixed_point , value , outValue , outValueLen ));
104101 break ;
105102 default :
106103 return parser_unexpected_type ;
107104 }
108105
106+ print_u8 ("render_primitive_integer finished: " , display .type );
107+
109108 return parser_ok ;
110109}
111110
112- parser_error_t render_integer (parser_context_t * ctx , parser_tx_t * txObj , primitive_integer_t * primitive ) {
111+ parser_error_t render_integer (parser_context_t * ctx , primitive_integer_t * primitive , char * outValue , uint16_t outValueLen ) {
113112 CHECK_INPUT (ctx );
114- CHECK_INPUT (txObj );
115113 CHECK_INPUT (primitive );
116114
117115 uint128_t value = {0 };
118116 switch (primitive -> type ) {
119117 case INTEGER_I8 :
120118 case INTEGER_U8 : {
119+ print_u8 ("INTEGER_U8: " , primitive -> type );
121120 uint8_t * ptr = (uint8_t * )& value ;
122121 CHECK_ERROR (read_u8 (ctx , ptr ));
123122 break ;
124123 }
125124 case INTEGER_I16 :
126125 case INTEGER_U16 : {
126+ print_u8 ("INTEGER_U16: " , primitive -> type );
127127 uint16_t * ptr = (uint16_t * )& value ;
128128 CHECK_ERROR (read_u16 (ctx , ptr ));
129129 break ;
130130 }
131131 case INTEGER_I32 :
132132 case INTEGER_U32 : {
133+ print_u8 ("INTEGER_U32: " , primitive -> type );
133134 uint32_t * ptr = (uint32_t * )& value ;
134135 CHECK_ERROR (read_u32 (ctx , ptr ));
135136 break ;
136137 }
137138 case INTEGER_I64 :
138139 case INTEGER_U64 : {
140+ print_u8 ("INTEGER_U64: " , primitive -> type );
139141 CHECK_ERROR (read_u64 (ctx , & value .lo ));
140142 break ;
141143 }
142144 case INTEGER_I128 :
143145 case INTEGER_U128 : {
146+ print_u8 ("INTEGER_U128_1: " , primitive -> type );
147+ print_buffer (& ctx -> buffer , "INTEGER_U128 buffer!!!!!!!!!!!!!!" );
144148 CHECK_ERROR (read_u64 (ctx , & value .lo ));
149+ print_u8 ("INTEGER_U128_2: " , primitive -> type );
145150 CHECK_ERROR (read_u64 (ctx , & value .hi ));
146151 break ;
147152 }
148153 default :
149154 return parser_unexpected_type ;
150155 }
151156
152- CHECK_ERROR (render_primitive_integer (ctx , txObj , primitive -> display , value ));
157+ CHECK_ERROR (render_primitive_integer (ctx , primitive -> display , value , outValue , outValueLen ));
153158
154159 return parser_ok ;
155160}
156161
157- parser_error_t render_byte_array (parser_context_t * ctx , parser_tx_t * txObj , primitive_byte_array_t * byte_array ) {
162+ parser_error_t render_byte_array (parser_context_t * ctx , parser_tx_t * txObj , primitive_byte_array_t * byte_array ,
163+ char * outValue , uint16_t outValueLen ) {
158164 CHECK_INPUT (ctx );
159165 CHECK_INPUT (txObj );
160166 CHECK_INPUT (byte_array );
167+ CHECK_INPUT (outValue );
161168
162169 bytes_t array = {0 };
163170 array .len = byte_array -> len ;
@@ -166,7 +173,7 @@ parser_error_t render_byte_array(parser_context_t *ctx, parser_tx_t *txObj, prim
166173
167174 if (byte_array -> has_name_registry ) {
168175 // check if name registry exist
169- CHECK_ERROR (find_name_registry (txObj , & byte_array -> name_registry , & array ));
176+ CHECK_ERROR (find_name_registry (txObj , & byte_array -> name_registry , & array , outValue , outValueLen ));
170177 return parser_ok ;
171178 }
172179
@@ -189,10 +196,9 @@ parser_error_t render_byte_array(parser_context_t *ctx, parser_tx_t *txObj, prim
189196 return parser_unexpected_type ;
190197 case BYTE_DISPLAY_BECH32M : {
191198 const char * hrp = (char * )byte_array -> display .bech32m .prefix .prefix .ptr ;
192- MEMZERO (item_data , sizeof ( item_data ) );
199+ MEMZERO (outValue , outValueLen );
193200 MAP_ZXERR_TO_PARSER_ERR (
194- bech32EncodeFromBytes (item_data , sizeof (item_data ), hrp , array .ptr , array .len , 1 , BECH32_ENCODING_BECH32M ));
195- append_item_data (item_data , strlen (item_data ));
201+ bech32EncodeFromBytes (outValue , outValueLen , hrp , array .ptr , array .len , 1 , BECH32_ENCODING_BECH32M ));
196202 break ;
197203 }
198204 case BYTE_DISPLAY_BASE58 :
@@ -206,25 +212,25 @@ parser_error_t render_byte_array(parser_context_t *ctx, parser_tx_t *txObj, prim
206212 return parser_ok ;
207213}
208214
209- parser_error_t render_primitive (parser_context_t * ctx , parser_tx_t * txObj , primitive_t * primitive ) {
215+ parser_error_t render_primitive (parser_context_t * ctx , parser_tx_t * txObj , primitive_t * primitive , char * outValue ,
216+ uint16_t outValueLen ) {
210217 CHECK_INPUT (ctx );
211218 CHECK_INPUT (txObj );
219+ CHECK_INPUT (outValue );
212220
213221 uint16_t primitive_size = sizeof (primitive );
214222 print_u16 ("Primitive size: " , primitive_size );
215223
216- set_primitive (primitive );
217-
218224 switch (primitive -> type ) {
219225 case PRIMITIVE_INTEGER :
220226 primitive_size = sizeof (primitive -> integer );
221- print_u16 ("Primitive size integer : " , primitive_size );
222- CHECK_ERROR (render_integer (ctx , txObj , & primitive -> integer ));
227+ print_u16 ("Primitive size integer_1 : " , primitive_size );
228+ CHECK_ERROR (render_integer (ctx , & primitive -> integer , outValue , outValueLen ));
223229 break ;
224230 case PRIMITIVE_BYTE_ARRAY :
225231 primitive_size = sizeof (primitive -> byte_array );
226232 print_u16 ("Primitive size byte_array: " , primitive_size );
227- CHECK_ERROR (render_byte_array (ctx , txObj , & primitive -> byte_array ));
233+ CHECK_ERROR (render_byte_array (ctx , txObj , & primitive -> byte_array , outValue , outValueLen ));
228234 break ;
229235 case PRIMITIVE_BYTE_VEC :
230236 // TODO: Implement me
@@ -239,9 +245,8 @@ parser_error_t render_primitive(parser_context_t *ctx, parser_tx_t *txObj, primi
239245 print_string ("render_primitive IMPLEMENT ME 2" );
240246 return parser_unexpected_type ;
241247 case PRIMITIVE_STRING :
242- // TODO: Implement me
243- print_string ("render_primitive IMPLEMENT ME 3" );
244- return parser_unexpected_type ;
248+ MEMCPY (outValue , ctx -> buffer .ptr , ctx -> buffer .len );
249+ break ;
245250 case PRIMITIVE_BOOLEAN :
246251 // TODO: Implement me
247252 print_string ("render_primitive IMPLEMENT ME 4" );
@@ -251,5 +256,7 @@ parser_error_t render_primitive(parser_context_t *ctx, parser_tx_t *txObj, primi
251256 return parser_unexpected_type ;
252257 }
253258
259+ print_u8 ("render_primitive finished: " , primitive -> type );
260+
254261 return parser_ok ;
255262}
0 commit comments