[FL-1684] IRDA Add SIRC protocol (#693)
* IRDA HAL: Fill buffer refactoring * IRDA: Add SIRC protocol * IRDA: correct adr/cmd bit length * Disable Unit tests Co-authored-by: あく <alleteam@gmail.com>
This commit is contained in:
@@ -25,9 +25,9 @@ static void signal_received_callback(void* context, IrdaWorkerSignal* received_s
|
||||
sizeof(buf),
|
||||
"%s, A:0x%0*lX, C:0x%0*lX%s\r\n",
|
||||
irda_get_protocol_name(message->protocol),
|
||||
irda_get_protocol_address_length(message->protocol),
|
||||
ROUND_UP_TO(irda_get_protocol_address_length(message->protocol), 4),
|
||||
message->address,
|
||||
irda_get_protocol_command_length(message->protocol),
|
||||
ROUND_UP_TO(irda_get_protocol_command_length(message->protocol), 4),
|
||||
message->command,
|
||||
message->repeat ? " R" : "");
|
||||
cli_write(cli, (uint8_t*)buf, buf_cnt);
|
||||
@@ -98,6 +98,20 @@ static bool parse_message(const char* str, IrdaMessage* message) {
|
||||
return false;
|
||||
}
|
||||
|
||||
uint32_t address_length = irda_get_protocol_address_length(protocol);
|
||||
uint32_t address_mask = (1LU << address_length) - 1;
|
||||
if(address != (address & address_mask)) {
|
||||
printf("Address out of range (mask 0x%08lX): 0x%lX\r\n", address_mask, address);
|
||||
return false;
|
||||
}
|
||||
|
||||
uint32_t command_length = irda_get_protocol_command_length(protocol);
|
||||
uint32_t command_mask = (1LU << command_length) - 1;
|
||||
if(command != (command & command_mask)) {
|
||||
printf("Command out of range (mask 0x%08lX): 0x%lX\r\n", command_mask, command);
|
||||
return false;
|
||||
}
|
||||
|
||||
message->protocol = protocol;
|
||||
message->address = address;
|
||||
message->command = command;
|
||||
|
@@ -45,9 +45,9 @@ size_t IrdaAppFileParser::stringify_message(
|
||||
"%.31s %.31s A:%0*lX C:%0*lX\n",
|
||||
name,
|
||||
irda_get_protocol_name(protocol),
|
||||
irda_get_protocol_address_length(protocol),
|
||||
ROUND_UP_TO(irda_get_protocol_address_length(protocol), 4),
|
||||
message.address,
|
||||
irda_get_protocol_command_length(protocol),
|
||||
ROUND_UP_TO(irda_get_protocol_command_length(protocol), 4),
|
||||
message.command);
|
||||
|
||||
furi_assert(written < buf_size);
|
||||
@@ -162,8 +162,8 @@ std::unique_ptr<IrdaAppFileParser::IrdaFileSignal>
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
int address_length = irda_get_protocol_address_length(protocol);
|
||||
uint32_t address_mask = (1LU << (4 * address_length)) - 1;
|
||||
uint32_t address_length = irda_get_protocol_address_length(protocol);
|
||||
uint32_t address_mask = (1LU << address_length) - 1;
|
||||
if(address != (address & address_mask)) {
|
||||
size_t end_of_str = MIN(str.find_last_not_of(" \t\r\n") + 1, (size_t)30);
|
||||
FURI_LOG_E(
|
||||
@@ -176,8 +176,8 @@ std::unique_ptr<IrdaAppFileParser::IrdaFileSignal>
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
int command_length = irda_get_protocol_command_length(protocol);
|
||||
uint32_t command_mask = (1LU << (4 * command_length)) - 1;
|
||||
uint32_t command_length = irda_get_protocol_command_length(protocol);
|
||||
uint32_t command_mask = (1LU << command_length) - 1;
|
||||
if(command != (command & command_mask)) {
|
||||
size_t end_of_str = MIN(str.find_last_not_of(" \t\r\n") + 1, (size_t)30);
|
||||
FURI_LOG_E(
|
||||
|
@@ -29,9 +29,9 @@ void IrdaAppSceneEditDelete::on_enter(IrdaApp* app) {
|
||||
"%s\n%s\nA=0x%0*lX C=0x%0*lX",
|
||||
remote_manager->get_button_name(app->get_current_button()).c_str(),
|
||||
irda_get_protocol_name(message->protocol),
|
||||
irda_get_protocol_address_length(message->protocol),
|
||||
ROUND_UP_TO(irda_get_protocol_address_length(message->protocol), 4),
|
||||
message->address,
|
||||
irda_get_protocol_command_length(message->protocol),
|
||||
ROUND_UP_TO(irda_get_protocol_command_length(message->protocol), 4),
|
||||
message->command);
|
||||
} else {
|
||||
app->set_text_store(
|
||||
|
@@ -13,7 +13,7 @@ void IrdaAppSceneLearnEnterName::on_enter(IrdaApp* app) {
|
||||
0,
|
||||
"%.4s_%0*lX",
|
||||
irda_get_protocol_name(message->protocol),
|
||||
irda_get_protocol_command_length(message->protocol),
|
||||
ROUND_UP_TO(irda_get_protocol_command_length(message->protocol), 4),
|
||||
message->command);
|
||||
} else {
|
||||
auto raw_signal = signal.get_raw_signal();
|
||||
|
@@ -27,9 +27,9 @@ void IrdaAppSceneLearnSuccess::on_enter(IrdaApp* app) {
|
||||
app->set_text_store(
|
||||
1,
|
||||
"A: 0x%0*lX\nC: 0x%0*lX\n",
|
||||
irda_get_protocol_address_length(message->protocol),
|
||||
ROUND_UP_TO(irda_get_protocol_address_length(message->protocol), 4),
|
||||
message->address,
|
||||
irda_get_protocol_command_length(message->protocol),
|
||||
ROUND_UP_TO(irda_get_protocol_command_length(message->protocol), 4),
|
||||
message->command);
|
||||
dialog_ex_set_header(dialog_ex, app->get_text_store(0), 95, 10, AlignCenter, AlignCenter);
|
||||
dialog_ex_set_text(dialog_ex, app->get_text_store(1), 75, 23, AlignLeft, AlignTop);
|
||||
|
Reference in New Issue
Block a user