[FL-1437] Replace stringstream with sscanf (#540)

Do this to save space. Stringstream is very heavy.
This commit is contained in:
Albert Kharisov 2021-06-25 15:25:03 +03:00 committed by GitHub
parent 158c859bdc
commit 5e08674663
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -54,7 +54,7 @@ static void irda_cli_start_ir_rx(Cli* cli, string_t args, void* context) {
} }
static void irda_cli_print_usage(void) { static void irda_cli_print_usage(void) {
printf("Usage:\r\n\tir_tx <protocol> <command> <address>\r\n"); printf("Usage:\r\n\tir_tx <protocol> <address> <command>\r\n");
printf("\t<command> and <address> are hex-formatted\r\n"); printf("\t<command> and <address> are hex-formatted\r\n");
printf("\tAvailable protocols:"); printf("\tAvailable protocols:");
for(int i = 0; irda_is_protocol_valid((IrdaProtocol)i); ++i) { for(int i = 0; irda_is_protocol_valid((IrdaProtocol)i); ++i) {
@ -68,18 +68,19 @@ static void irda_cli_start_ir_tx(Cli* cli, string_t args, void* context) {
printf("IRDA is busy. Exit."); printf("IRDA is busy. Exit.");
return; return;
} }
auto ss = std::istringstream(string_get_cstr(args));
uint32_t command = 0; uint32_t command = 0;
uint32_t address = 0; uint32_t address = 0;
std::string protocol_name; char protocol_name[32];
int parsed = sscanf(string_get_cstr(args), "%31s %lX %lX", protocol_name, &address, &command);
if(!(ss >> protocol_name) || !(ss >> std::hex >> address) || !(ss >> std::hex >> command)) { if(parsed != 3) {
printf("Wrong arguments.\r\n"); printf("Wrong arguments.\r\n");
irda_cli_print_usage(); irda_cli_print_usage();
return; return;
} }
IrdaProtocol protocol = irda_get_protocol_by_name(protocol_name.c_str()); IrdaProtocol protocol = irda_get_protocol_by_name(protocol_name);
if(!irda_is_protocol_valid(protocol)) { if(!irda_is_protocol_valid(protocol)) {
printf("Unknown protocol.\r\n"); printf("Unknown protocol.\r\n");