[FL-3057] Allow use of any suitable pin for 1-Wire devices (#2350)
* Add 1-wire thermometer example app stub * Working 1-wire thermometer app * Refactor app to use threads * Clean up code, add comments * Add CRC checking * Increase update period * Fix error in fbt * Revert the old update period * Use settable pin in onewire_host * Use settable pin for onewire_slave * Clear EXTI flag after callback, make private methods static in onewire_slave * Do not hardcode GPIO pin number * Remove iButton hal from furi_hal_rfid * Remove most of furi_hal_ibutton * Add some of furi_hal_ibutton back * Slightly neater code * Fix formatting * Fix PVS-studio warnings * Update CODEOWNERS * Add furi_hal_gpio_get_ext_pin_number * Create README.md * FuriHal: move furi_hal_gpio_get_ext_pin_number to resources --------- Co-authored-by: Aleksandr Kutuzov <alleteam@gmail.com>
This commit is contained in:
@@ -25,8 +25,8 @@ iButtonWorker* ibutton_worker_alloc() {
|
||||
iButtonWorker* worker = malloc(sizeof(iButtonWorker));
|
||||
worker->key_p = NULL;
|
||||
worker->key_data = malloc(ibutton_key_get_max_size());
|
||||
worker->host = onewire_host_alloc();
|
||||
worker->slave = onewire_slave_alloc();
|
||||
worker->host = onewire_host_alloc(&ibutton_gpio);
|
||||
worker->slave = onewire_slave_alloc(&ibutton_gpio);
|
||||
worker->writer = ibutton_writer_alloc(worker->host);
|
||||
worker->device = onewire_device_alloc(0, 0, 0, 0, 0, 0, 0, 0);
|
||||
worker->messages = furi_message_queue_alloc(1, sizeof(iButtonMessage));
|
||||
|
@@ -234,16 +234,13 @@ void ibutton_worker_emulate_timer_cb(void* context) {
|
||||
furi_assert(context);
|
||||
iButtonWorker* worker = context;
|
||||
|
||||
LevelDuration level =
|
||||
const LevelDuration level_duration =
|
||||
protocol_dict_encoder_yield(worker->protocols, worker->protocol_to_encode);
|
||||
|
||||
furi_hal_ibutton_emulate_set_next(level_duration_get_duration(level));
|
||||
const bool level = level_duration_get_level(level_duration);
|
||||
|
||||
if(level_duration_get_level(level)) {
|
||||
furi_hal_ibutton_pin_high();
|
||||
} else {
|
||||
furi_hal_ibutton_pin_low();
|
||||
}
|
||||
furi_hal_ibutton_emulate_set_next(level);
|
||||
furi_hal_ibutton_pin_write(level);
|
||||
}
|
||||
|
||||
void ibutton_worker_emulate_timer_start(iButtonWorker* worker) {
|
||||
@@ -266,7 +263,7 @@ void ibutton_worker_emulate_timer_start(iButtonWorker* worker) {
|
||||
protocol_dict_set_data(worker->protocols, worker->protocol_to_encode, key_id, key_size);
|
||||
protocol_dict_encoder_start(worker->protocols, worker->protocol_to_encode);
|
||||
|
||||
furi_hal_ibutton_start_drive();
|
||||
furi_hal_ibutton_pin_configure();
|
||||
furi_hal_ibutton_emulate_start(0, ibutton_worker_emulate_timer_cb, worker);
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user