|
@@ -27,11 +27,31 @@ void bitbang_raw(bool value, MagSetting* setting)
|
|
|
furi_hal_gpio_write(GPIO_PIN_A, value);
|
|
furi_hal_gpio_write(GPIO_PIN_A, value);
|
|
|
furi_hal_gpio_write(GPIO_PIN_B, !value);
|
|
furi_hal_gpio_write(GPIO_PIN_B, !value);
|
|
|
break;
|
|
break;
|
|
|
|
|
+ case MagTxCC1101_434:
|
|
|
|
|
+ case MagTxCC1101_868:
|
|
|
|
|
+ furi_hal_gpio_write(&gpio_cc1101_g0, true);
|
|
|
|
|
+ furi_delay_us(64);
|
|
|
|
|
+ furi_hal_gpio_write(&gpio_cc1101_g0, false);
|
|
|
|
|
+ break;
|
|
|
default:
|
|
default:
|
|
|
break;
|
|
break;
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+void play_bit_rf(bool bit, MagSetting* setting) {
|
|
|
|
|
+
|
|
|
|
|
+ bit_dir ^= 1;
|
|
|
|
|
+ furi_hal_gpio_write(&gpio_cc1101_g0, bit_dir);
|
|
|
|
|
+ furi_delay_us(setting->us_clock);
|
|
|
|
|
+
|
|
|
|
|
+ if(bit) {
|
|
|
|
|
+ bit_dir ^= 1;
|
|
|
|
|
+ furi_hal_gpio_write(&gpio_cc1101_g0, bit_dir);
|
|
|
|
|
+ }
|
|
|
|
|
+ furi_delay_us(setting->us_clock);
|
|
|
|
|
+ furi_delay_us(setting->us_interpacket);
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
void play_bit_rfid(uint8_t send_bit, MagSetting* setting) {
|
|
void play_bit_rfid(uint8_t send_bit, MagSetting* setting) {
|
|
|
// internal TX over RFID coil
|
|
// internal TX over RFID coil
|
|
|
bit_dir ^= 1;
|
|
bit_dir ^= 1;
|
|
@@ -73,6 +93,10 @@ bool play_bit(uint8_t send_bit, MagSetting* setting) {
|
|
|
case MagTxStateGPIOA6A7:
|
|
case MagTxStateGPIOA6A7:
|
|
|
play_bit_gpio(send_bit, setting);
|
|
play_bit_gpio(send_bit, setting);
|
|
|
break;
|
|
break;
|
|
|
|
|
+ case MagTxCC1101_434:
|
|
|
|
|
+ case MagTxCC1101_868:
|
|
|
|
|
+ play_bit_rf(send_bit & 0x01, setting);
|
|
|
|
|
+ break;
|
|
|
default:
|
|
default:
|
|
|
return false;
|
|
return false;
|
|
|
}
|
|
}
|
|
@@ -135,6 +159,28 @@ void tx_reset_gpio() {
|
|
|
furi_hal_power_disable_otg();
|
|
furi_hal_power_disable_otg();
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+void tx_init_rf(int hz)
|
|
|
|
|
+{
|
|
|
|
|
+ // presets and frequency will need some experimenting
|
|
|
|
|
+ furi_hal_subghz_reset();
|
|
|
|
|
+ furi_hal_subghz_load_preset(FuriHalSubGhzPresetOok650Async);
|
|
|
|
|
+ // furi_hal_subghz_load_preset(FuriHalSubGhzPresetGFSK9_99KbAsync);
|
|
|
|
|
+ // furi_hal_subghz_load_preset(FuriHalSubGhzPresetMSK99_97KbAsync);
|
|
|
|
|
+ // furi_hal_subghz_load_preset(FuriHalSubGhzPreset2FSKDev238Async);
|
|
|
|
|
+ // furi_hal_subghz_load_preset(FuriHalSubGhzPreset2FSKDev476Async);
|
|
|
|
|
+ furi_hal_gpio_init(&gpio_cc1101_g0, GpioModeOutputPushPull, GpioPullNo, GpioSpeedLow);
|
|
|
|
|
+ furi_hal_subghz_set_frequency_and_path(hz);
|
|
|
|
|
+ furi_hal_subghz_tx();
|
|
|
|
|
+ furi_hal_gpio_write(&gpio_cc1101_g0, false);
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+void tx_deinit_rf()
|
|
|
|
|
+{
|
|
|
|
|
+ furi_hal_gpio_write(&gpio_cc1101_g0, false);
|
|
|
|
|
+ furi_hal_subghz_reset();
|
|
|
|
|
+ furi_hal_subghz_idle();
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
bool tx_init(MagSetting* setting) {
|
|
bool tx_init(MagSetting* setting) {
|
|
|
// Initialize configured TX method
|
|
// Initialize configured TX method
|
|
|
switch(setting->tx) {
|
|
switch(setting->tx) {
|
|
@@ -144,6 +190,12 @@ bool tx_init(MagSetting* setting) {
|
|
|
case MagTxStateGPIOA6A7:
|
|
case MagTxStateGPIOA6A7:
|
|
|
tx_init_gpio();
|
|
tx_init_gpio();
|
|
|
break;
|
|
break;
|
|
|
|
|
+ case MagTxCC1101_434:
|
|
|
|
|
+ tx_init_rf(434000000);
|
|
|
|
|
+ break;
|
|
|
|
|
+ case MagTxCC1101_868:
|
|
|
|
|
+ tx_init_rf(868000000);
|
|
|
|
|
+ break;
|
|
|
default:
|
|
default:
|
|
|
return false;
|
|
return false;
|
|
|
}
|
|
}
|
|
@@ -160,6 +212,10 @@ bool tx_reset(MagSetting* setting) {
|
|
|
case MagTxStateGPIOA6A7:
|
|
case MagTxStateGPIOA6A7:
|
|
|
tx_reset_gpio();
|
|
tx_reset_gpio();
|
|
|
break;
|
|
break;
|
|
|
|
|
+ case MagTxCC1101_434:
|
|
|
|
|
+ case MagTxCC1101_868:
|
|
|
|
|
+ tx_deinit_rf();
|
|
|
|
|
+ break;
|
|
|
default:
|
|
default:
|
|
|
return false;
|
|
return false;
|
|
|
}
|
|
}
|