@@ -30,9 +30,19 @@ void __assert_fail(const char * assertion, const char * file, unsigned int line,
30
30
#endif
31
31
32
32
parser_error_t parser_parse (parser_context_t * ctx , const uint8_t * data , size_t dataLen ) {
33
- CHECK_PARSER_ERR (parser_init (ctx , data , dataLen ))
34
- parser_error_t err = _read (ctx , & parser_tx_obj );
35
- return err ;
33
+ CHECK_PARSER_ERR (parser_init (ctx , data + 1 , dataLen - 1 ))
34
+ parser_tx_obj .txtype = data [0 ];
35
+ switch (parser_tx_obj .txtype ){
36
+ case 0x00 : {
37
+ return _readTokenTransfer (ctx , & parser_tx_obj );
38
+ }
39
+ case 0x01 : {
40
+ return _readTransactionStateRead (ctx , & parser_tx_obj );
41
+ }
42
+ default : {
43
+ return parser_unexepected_error ;
44
+ }
45
+ }
36
46
}
37
47
38
48
parser_error_t parser_validate (const parser_context_t * ctx ) {
@@ -58,7 +68,62 @@ parser_error_t parser_getNumItems(const parser_context_t *ctx, uint8_t *num_item
58
68
return parser_ok ;
59
69
}
60
70
61
- parser_error_t parser_getItem (const parser_context_t * ctx ,
71
+ parser_error_t parser_getItemTransactionStateRead (const parser_context_t * ctx ,
72
+ uint8_t displayIdx ,
73
+ char * outKey , uint16_t outKeyLen ,
74
+ char * outVal , uint16_t outValLen ,
75
+ uint8_t pageIdx , uint8_t * pageCount ) {
76
+ MEMZERO (outKey , outKeyLen );
77
+ MEMZERO (outVal , outValLen );
78
+ snprintf (outKey , outKeyLen , "?" );
79
+ snprintf (outVal , outValLen , "?" );
80
+ * pageCount = 1 ;
81
+
82
+ uint8_t numItems = 0 ;
83
+ CHECK_PARSER_ERR (parser_getNumItems (ctx , & numItems ))
84
+ CHECK_APP_CANARY ()
85
+
86
+ unsigned char buffer [100 ];
87
+ MEMZERO (buffer , sizeof (buffer ));
88
+
89
+ if (displayIdx < 0 || displayIdx >= numItems ) {
90
+ return parser_no_data ;
91
+ }
92
+
93
+ if (displayIdx == 0 ) {
94
+ snprintf (outKey , outKeyLen , "request_type" );
95
+ snprintf (outVal , outValLen , "%s" , parser_tx_obj .request_type .data );
96
+ return parser_ok ;
97
+ }
98
+ if (displayIdx == 1 ) {
99
+ snprintf (outKey , outKeyLen , "ingress_expiry" );
100
+ fpuint64_to_str (buffer , sizeof (buffer ), parser_tx_obj .ingress_expiry , 0 );
101
+ pageString (outVal , outValLen , buffer , pageIdx , pageCount );
102
+ return parser_ok ;
103
+ }
104
+
105
+ if (displayIdx == 2 ) {
106
+ snprintf (outKey , outKeyLen , "sender" );
107
+ uint16_t outLen = 0 ;
108
+ uint8_t tmpbuffer [100 ];
109
+ crypto_addrToTextual ((uint8_t * )parser_tx_obj .sender .data , parser_tx_obj .sender .len , tmpbuffer , & outLen );
110
+ addr_to_textual (buffer , sizeof (buffer ), tmpbuffer , outLen );
111
+ pageString (outVal , outValLen , buffer , pageIdx , pageCount );
112
+ return parser_ok ;
113
+ }
114
+
115
+ displayIdx -= 3 ;
116
+ if (displayIdx < 0 || displayIdx >= parser_tx_obj .paths .arrayLen ) {
117
+ return parser_no_data ;
118
+ }
119
+ snprintf (outKey , outKeyLen , "Path %d" , displayIdx + 1 );
120
+ //pageString(outVal, outValLen, (char *)parser_tx_obj.paths.paths[displayIdx].data, pageIdx, pageCount);
121
+ return parser_ok ;
122
+
123
+
124
+ }
125
+
126
+ parser_error_t parser_getItemTokenTransfer (const parser_context_t * ctx ,
62
127
uint8_t displayIdx ,
63
128
char * outKey , uint16_t outKeyLen ,
64
129
char * outVal , uint16_t outValLen ,
@@ -134,45 +199,24 @@ parser_error_t parser_getItem(const parser_context_t *ctx,
134
199
135
200
return parser_ok ;
136
201
}
137
- //
138
- // if (displayIdx == 7) {
139
- // snprintf(outKey, outKeyLen, "Method");
140
- // *pageCount = 1;
141
- // switch(parser_tx_obj.method) {
142
- // case method0:
143
- // snprintf(outVal, outValLen, "Transfer");
144
- // return parser_ok;
145
- // case method1:
146
- // snprintf(outVal, outValLen, "Method1");
147
- // return parser_ok;
148
- // case method2:
149
- // snprintf(outVal, outValLen, "Method2");
150
- // return parser_ok;
151
- // case method3:
152
- // snprintf(outVal, outValLen, "Method3");
153
- // return parser_ok;
154
- // case method4:
155
- // snprintf(outVal, outValLen, "Method4");
156
- // return parser_ok;
157
- // case method5:
158
- // snprintf(outVal, outValLen, "Method5");
159
- // return parser_ok;
160
- // case method6:
161
- // snprintf(outVal, outValLen, "Method6");
162
- // return parser_ok;
163
- // case method7:
164
- // snprintf(outVal, outValLen, "Method7");
165
- // return parser_ok;
166
- // }
167
- // return parser_unexpected_method;
168
- // }
169
- //
170
- // if (displayIdx == 8) {
171
- // *pageCount = 1;
172
- // snprintf(outKey, outKeyLen, "Params");
173
- // snprintf(outVal, outValLen, "Not Available");
174
- // return parser_ok;
175
- // }
176
-
177
202
return parser_ok ;
178
203
}
204
+
205
+ parser_error_t parser_getItem (const parser_context_t * ctx ,
206
+ uint8_t displayIdx ,
207
+ char * outKey , uint16_t outKeyLen ,
208
+ char * outVal , uint16_t outValLen ,
209
+ uint8_t pageIdx , uint8_t * pageCount ){
210
+ switch (parser_tx_obj .txtype ){
211
+ case 0x00 : {
212
+ return parser_getItemTokenTransfer (ctx , displayIdx , outKey , outKeyLen , outVal , outValLen , pageIdx , pageCount );
213
+ }
214
+ case 0x01 : {
215
+ return parser_getItemTransactionStateRead (ctx , displayIdx , outKey , outKeyLen , outVal , outValLen , pageIdx , pageCount );
216
+
217
+ }
218
+ default : {
219
+ return parser_unexepected_error ;
220
+ }
221
+ }
222
+ }
0 commit comments