Files
arnet/arnet_cli.c
2022-10-24 19:21:04 +02:00

64 lines
2.0 KiB
C

/* armando modem - iz4kll
* https://ciapini.wiki.esiliati.org/index.php/Armando47/ArNetCLI
*/
#include <stdint.h>
#include "../../mini-printf.h"
#include "../net.h"
#include "arnet.h"
#include "arnet_cli.h"
#include "arnet_types.h"
uint8_t arnet_cli_print_packet(net_packet net_pck, arnet_packet arnet_pck, uint8_t *Buffer) {
uint8_t q = 0;
q += mini_snprintf((char*) (&Buffer[q]), 24, "%c%u%c%c%u", ARNET_CLI_SRC_ADDR, arnet_pck.dh.src_addr, ARNET_CLI_ELEMENT_SEPARATOR, ARNET_CLI_DST_ADDR, arnet_pck.dh.dst_addr);
if (arnet_pck.vc.enabled == 1) {
q += mini_snprintf((char*) (&Buffer[q]), 24, "N%u", arnet_pck.vc.sequence);
}
if (arnet_pck.ec.enabled == 1) {
q += mini_snprintf((char*) (&Buffer[q]), 24, "%c%c%u", ARNET_CLI_ELEMENT_SEPARATOR, ARNET_CLI_EC_ENABLED, arnet_pck.ec.ARQ);
}
return q;
}
uint8_t arnet_cli_print_state(uint8_t *Buffer) {
uint8_t q = 0;
// indirizzi
q += mini_snprintf((char*) (&Buffer[q]), 24, "%c%c%u%c%c%c%u", ARNET_CLI_SRC_ADDR, ARNET_CLI_KV_SEPARATOR, node.address, ARNET_CLI_ELEMENT_SEPARATOR, ARNET_CLI_DST_ADDR, ARNET_CLI_KV_SEPARATOR, node.current_peer);
// ec
q += mini_snprintf((char*) (&Buffer[q]), 24, "%c%c%c%u", ARNET_CLI_ELEMENT_SEPARATOR, ARNET_CLI_EC_ENABLED, ARNET_CLI_KV_SEPARATOR, node.enabled.ec);
return q;
}
// esegui
uint8_t arnet_cli_exec(uint8_t name, uint32_t value) {
uint8_t err = ARNET_CLI_ERR_OK;
if (name == ARNET_CLI_SRC_ADDR) {
if (value >= ARNET_ADDRESS_SIZE) {
err = ARNET_CLI_ERR_INVALID_VALUE;
} else {
node.address = value;
}
} else if (name == ARNET_CLI_DST_ADDR) {
if (value >= ARNET_ADDRESS_SIZE) {
err = ARNET_CLI_ERR_INVALID_VALUE;
} else {
node.current_peer = value;
}
} else if (name == ARNET_CLI_EC_ENABLED) {
if (value == 0) node.enabled.ec = 0;
else {
node.enabled.ec = 1;
}
} else {
err = ARNET_CLI_ERR_INVALID_NAME;
}
return err;
}