mirror of
https://github.com/DarkFlippers/unleashed-firmware.git
synced 2024-11-22 17:33:13 +03:00
[FL-3827] iButton ID writing (#3734)
* Function naming corrections and enabled writing ID for all dallas blanks * Enable ID writing for ds1971 and ds1996 * Sync API Symbols Co-authored-by: あく <alleteam@gmail.com>
This commit is contained in:
parent
380ec2ac46
commit
01b402ba2b
@ -156,7 +156,7 @@ void ibutton_cli_write(Cli* cli, FuriString* args) {
|
||||
}
|
||||
|
||||
if(!(ibutton_protocols_get_features(protocols, ibutton_key_get_protocol_id(key)) &
|
||||
iButtonProtocolFeatureWriteBlank)) {
|
||||
iButtonProtocolFeatureWriteId)) {
|
||||
ibutton_cli_print_usage();
|
||||
break;
|
||||
}
|
||||
@ -165,7 +165,7 @@ void ibutton_cli_write(Cli* cli, FuriString* args) {
|
||||
ibutton_cli_print_key(protocols, key);
|
||||
printf("Press Ctrl+C to abort\r\n");
|
||||
|
||||
ibutton_worker_write_blank_start(worker, key);
|
||||
ibutton_worker_write_id_start(worker, key);
|
||||
while(true) {
|
||||
uint32_t flags = furi_event_flag_wait(
|
||||
write_context.event, EVENT_FLAG_IBUTTON_COMPLETE, FuriFlagWaitAny, 100);
|
||||
|
@ -36,7 +36,7 @@
|
||||
|
||||
typedef enum {
|
||||
iButtonWriteModeInvalid,
|
||||
iButtonWriteModeBlank,
|
||||
iButtonWriteModeId,
|
||||
iButtonWriteModeCopy,
|
||||
} iButtonWriteMode;
|
||||
|
||||
|
@ -5,7 +5,7 @@ typedef enum {
|
||||
SubmenuIndexSave,
|
||||
SubmenuIndexEmulate,
|
||||
SubmenuIndexViewData,
|
||||
SubmenuIndexWriteBlank,
|
||||
SubmenuIndexWriteId,
|
||||
SubmenuIndexWriteCopy,
|
||||
} SubmenuIndex;
|
||||
|
||||
@ -30,11 +30,11 @@ void ibutton_scene_read_key_menu_on_enter(void* context) {
|
||||
ibutton_scene_read_key_menu_submenu_callback,
|
||||
ibutton);
|
||||
|
||||
if(features & iButtonProtocolFeatureWriteBlank) {
|
||||
if(features & iButtonProtocolFeatureWriteId) {
|
||||
submenu_add_item(
|
||||
submenu,
|
||||
"Write ID",
|
||||
SubmenuIndexWriteBlank,
|
||||
SubmenuIndexWriteId,
|
||||
ibutton_scene_read_key_menu_submenu_callback,
|
||||
ibutton);
|
||||
}
|
||||
@ -78,8 +78,8 @@ bool ibutton_scene_read_key_menu_on_event(void* context, SceneManagerEvent event
|
||||
dolphin_deed(DolphinDeedIbuttonEmulate);
|
||||
} else if(event.event == SubmenuIndexViewData) {
|
||||
scene_manager_next_scene(scene_manager, iButtonSceneViewData);
|
||||
} else if(event.event == SubmenuIndexWriteBlank) {
|
||||
ibutton->write_mode = iButtonWriteModeBlank;
|
||||
} else if(event.event == SubmenuIndexWriteId) {
|
||||
ibutton->write_mode = iButtonWriteModeId;
|
||||
scene_manager_next_scene(scene_manager, iButtonSceneWrite);
|
||||
} else if(event.event == SubmenuIndexWriteCopy) {
|
||||
ibutton->write_mode = iButtonWriteModeCopy;
|
||||
|
@ -3,7 +3,7 @@
|
||||
|
||||
enum SubmenuIndex {
|
||||
SubmenuIndexEmulate,
|
||||
SubmenuIndexWriteBlank,
|
||||
SubmenuIndexWriteId,
|
||||
SubmenuIndexWriteCopy,
|
||||
SubmenuIndexEdit,
|
||||
SubmenuIndexRename,
|
||||
@ -20,9 +20,9 @@ void ibutton_scene_saved_key_menu_on_enter(void* context) {
|
||||
|
||||
submenu_add_item(submenu, "Emulate", SubmenuIndexEmulate, ibutton_submenu_callback, ibutton);
|
||||
|
||||
if(features & iButtonProtocolFeatureWriteBlank) {
|
||||
if(features & iButtonProtocolFeatureWriteId) {
|
||||
submenu_add_item(
|
||||
submenu, "Write ID", SubmenuIndexWriteBlank, ibutton_submenu_callback, ibutton);
|
||||
submenu, "Write ID", SubmenuIndexWriteId, ibutton_submenu_callback, ibutton);
|
||||
}
|
||||
|
||||
if(features & iButtonProtocolFeatureWriteCopy) {
|
||||
@ -55,8 +55,8 @@ bool ibutton_scene_saved_key_menu_on_event(void* context, SceneManagerEvent even
|
||||
if(event.event == SubmenuIndexEmulate) {
|
||||
scene_manager_next_scene(scene_manager, iButtonSceneEmulate);
|
||||
dolphin_deed(DolphinDeedIbuttonEmulate);
|
||||
} else if(event.event == SubmenuIndexWriteBlank) {
|
||||
ibutton->write_mode = iButtonWriteModeBlank;
|
||||
} else if(event.event == SubmenuIndexWriteId) {
|
||||
ibutton->write_mode = iButtonWriteModeId;
|
||||
scene_manager_next_scene(scene_manager, iButtonSceneWrite);
|
||||
} else if(event.event == SubmenuIndexWriteCopy) {
|
||||
ibutton->write_mode = iButtonWriteModeCopy;
|
||||
|
@ -52,9 +52,9 @@ void ibutton_scene_write_on_enter(void* context) {
|
||||
|
||||
ibutton_worker_write_set_callback(worker, ibutton_scene_write_callback, ibutton);
|
||||
|
||||
if(ibutton->write_mode == iButtonWriteModeBlank) {
|
||||
if(ibutton->write_mode == iButtonWriteModeId) {
|
||||
furi_string_set(tmp, "Writing ID");
|
||||
ibutton_worker_write_blank_start(worker, key);
|
||||
ibutton_worker_write_id_start(worker, key);
|
||||
|
||||
} else if(ibutton->write_mode == iButtonWriteModeCopy) {
|
||||
furi_string_set(tmp, "Full Writing");
|
||||
|
@ -160,7 +160,7 @@ bool ibutton_protocols_read(iButtonProtocols* protocols, iButtonKey* key) {
|
||||
return id != iButtonProtocolIdInvalid;
|
||||
}
|
||||
|
||||
bool ibutton_protocols_write_blank(iButtonProtocols* protocols, iButtonKey* key) {
|
||||
bool ibutton_protocols_write_id(iButtonProtocols* protocols, iButtonKey* key) {
|
||||
furi_check(protocols);
|
||||
furi_check(key);
|
||||
|
||||
@ -168,7 +168,7 @@ bool ibutton_protocols_write_blank(iButtonProtocols* protocols, iButtonKey* key)
|
||||
iButtonProtocolData* data = ibutton_key_get_protocol_data(key);
|
||||
|
||||
GET_PROTOCOL_GROUP(id);
|
||||
return GROUP_BASE->write_blank(GROUP_DATA, data, PROTOCOL_ID);
|
||||
return GROUP_BASE->write_id(GROUP_DATA, data, PROTOCOL_ID);
|
||||
}
|
||||
|
||||
bool ibutton_protocols_write_copy(iButtonProtocols* protocols, iButtonKey* key) {
|
||||
|
@ -88,7 +88,7 @@ bool ibutton_protocols_read(iButtonProtocols* protocols, iButtonKey* key);
|
||||
* @param [in] key pointer to the key to be written
|
||||
* @return true on success, false on failure
|
||||
*/
|
||||
bool ibutton_protocols_write_blank(iButtonProtocols* protocols, iButtonKey* key);
|
||||
bool ibutton_protocols_write_id(iButtonProtocols* protocols, iButtonKey* key);
|
||||
|
||||
/**
|
||||
* Write the key to another one of the same type
|
||||
|
@ -7,7 +7,7 @@ typedef enum {
|
||||
iButtonMessageEnd,
|
||||
iButtonMessageStop,
|
||||
iButtonMessageRead,
|
||||
iButtonMessageWriteBlank,
|
||||
iButtonMessageWriteId,
|
||||
iButtonMessageWriteCopy,
|
||||
iButtonMessageEmulate,
|
||||
iButtonMessageNotifyEmulate,
|
||||
@ -78,11 +78,11 @@ void ibutton_worker_read_start(iButtonWorker* worker, iButtonKey* key) {
|
||||
furi_message_queue_put(worker->messages, &message, FuriWaitForever) == FuriStatusOk);
|
||||
}
|
||||
|
||||
void ibutton_worker_write_blank_start(iButtonWorker* worker, iButtonKey* key) {
|
||||
void ibutton_worker_write_id_start(iButtonWorker* worker, iButtonKey* key) {
|
||||
furi_check(worker);
|
||||
furi_check(key);
|
||||
|
||||
iButtonMessage message = {.type = iButtonMessageWriteBlank, .data.key = key};
|
||||
iButtonMessage message = {.type = iButtonMessageWriteId, .data.key = key};
|
||||
|
||||
furi_check(
|
||||
furi_message_queue_put(worker->messages, &message, FuriWaitForever) == FuriStatusOk);
|
||||
@ -185,9 +185,9 @@ static int32_t ibutton_worker_thread(void* thread_context) {
|
||||
ibutton_worker_set_key_p(worker, message.data.key);
|
||||
ibutton_worker_switch_mode(worker, iButtonWorkerModeRead);
|
||||
break;
|
||||
case iButtonMessageWriteBlank:
|
||||
case iButtonMessageWriteId:
|
||||
ibutton_worker_set_key_p(worker, message.data.key);
|
||||
ibutton_worker_switch_mode(worker, iButtonWorkerModeWriteBlank);
|
||||
ibutton_worker_switch_mode(worker, iButtonWorkerModeWriteId);
|
||||
break;
|
||||
case iButtonMessageWriteCopy:
|
||||
ibutton_worker_set_key_p(worker, message.data.key);
|
||||
|
@ -84,7 +84,7 @@ void ibutton_worker_write_set_callback(
|
||||
* @param worker
|
||||
* @param key
|
||||
*/
|
||||
void ibutton_worker_write_blank_start(iButtonWorker* worker, iButtonKey* key);
|
||||
void ibutton_worker_write_id_start(iButtonWorker* worker, iButtonKey* key);
|
||||
|
||||
/**
|
||||
* Start write copy mode
|
||||
|
@ -25,7 +25,7 @@ typedef struct {
|
||||
typedef enum {
|
||||
iButtonWorkerModeIdle,
|
||||
iButtonWorkerModeRead,
|
||||
iButtonWorkerModeWriteBlank,
|
||||
iButtonWorkerModeWriteId,
|
||||
iButtonWorkerModeWriteCopy,
|
||||
iButtonWorkerModeEmulate,
|
||||
} iButtonWorkerMode;
|
||||
|
@ -20,7 +20,7 @@ static void ibutton_worker_mode_read_tick(iButtonWorker* worker);
|
||||
static void ibutton_worker_mode_read_stop(iButtonWorker* worker);
|
||||
|
||||
static void ibutton_worker_mode_write_common_start(iButtonWorker* worker);
|
||||
static void ibutton_worker_mode_write_blank_tick(iButtonWorker* worker);
|
||||
static void ibutton_worker_mode_write_id_tick(iButtonWorker* worker);
|
||||
static void ibutton_worker_mode_write_copy_tick(iButtonWorker* worker);
|
||||
static void ibutton_worker_mode_write_common_stop(iButtonWorker* worker);
|
||||
|
||||
@ -40,7 +40,7 @@ const iButtonWorkerModeType ibutton_worker_modes[] = {
|
||||
{
|
||||
.quant = 1000,
|
||||
.start = ibutton_worker_mode_write_common_start,
|
||||
.tick = ibutton_worker_mode_write_blank_tick,
|
||||
.tick = ibutton_worker_mode_write_id_tick,
|
||||
.stop = ibutton_worker_mode_write_common_stop,
|
||||
},
|
||||
{
|
||||
@ -123,10 +123,10 @@ void ibutton_worker_mode_write_common_start(iButtonWorker* worker) { //-V524
|
||||
furi_hal_power_enable_otg();
|
||||
}
|
||||
|
||||
void ibutton_worker_mode_write_blank_tick(iButtonWorker* worker) {
|
||||
void ibutton_worker_mode_write_id_tick(iButtonWorker* worker) {
|
||||
furi_assert(worker->key);
|
||||
|
||||
const bool success = ibutton_protocols_write_blank(worker->protocols, worker->key);
|
||||
const bool success = ibutton_protocols_write_id(worker->protocols, worker->key);
|
||||
// TODO FL-3527: pass a proper result to the callback
|
||||
const iButtonWorkerWriteResult result = success ? iButtonWorkerWriteOK :
|
||||
iButtonWorkerWriteNoDetect;
|
||||
|
@ -25,7 +25,7 @@ typedef struct {
|
||||
const char* name;
|
||||
|
||||
iButtonProtocolDallasReadWriteFunc read;
|
||||
iButtonProtocolDallasReadWriteFunc write_blank;
|
||||
iButtonProtocolDallasReadWriteFunc write_id;
|
||||
iButtonProtocolDallasReadWriteFunc write_copy;
|
||||
iButtonProtocolDallasEmulateFunc emulate;
|
||||
iButtonProtocolDallasSaveFunc save;
|
||||
|
@ -5,6 +5,8 @@
|
||||
|
||||
#include "dallas_common.h"
|
||||
|
||||
#include "../blanks/tm2004.h"
|
||||
|
||||
#define DS1971_FAMILY_CODE 0x14U
|
||||
#define DS1971_FAMILY_NAME "DS1971"
|
||||
|
||||
@ -31,6 +33,7 @@ typedef struct {
|
||||
} DS1971ProtocolData;
|
||||
|
||||
static bool dallas_ds1971_read(OneWireHost*, void*);
|
||||
static bool dallas_ds1971_write_id(OneWireHost*, iButtonProtocolData*);
|
||||
static bool dallas_ds1971_write_copy(OneWireHost*, iButtonProtocolData*);
|
||||
static void dallas_ds1971_emulate(OneWireSlave*, iButtonProtocolData*);
|
||||
static bool dallas_ds1971_load(FlipperFormat*, uint32_t, iButtonProtocolData*);
|
||||
@ -48,13 +51,14 @@ static bool ds1971_emulate_read_mem(OneWireSlave* bus, const uint8_t* data, size
|
||||
|
||||
const iButtonProtocolDallasBase ibutton_protocol_ds1971 = {
|
||||
.family_code = DS1971_FAMILY_CODE,
|
||||
.features = iButtonProtocolFeatureExtData | iButtonProtocolFeatureWriteCopy,
|
||||
.features = iButtonProtocolFeatureExtData | iButtonProtocolFeatureWriteId |
|
||||
iButtonProtocolFeatureWriteCopy,
|
||||
.data_size = sizeof(DS1971ProtocolData),
|
||||
.manufacturer = DALLAS_COMMON_MANUFACTURER_NAME,
|
||||
.name = DS1971_FAMILY_NAME,
|
||||
|
||||
.read = dallas_ds1971_read,
|
||||
.write_blank = NULL, // TODO FL-3531: Implement writing to blank
|
||||
.write_id = dallas_ds1971_write_id,
|
||||
.write_copy = dallas_ds1971_write_copy,
|
||||
.emulate = dallas_ds1971_emulate,
|
||||
.save = dallas_ds1971_save,
|
||||
@ -74,6 +78,11 @@ bool dallas_ds1971_read(OneWireHost* host, iButtonProtocolData* protocol_data) {
|
||||
dallas_ds1971_read_mem(host, 0, data->eeprom_data, DS1971_EEPROM_DATA_SIZE);
|
||||
}
|
||||
|
||||
bool dallas_ds1971_write_id(OneWireHost* host, iButtonProtocolData* protocol_data) {
|
||||
DS1971ProtocolData* data = protocol_data;
|
||||
return tm2004_write(host, data->rom_data.bytes, sizeof(DallasCommonRomData));
|
||||
}
|
||||
|
||||
bool dallas_ds1971_write_copy(OneWireHost* host, iButtonProtocolData* protocol_data) {
|
||||
DS1971ProtocolData* data = protocol_data;
|
||||
|
||||
|
@ -23,7 +23,7 @@ typedef struct {
|
||||
} DS1990ProtocolData;
|
||||
|
||||
static bool dallas_ds1990_read(OneWireHost*, iButtonProtocolData*);
|
||||
static bool dallas_ds1990_write_blank(OneWireHost*, iButtonProtocolData*);
|
||||
static bool dallas_ds1990_write_id(OneWireHost*, iButtonProtocolData*);
|
||||
static void dallas_ds1990_emulate(OneWireSlave*, iButtonProtocolData*);
|
||||
static bool dallas_ds1990_load(FlipperFormat*, uint32_t, iButtonProtocolData*);
|
||||
static bool dallas_ds1990_save(FlipperFormat*, const iButtonProtocolData*);
|
||||
@ -36,13 +36,13 @@ static void dallas_ds1990_apply_edits(iButtonProtocolData*);
|
||||
|
||||
const iButtonProtocolDallasBase ibutton_protocol_ds1990 = {
|
||||
.family_code = DS1990_FAMILY_CODE,
|
||||
.features = iButtonProtocolFeatureWriteBlank,
|
||||
.features = iButtonProtocolFeatureWriteId,
|
||||
.data_size = sizeof(DS1990ProtocolData),
|
||||
.manufacturer = DALLAS_COMMON_MANUFACTURER_NAME,
|
||||
.name = DS1990_FAMILY_NAME,
|
||||
|
||||
.read = dallas_ds1990_read,
|
||||
.write_blank = dallas_ds1990_write_blank,
|
||||
.write_id = dallas_ds1990_write_id,
|
||||
.write_copy = NULL, /* No data to write a copy */
|
||||
.emulate = dallas_ds1990_emulate,
|
||||
.save = dallas_ds1990_save,
|
||||
@ -61,7 +61,7 @@ bool dallas_ds1990_read(OneWireHost* host, iButtonProtocolData* protocol_data) {
|
||||
return onewire_host_reset(host) && dallas_common_read_rom(host, &data->rom_data);
|
||||
}
|
||||
|
||||
bool dallas_ds1990_write_blank(OneWireHost* host, iButtonProtocolData* protocol_data) {
|
||||
bool dallas_ds1990_write_id(OneWireHost* host, iButtonProtocolData* protocol_data) {
|
||||
DS1990ProtocolData* data = protocol_data;
|
||||
|
||||
return rw1990_write_v1(host, data->rom_data.bytes, sizeof(DallasCommonRomData)) ||
|
||||
|
@ -31,7 +31,7 @@ typedef struct {
|
||||
} DS1992ProtocolData;
|
||||
|
||||
static bool dallas_ds1992_read(OneWireHost*, void*);
|
||||
static bool dallas_ds1992_write_blank(OneWireHost*, iButtonProtocolData*);
|
||||
static bool dallas_ds1992_write_id(OneWireHost*, iButtonProtocolData*);
|
||||
static bool dallas_ds1992_write_copy(OneWireHost*, iButtonProtocolData*);
|
||||
static void dallas_ds1992_emulate(OneWireSlave*, iButtonProtocolData*);
|
||||
static bool dallas_ds1992_load(FlipperFormat*, uint32_t, iButtonProtocolData*);
|
||||
@ -46,14 +46,14 @@ static void dallas_ds1992_apply_edits(iButtonProtocolData*);
|
||||
|
||||
const iButtonProtocolDallasBase ibutton_protocol_ds1992 = {
|
||||
.family_code = DS1992_FAMILY_CODE,
|
||||
.features = iButtonProtocolFeatureExtData | iButtonProtocolFeatureWriteBlank |
|
||||
.features = iButtonProtocolFeatureExtData | iButtonProtocolFeatureWriteId |
|
||||
iButtonProtocolFeatureWriteCopy,
|
||||
.data_size = sizeof(DS1992ProtocolData),
|
||||
.manufacturer = DALLAS_COMMON_MANUFACTURER_NAME,
|
||||
.name = DS1992_FAMILY_NAME,
|
||||
|
||||
.read = dallas_ds1992_read,
|
||||
.write_blank = dallas_ds1992_write_blank,
|
||||
.write_id = dallas_ds1992_write_id,
|
||||
.write_copy = dallas_ds1992_write_copy,
|
||||
.emulate = dallas_ds1992_emulate,
|
||||
.save = dallas_ds1992_save,
|
||||
@ -73,10 +73,9 @@ bool dallas_ds1992_read(OneWireHost* host, iButtonProtocolData* protocol_data) {
|
||||
dallas_common_read_mem(host, 0, data->sram_data, DS1992_SRAM_DATA_SIZE);
|
||||
}
|
||||
|
||||
bool dallas_ds1992_write_blank(OneWireHost* host, iButtonProtocolData* protocol_data) {
|
||||
bool dallas_ds1992_write_id(OneWireHost* host, iButtonProtocolData* protocol_data) {
|
||||
DS1992ProtocolData* data = protocol_data;
|
||||
// TODO FL-3532: Make this work, currently broken
|
||||
return tm2004_write(host, (uint8_t*)data, sizeof(DallasCommonRomData) + DS1992_SRAM_DATA_SIZE);
|
||||
return tm2004_write(host, data->rom_data.bytes, sizeof(DallasCommonRomData));
|
||||
}
|
||||
|
||||
bool dallas_ds1992_write_copy(OneWireHost* host, iButtonProtocolData* protocol_data) {
|
||||
|
@ -5,6 +5,8 @@
|
||||
|
||||
#include "dallas_common.h"
|
||||
|
||||
#include "../blanks/tm2004.h"
|
||||
|
||||
#define DS1996_FAMILY_CODE 0x0CU
|
||||
#define DS1996_FAMILY_NAME "DS1996"
|
||||
|
||||
@ -29,6 +31,7 @@ typedef struct {
|
||||
} DS1996ProtocolData;
|
||||
|
||||
static bool dallas_ds1996_read(OneWireHost*, void*);
|
||||
static bool dallas_ds1996_write_id(OneWireHost*, iButtonProtocolData*);
|
||||
static bool dallas_ds1996_write_copy(OneWireHost*, iButtonProtocolData*);
|
||||
static void dallas_ds1996_emulate(OneWireSlave*, iButtonProtocolData*);
|
||||
static bool dallas_ds1996_load(FlipperFormat*, uint32_t, iButtonProtocolData*);
|
||||
@ -43,13 +46,14 @@ static void dallas_ds1996_apply_edits(iButtonProtocolData*);
|
||||
|
||||
const iButtonProtocolDallasBase ibutton_protocol_ds1996 = {
|
||||
.family_code = DS1996_FAMILY_CODE,
|
||||
.features = iButtonProtocolFeatureExtData | iButtonProtocolFeatureWriteCopy,
|
||||
.features = iButtonProtocolFeatureExtData | iButtonProtocolFeatureWriteId |
|
||||
iButtonProtocolFeatureWriteCopy,
|
||||
.data_size = sizeof(DS1996ProtocolData),
|
||||
.manufacturer = DALLAS_COMMON_MANUFACTURER_NAME,
|
||||
.name = DS1996_FAMILY_NAME,
|
||||
|
||||
.read = dallas_ds1996_read,
|
||||
.write_blank = NULL, /* Data too big for known blanks */
|
||||
.write_id = dallas_ds1996_write_id,
|
||||
.write_copy = dallas_ds1996_write_copy,
|
||||
.emulate = dallas_ds1996_emulate,
|
||||
.save = dallas_ds1996_save,
|
||||
@ -83,6 +87,11 @@ bool dallas_ds1996_read(OneWireHost* host, iButtonProtocolData* protocol_data) {
|
||||
return success;
|
||||
}
|
||||
|
||||
bool dallas_ds1996_write_id(OneWireHost* host, iButtonProtocolData* protocol_data) {
|
||||
DS1996ProtocolData* data = protocol_data;
|
||||
return tm2004_write(host, data->rom_data.bytes, sizeof(DallasCommonRomData));
|
||||
}
|
||||
|
||||
bool dallas_ds1996_write_copy(OneWireHost* host, iButtonProtocolData* protocol_data) {
|
||||
DS1996ProtocolData* data = protocol_data;
|
||||
bool success = false;
|
||||
|
@ -20,7 +20,7 @@ typedef struct {
|
||||
} DallasGenericProtocolData;
|
||||
|
||||
static bool ds_generic_read(OneWireHost*, iButtonProtocolData*);
|
||||
static bool ds_generic_write_blank(OneWireHost*, iButtonProtocolData*);
|
||||
static bool ds_generic_write_id(OneWireHost*, iButtonProtocolData*);
|
||||
static void ds_generic_emulate(OneWireSlave*, iButtonProtocolData*);
|
||||
static bool ds_generic_load(FlipperFormat*, uint32_t, iButtonProtocolData*);
|
||||
static bool ds_generic_save(FlipperFormat*, const iButtonProtocolData*);
|
||||
@ -33,13 +33,13 @@ static void ds_generic_apply_edits(iButtonProtocolData*);
|
||||
|
||||
const iButtonProtocolDallasBase ibutton_protocol_ds_generic = {
|
||||
.family_code = DALLAS_GENERIC_FAMILY_CODE,
|
||||
.features = iButtonProtocolFeatureWriteBlank,
|
||||
.features = iButtonProtocolFeatureWriteId,
|
||||
.data_size = sizeof(DallasGenericProtocolData),
|
||||
.manufacturer = DALLAS_COMMON_MANUFACTURER_NAME,
|
||||
.name = DALLAS_GENERIC_FAMILY_NAME,
|
||||
|
||||
.read = ds_generic_read,
|
||||
.write_blank = ds_generic_write_blank,
|
||||
.write_id = ds_generic_write_id,
|
||||
.write_copy = NULL, /* No data to write a copy */
|
||||
.emulate = ds_generic_emulate,
|
||||
.save = ds_generic_save,
|
||||
@ -58,7 +58,7 @@ bool ds_generic_read(OneWireHost* host, iButtonProtocolData* protocol_data) {
|
||||
return onewire_host_reset(host) && dallas_common_read_rom(host, &data->rom_data);
|
||||
}
|
||||
|
||||
bool ds_generic_write_blank(OneWireHost* host, iButtonProtocolData* protocol_data) {
|
||||
bool ds_generic_write_id(OneWireHost* host, iButtonProtocolData* protocol_data) {
|
||||
DallasGenericProtocolData* data = protocol_data;
|
||||
return tm2004_write(host, data->rom_data.bytes, sizeof(DallasCommonRomData));
|
||||
}
|
||||
|
@ -133,13 +133,13 @@ static bool ibutton_protocol_group_dallas_read(
|
||||
return success;
|
||||
}
|
||||
|
||||
static bool ibutton_protocol_group_dallas_write_blank(
|
||||
static bool ibutton_protocol_group_dallas_write_id(
|
||||
iButtonProtocolGroupDallas* group,
|
||||
iButtonProtocolData* data,
|
||||
iButtonProtocolLocalId id) {
|
||||
furi_assert(id < iButtonProtocolDSMax);
|
||||
const iButtonProtocolDallasBase* protocol = ibutton_protocols_dallas[id];
|
||||
furi_assert(protocol->features & iButtonProtocolFeatureWriteBlank);
|
||||
furi_assert(protocol->features & iButtonProtocolFeatureWriteId);
|
||||
|
||||
OneWireHost* host = group->host;
|
||||
|
||||
@ -148,7 +148,7 @@ static bool ibutton_protocol_group_dallas_write_blank(
|
||||
|
||||
FURI_CRITICAL_ENTER();
|
||||
|
||||
const bool success = protocol->write_blank(host, data);
|
||||
const bool success = protocol->write_id(host, data);
|
||||
onewire_host_stop(host);
|
||||
|
||||
FURI_CRITICAL_EXIT();
|
||||
@ -307,7 +307,7 @@ const iButtonProtocolGroupBase ibutton_protocol_group_dallas = {
|
||||
.get_name = (iButtonProtocolGroupGetStringFunc)ibutton_protocol_group_dallas_get_name,
|
||||
|
||||
.read = (iButtonProtocolGroupReadFunc)ibutton_protocol_group_dallas_read,
|
||||
.write_blank = (iButtonProtocolGroupWriteFunc)ibutton_protocol_group_dallas_write_blank,
|
||||
.write_id = (iButtonProtocolGroupWriteFunc)ibutton_protocol_group_dallas_write_id,
|
||||
.write_copy = (iButtonProtocolGroupWriteFunc)ibutton_protocol_group_dallas_write_copy,
|
||||
|
||||
.emulate_start = (iButtonProtocolGroupApplyFunc)ibutton_protocol_group_dallas_emulate_start,
|
||||
|
@ -284,7 +284,7 @@ const iButtonProtocolGroupBase ibutton_protocol_group_misc = {
|
||||
.get_name = (iButtonProtocolGroupGetStringFunc)ibutton_protocol_group_misc_get_name,
|
||||
|
||||
.read = (iButtonProtocolGroupReadFunc)ibutton_protocol_group_misc_read,
|
||||
.write_blank = NULL,
|
||||
.write_id = NULL,
|
||||
.write_copy = NULL,
|
||||
|
||||
.emulate_start = (iButtonProtocolGroupApplyFunc)ibutton_protocol_group_misc_emulate_start,
|
||||
|
@ -11,7 +11,7 @@ enum {
|
||||
|
||||
typedef enum {
|
||||
iButtonProtocolFeatureExtData = (1U << 0),
|
||||
iButtonProtocolFeatureWriteBlank = (1U << 1),
|
||||
iButtonProtocolFeatureWriteId = (1U << 1),
|
||||
iButtonProtocolFeatureWriteCopy = (1U << 2),
|
||||
} iButtonProtocolFeature;
|
||||
|
||||
|
@ -84,7 +84,7 @@ typedef struct {
|
||||
iButtonProtocolGroupGetStringFunc get_name;
|
||||
|
||||
iButtonProtocolGroupReadFunc read;
|
||||
iButtonProtocolGroupWriteFunc write_blank;
|
||||
iButtonProtocolGroupWriteFunc write_id;
|
||||
iButtonProtocolGroupWriteFunc write_copy;
|
||||
|
||||
iButtonProtocolGroupApplyFunc emulate_start;
|
||||
|
@ -1,5 +1,5 @@
|
||||
entry,status,name,type,params
|
||||
Version,+,69.0,,
|
||||
Version,+,70.0,,
|
||||
Header,+,applications/services/bt/bt_service/bt.h,,
|
||||
Header,+,applications/services/bt/bt_service/bt_keys_storage.h,,
|
||||
Header,+,applications/services/cli/cli.h,,
|
||||
|
|
@ -1,5 +1,5 @@
|
||||
entry,status,name,type,params
|
||||
Version,+,69.0,,
|
||||
Version,+,70.0,,
|
||||
Header,+,applications/drivers/subghz/cc1101_ext/cc1101_ext_interconnect.h,,
|
||||
Header,+,applications/services/bt/bt_service/bt.h,,
|
||||
Header,+,applications/services/bt/bt_service/bt_keys_storage.h,,
|
||||
@ -1950,7 +1950,7 @@ Function,+,ibutton_protocols_render_data,void,"iButtonProtocols*, const iButtonK
|
||||
Function,+,ibutton_protocols_render_error,void,"iButtonProtocols*, const iButtonKey*, FuriString*"
|
||||
Function,+,ibutton_protocols_render_uid,void,"iButtonProtocols*, const iButtonKey*, FuriString*"
|
||||
Function,+,ibutton_protocols_save,_Bool,"iButtonProtocols*, const iButtonKey*, const char*"
|
||||
Function,+,ibutton_protocols_write_blank,_Bool,"iButtonProtocols*, iButtonKey*"
|
||||
Function,+,ibutton_protocols_write_id,_Bool,"iButtonProtocols*, iButtonKey*"
|
||||
Function,+,ibutton_protocols_write_copy,_Bool,"iButtonProtocols*, iButtonKey*"
|
||||
Function,+,ibutton_worker_alloc,iButtonWorker*,iButtonProtocols*
|
||||
Function,+,ibutton_worker_emulate_set_callback,void,"iButtonWorker*, iButtonWorkerEmulateCallback, void*"
|
||||
@ -1961,7 +1961,7 @@ Function,+,ibutton_worker_read_start,void,"iButtonWorker*, iButtonKey*"
|
||||
Function,+,ibutton_worker_start_thread,void,iButtonWorker*
|
||||
Function,+,ibutton_worker_stop,void,iButtonWorker*
|
||||
Function,+,ibutton_worker_stop_thread,void,iButtonWorker*
|
||||
Function,+,ibutton_worker_write_blank_start,void,"iButtonWorker*, iButtonKey*"
|
||||
Function,+,ibutton_worker_write_id_start,void,"iButtonWorker*, iButtonKey*"
|
||||
Function,+,ibutton_worker_write_copy_start,void,"iButtonWorker*, iButtonKey*"
|
||||
Function,+,ibutton_worker_write_set_callback,void,"iButtonWorker*, iButtonWorkerWriteCallback, void*"
|
||||
Function,+,icon_animation_alloc,IconAnimation*,const Icon*
|
||||
|
|
Loading…
Reference in New Issue
Block a user