|
|
|
@ -47,7 +47,11 @@ def _get_route_type(container): |
|
|
|
|
if container['return_type'] == 'u8': |
|
|
|
|
return 'XAP_VALUE' |
|
|
|
|
elif 'return_constant' in container: |
|
|
|
|
if container['return_type'] == 'u32': |
|
|
|
|
if container['return_type'] == 'u8': |
|
|
|
|
return 'XAP_CONST_MEM' |
|
|
|
|
elif container['return_type'] == 'u16': |
|
|
|
|
return 'XAP_CONST_MEM' |
|
|
|
|
elif container['return_type'] == 'u32': |
|
|
|
|
return 'XAP_CONST_MEM' |
|
|
|
|
elif container['return_type'] == 'struct': |
|
|
|
|
return 'XAP_CONST_MEM' |
|
|
|
@ -69,42 +73,7 @@ def _append_routing_table_declaration(lines, container, container_id, route_stac |
|
|
|
|
|
|
|
|
|
elif 'return_execute' in container: |
|
|
|
|
execute = container['return_execute'] |
|
|
|
|
request_type = container.get('request_type', None) |
|
|
|
|
return_type = container['return_type'] |
|
|
|
|
lines.append( |
|
|
|
|
f''' |
|
|
|
|
bool xap_respond_{execute}(xap_token_t token, const uint8_t *data, size_t data_len) {{ |
|
|
|
|
if (data_len != {_get_c_size(request_type)}) {{ |
|
|
|
|
xap_respond_failure(token, 0); |
|
|
|
|
return false; |
|
|
|
|
}} |
|
|
|
|
|
|
|
|
|
uint8_t ret[{_get_c_size(return_type)}] = {{0}}; |
|
|
|
|
''' |
|
|
|
|
) |
|
|
|
|
if not request_type: |
|
|
|
|
lines.append(f''' |
|
|
|
|
bool {execute}(uint8_t *ret, uint8_t ret_len); |
|
|
|
|
if(!{execute}(ret, sizeof(ret))) {{ |
|
|
|
|
xap_respond_failure(token, 0); |
|
|
|
|
return false; |
|
|
|
|
}} |
|
|
|
|
''') |
|
|
|
|
else: |
|
|
|
|
lines.append( |
|
|
|
|
f''' |
|
|
|
|
{_get_c_type(request_type)} *argp = ({_get_c_type(request_type)} *)&data[0]; |
|
|
|
|
|
|
|
|
|
bool {execute}({_get_c_type(request_type)} arg, uint8_t *ret, uint8_t ret_len); |
|
|
|
|
if(!{execute}(*argp, ret, sizeof(ret))) {{ |
|
|
|
|
xap_respond_failure(token, 0); |
|
|
|
|
return false; |
|
|
|
|
}} |
|
|
|
|
''' |
|
|
|
|
) |
|
|
|
|
lines.append(''' |
|
|
|
|
return xap_respond_data(token, ret, sizeof(ret)); |
|
|
|
|
}''') |
|
|
|
|
lines.append(f'bool xap_respond_{execute}(xap_token_t token, const uint8_t *data, size_t data_len);') |
|
|
|
|
|
|
|
|
|
# elif 'return_value' in container: |
|
|
|
|
# value = container['return_value'] |
|
|
|
@ -114,21 +83,24 @@ bool xap_respond_{execute}(xap_token_t token, const uint8_t *data, size_t data_l |
|
|
|
|
|
|
|
|
|
elif 'return_constant' in container: |
|
|
|
|
|
|
|
|
|
if container['return_type'] == 'u32': |
|
|
|
|
if container['return_type'] == 'u8': |
|
|
|
|
constant = container['return_constant'] |
|
|
|
|
lines.append('') |
|
|
|
|
lines.append(f'static const uint32_t {route_name}_data PROGMEM = {constant};') |
|
|
|
|
lines.append(f'static const uint8_t {route_name}_data PROGMEM = {constant};') |
|
|
|
|
|
|
|
|
|
elif container['return_type'] == 'struct': |
|
|
|
|
elif container['return_type'] == 'u16': |
|
|
|
|
constant = container['return_constant'] |
|
|
|
|
lines.append('') |
|
|
|
|
lines.append(f'static const struct {route_name}_t {{') |
|
|
|
|
lines.append(f'static const uint16_t {route_name}_data PROGMEM = {constant};') |
|
|
|
|
|
|
|
|
|
for member in container['return_struct_members']: |
|
|
|
|
member_type = _get_c_type(member['type']) |
|
|
|
|
member_name = to_snake(member['name']) |
|
|
|
|
lines.append(f' const {member_type} {member_name};') |
|
|
|
|
elif container['return_type'] == 'u32': |
|
|
|
|
constant = container['return_constant'] |
|
|
|
|
lines.append('') |
|
|
|
|
lines.append(f'static const uint32_t {route_name}_data PROGMEM = {constant};') |
|
|
|
|
|
|
|
|
|
lines.append(f'}} {route_name}_data PROGMEM = {{') |
|
|
|
|
elif container['return_type'] == 'struct': |
|
|
|
|
lines.append('') |
|
|
|
|
lines.append(f'static const {route_name}_t {route_name}_data PROGMEM = {{') |
|
|
|
|
|
|
|
|
|
for constant in container['return_constant']: |
|
|
|
|
lines.append(f' {constant},') |
|
|
|
@ -212,7 +184,11 @@ def _append_routing_table_entry(lines, container, container_id, route_stack): |
|
|
|
|
elif 'return_value' in container: |
|
|
|
|
_append_routing_table_entry_value(lines, container, container_id, route_stack) |
|
|
|
|
elif 'return_constant' in container: |
|
|
|
|
if container['return_type'] == 'u32': |
|
|
|
|
if container['return_type'] == 'u8': |
|
|
|
|
_append_routing_table_entry_const_data(lines, container, container_id, route_stack) |
|
|
|
|
elif container['return_type'] == 'u16': |
|
|
|
|
_append_routing_table_entry_const_data(lines, container, container_id, route_stack) |
|
|
|
|
elif container['return_type'] == 'u32': |
|
|
|
|
_append_routing_table_entry_const_data(lines, container, container_id, route_stack) |
|
|
|
|
elif container['return_type'] == 'struct': |
|
|
|
|
_append_routing_table_entry_const_data(lines, container, container_id, route_stack) |
|
|
|
|