From ef0feae62b87e237e519190f564d172953abddaa Mon Sep 17 00:00:00 2001 From: furrtek Date: Thu, 1 Dec 2016 06:58:47 +0100 Subject: [PATCH] Started work on ADS-B TX baseband processor --- firmware/application/baseband_api.cpp | 8 ++ firmware/application/baseband_api.hpp | 2 + firmware/application/ui_adsbtx.cpp | 140 ++++++++++++++++++++------ firmware/application/ui_adsbtx.hpp | 14 ++- firmware/application/ui_jammer.cpp | 39 ++++--- firmware/application/ui_jammer.hpp | 28 +++--- firmware/baseband/CMakeLists.txt | 15 ++- firmware/baseband/baseband_ads.img | Bin 0 -> 9060 bytes firmware/baseband/proc_adsbtx.cpp | 103 +++++++++++++++++++ firmware/baseband/proc_adsbtx.hpp | 52 ++++++++++ firmware/baseband/proc_jammer.cpp | 67 ++++++++++-- firmware/baseband/proc_jammer.hpp | 7 ++ firmware/common/message.hpp | 19 +++- firmware/common/spi_image.hpp | 1 + firmware/portapack-h1-havoc.bin | Bin 790828 -> 791196 bytes 15 files changed, 413 insertions(+), 82 deletions(-) create mode 100644 firmware/baseband/baseband_ads.img create mode 100644 firmware/baseband/proc_adsbtx.cpp create mode 100644 firmware/baseband/proc_adsbtx.hpp diff --git a/firmware/application/baseband_api.cpp b/firmware/application/baseband_api.cpp index 0028fac00..0719f239e 100644 --- a/firmware/application/baseband_api.cpp +++ b/firmware/application/baseband_api.cpp @@ -1,5 +1,6 @@ /* * Copyright (C) 2016 Jared Boone, ShareBrained Technology, Inc. + * Copyright (C) 2016 Furrtek * * This file is part of PortaPack. * @@ -143,6 +144,13 @@ void set_pocsag() { send_message(&message); } +void set_adsb() { + const ADSBConfigureMessage message { + 1 + }; + send_message(&message); +} + void set_dtmf_data(const uint32_t bw, const uint32_t tone_length, const uint32_t pause_length) { const DTMFTXConfigMessage message { bw, diff --git a/firmware/application/baseband_api.hpp b/firmware/application/baseband_api.hpp index 7a7620b93..59a3fdb7c 100644 --- a/firmware/application/baseband_api.hpp +++ b/firmware/application/baseband_api.hpp @@ -1,5 +1,6 @@ /* * Copyright (C) 2016 Jared Boone, ShareBrained Technology, Inc. + * Copyright (C) 2016 Furrtek * * This file is part of PortaPack. * @@ -61,6 +62,7 @@ void set_afsk_data(const uint32_t afsk_samples_per_bit, const uint32_t afsk_phas void set_ook_data(const uint32_t stream_length, const uint32_t samples_per_bit, const uint8_t repeat, const uint32_t pause_symbols); void set_pocsag(); +void set_adsb(); void set_dtmf_data(const uint32_t bw, const uint32_t tone_length, const uint32_t pause_length); void run_image(const portapack::spi_flash::image_tag_t image_tag); diff --git a/firmware/application/ui_adsbtx.cpp b/firmware/application/ui_adsbtx.cpp index 1651219b0..deb93ac36 100644 --- a/firmware/application/ui_adsbtx.cpp +++ b/firmware/application/ui_adsbtx.cpp @@ -48,13 +48,92 @@ void ADSBTxView::paint(Painter& painter) { button_callsign.set_text(callsign); } -void ADSBTxView::generate_frame() { +void ADSBTxView::generate_frame_pos() { + uint8_t b, c, s, time_parity, bitn; + char ch; + std::string str_debug; + uint16_t altitude_coded = (38000 + 1000) / 25; + uint32_t LAT, LON; + float delta_lat, yz, rlat, delta_lon, xz; + uint8_t adsb_crc[14]; // Temp buffer + uint32_t crc_poly = 0x1205FFF; + + LAT = 0; + + adsb_frame[0] = (options_format.selected_index_value() << 3) | 5; // DF and CA + adsb_frame[1] = 0x48; // ICAO24 + adsb_frame[2] = 0x40; + adsb_frame[3] = 0xD6; + adsb_frame[4] = 0x58; // TC, SS and NICsb + + // altitude = (feet + 1000) / 25 + + // LAT: + // index j = floor(59*latcprE-60*latcprO+0.50) + // latE = DlatE*(mod(j,60)+latcprE) + // latO = DlatO*(mod(j,59)+latcprO) + // if latE >= 270 -> latE -= 360 + // if latO >= 270 -> latO -= 360 + //time_parity = 0; // 0~1 + //delta_lat = 90.0 / (60.0 - (time_parity / 4.0)); + //yz = 524288.0 * (mod(lat, delta_lat) / delta_lat); // Round to int ! + //rlat = delta_lat * ((yz / 524288.0) + int(lat / delta_lat)); + //delta_lon = 360.0 / (NL(rlat) - time_parity); + //xz = 524288.0 * (mod(lon, delta_lon) / delta_lon); // Round to int ! + /*if (time_parity) { + A = sign(rlat0)[NL(rlat0) - NL(rlat1)]; + }*/ + // int xz and yz, then: + // xz >>= 2; + // yz >>= 2; + // To get 17 bits + + // aaaaaaa Q bbbb + adsb_frame[5] = ((altitude_coded & 0x7F0) >> 3) | 1; + adsb_frame[6] = ((altitude_coded & 0x00F) << 4) | (LAT >> 15); // Then 0, even/odd, and the 2 LAT-CPR MSBs + + adsb_frame[11] = 0x00; // Clear CRC + adsb_frame[12] = 0x00; + adsb_frame[13] = 0x00; + + // Compute CRC + memcpy(adsb_crc, adsb_frame, 14); + for (c = 0; c < 11; c++) { + for (b = 0; b < 8; b++) { + if ((adsb_crc[c] << b) & 0x80) { + for (s = 0; s < 25; s++) { + bitn = (c * 8) + b + s; + if ((crc_poly >> s) & 1) adsb_crc[bitn >> 3] ^= (0x80 >> (bitn & 7)); + } + } + } + } + // Insert CRC in frame + for (c = 0; c < 3; c++) + adsb_frame[c + 11] = adsb_crc[c + 11]; + + // Convert to binary + for (c = 0; c < 112; c++) + adsb_bin[c] = (adsb_frame[c >> 3] >> (7 - (c & 7))) & 1; + + // Display for debug + str_debug = ""; + for (c = 0; c < 7; c++) + str_debug += to_string_hex(adsb_frame[c], 2); + text_frame_a.set(str_debug); + str_debug = ""; + for (c = 0; c < 7; c++) + str_debug += to_string_hex(adsb_frame[c + 7], 2); + text_frame_b.set(str_debug); +} + +void ADSBTxView::generate_frame_id() { uint8_t b, c, s, bitn; char ch; + std::string str_debug; std::string callsign_formatted(8, '_'); uint64_t callsign_coded = 0; uint8_t adsb_crc[14]; // Temp buffer - // 1 00100000 01011111 11111111 uint32_t crc_poly = 0x1205FFF; // Init frame @@ -91,7 +170,7 @@ void ADSBTxView::generate_frame() { adsb_frame[c + 5] = (callsign_coded >> ((5 - c) * 8)) & 0xFF; // Compute CRC - memcpy(adsb_crc, adsb_frames, 14); + memcpy(adsb_crc, adsb_frame, 14); for (c = 0; c < 11; c++) { for (b = 0; b < 8; b++) { if ((adsb_crc[c] << b) & 0x80) { @@ -106,18 +185,28 @@ void ADSBTxView::generate_frame() { for (c = 0; c < 3; c++) adsb_frame[c + 11] = adsb_crc[c + 11]; - // Display as text - text_message.set(to_string_hex((adsb_frame[11] << 16) + (adsb_frame[12] << 8) + adsb_frame[13], 6)); - //text_message.set(callsign_formatted); + // Convert to binary + for (c = 0; c < 112; c++) + adsb_bin[c] = (adsb_frame[c >> 3] >> (7 - (c & 7))) & 1; - //ascii_to_ccir(ccir_message); + // Display for debug + str_debug = ""; + for (c = 0; c < 7; c++) + str_debug += to_string_hex(adsb_frame[c], 2); + text_frame_a.set(str_debug); + str_debug = ""; + for (c = 0; c < 7; c++) + str_debug += to_string_hex(adsb_frame[c + 7], 2); + text_frame_b.set(str_debug); + + text_message.set(callsign_formatted); } void ADSBTxView::start_tx() { - transmitter_model.set_tuning_frequency(450000000); // FOR TESTING - DEBUG + transmitter_model.set_tuning_frequency(452000000); // FOR TESTING - DEBUG transmitter_model.set_baseband_configuration({ .mode = 0, - .sampling_rate = 1536000U, // CHANGE ! + .sampling_rate = 2000000U, // Good ? .decimation_factor = 1, }); transmitter_model.set_rf_amp(true); @@ -126,23 +215,8 @@ void ADSBTxView::start_tx() { transmitter_model.set_baseband_bandwidth(1750000); transmitter_model.enable(); - //memcpy(shared_memory.tx_data, adsb_frame, 112); - //baseband::set_adsb_data(1); -} - - // ASCII to frequency LUT index -void ADSBTxView::ascii_to_ccir(char *ascii) { - uint8_t c; - - for (c = 0; c < 20; c++) { - if (ascii[c] > '9') - ascii[c] -= 0x37; - else - ascii[c] -= 0x30; - } - - // EOM code for baseband - ascii[20] = 0xFF; + memcpy(shared_memory.tx_data, adsb_bin, 112); + baseband::set_adsb(); } void ADSBTxView::on_txdone(const int n) { @@ -163,7 +237,9 @@ void ADSBTxView::on_txdone(const int n) { ADSBTxView::ADSBTxView(NavigationView& nav) { (void)nav; - baseband::run_image(portapack::spi_flash::image_tag_xylos); + baseband::run_image(portapack::spi_flash::image_tag_adsb_tx); + + // http://openflights.org add_children({ { &text_format, @@ -172,6 +248,8 @@ ADSBTxView::ADSBTxView(NavigationView& nav) { &button_icao, &text_callsign, &button_callsign, + &text_frame_a, + &text_frame_b, &progress, &text_message, &button_transmit @@ -184,7 +262,7 @@ ADSBTxView::ADSBTxView(NavigationView& nav) { options_format.on_change = [this](size_t i, int32_t v) { (void)i; (void)v; - generate_frame(); + generate_frame_id(); }; button_callsign.on_select = [this, &nav](Button&) { textentry(nav, callsign, 9); @@ -192,15 +270,15 @@ ADSBTxView::ADSBTxView(NavigationView& nav) { button_transmit.set_style(&style_val); - generate_frame(); + generate_frame_id(); // Single transmit - button_transmit.on_select = [this,&nav](Button&) { + button_transmit.on_select = [this, &nav](Button&) { if (tx_mode == IDLE) { tx_mode = SINGLE; button_transmit.set_style(&style_cancel); button_transmit.set_text("Wait"); - generate_frame(); + generate_frame_id(); start_tx(); } }; diff --git a/firmware/application/ui_adsbtx.hpp b/firmware/application/ui_adsbtx.hpp index ad18fff69..3e2631258 100644 --- a/firmware/application/ui_adsbtx.hpp +++ b/firmware/application/ui_adsbtx.hpp @@ -55,12 +55,13 @@ private: char callsign[9] = "KLM1023 "; uint8_t adsb_frame[14]; // 112 bit data block as 14 bytes + uint8_t adsb_bin[112]; // 112 bit data block const char icao_id_lut[65] = "#ABCDEFGHIJKLMNOPQRSTUVWXYZ##### ###############0123456789######"; - void ascii_to_ccir(char *ascii); void start_tx(); - void generate_frame(); + void generate_frame_id(); + void generate_frame_pos(); void on_txdone(const int n); const Style style_val { @@ -111,6 +112,15 @@ private: "" // "KOR151 " }; + Text text_frame_a { + { 4 * 8, 10 * 16, 14 * 8, 16 }, + "-" + }; + Text text_frame_b { + { 4 * 8, 11 * 16, 14 * 8, 16 }, + "-" + }; + ProgressBar progress { { 5 * 8, 13 * 16, 20 * 8, 16 }, }; diff --git a/firmware/application/ui_jammer.cpp b/firmware/application/ui_jammer.cpp index 2f86a4366..066953a1c 100644 --- a/firmware/application/ui_jammer.cpp +++ b/firmware/application/ui_jammer.cpp @@ -1,5 +1,6 @@ /* * Copyright (C) 2015 Jared Boone, ShareBrained Technology, Inc. + * Copyright (C) 2016 Furrtek * * This file is part of PortaPack. * @@ -22,17 +23,11 @@ #include "ui_jammer.hpp" #include "ui_receiver.hpp" -#include "ch.h" -#include "evtimer.h" +//#include "ch.h" +//#include "evtimer.h" #include "baseband_api.hpp" -#include "ff.h" -#include "hackrf_gpio.hpp" -#include "portapack.hpp" -#include "radio.hpp" #include "string_format.hpp" -#include "event_m0.hpp" -#include "hackrf_hal.hpp" #include "portapack_shared_memory.hpp" #include "portapack_persistent_memory.hpp" @@ -48,7 +43,7 @@ void JammerView::focus() { } JammerView::~JammerView() { - radio::disable(); + transmitter_model.disable(); baseband::shutdown(); } @@ -321,24 +316,26 @@ JammerView::JammerView(NavigationView& nav) { jamming = true; button_transmit.set_style(&style_cancel); button_transmit.set_text("STOP"); - radio::disable(); + + /*baseband::set_jammer_data( + + );*/ + + //transmitter_model.set_tuning_frequency(433920000); // TODO + transmitter_model.set_baseband_configuration({ + .mode = 0, + .sampling_rate = 1536000U, + .decimation_factor = 1, + }); + transmitter_model.set_rf_amp(true); + transmitter_model.set_baseband_bandwidth(1750000); + transmitter_model.enable(); } }; button_exit.on_select = [&nav](Button&){ nav.pop(); }; - - radio::enable({ - shared_memory.jammer_ranges[0].center, - 1536000, // ? - 2500000, // ? - rf::Direction::Transmit, - true, - static_cast(receiver_model.lna()), - static_cast(receiver_model.vga()), - 1, - }); } } /* namespace ui */ diff --git a/firmware/application/ui_jammer.hpp b/firmware/application/ui_jammer.hpp index 479824405..6e14a2046 100644 --- a/firmware/application/ui_jammer.hpp +++ b/firmware/application/ui_jammer.hpp @@ -1,5 +1,6 @@ /* * Copyright (C) 2015 Jared Boone, ShareBrained Technology, Inc. + * Copyright (C) 2016 Furrtek * * This file is part of PortaPack. * @@ -21,15 +22,10 @@ #include "ui.hpp" #include "ui_widget.hpp" -#include "ui_painter.hpp" -#include "ui_menu.hpp" -#include "ui_navigation.hpp" #include "ui_font_fixed_8x16.hpp" -#include "clock_manager.hpp" +#include "ui_navigation.hpp" #include "message.hpp" -#include "rf_path.hpp" -#include "max2837.hpp" -#include "volume.hpp" +#include "transmitter_model.hpp" namespace ui { @@ -66,7 +62,7 @@ private: rf::Frequency max; } rangepreset; - const rangepreset range_presets[9][3] = { + const rangepreset range_presets[10][3] = { // Orange {{ true, 935000000, 945000000 }, // GSM 900 { true, 1808000000, 1832000000 }, // GSM 1800 @@ -93,14 +89,14 @@ private: { false, 0, 0 }}, // UMTS // TODO: TDD UMTS, voir doc Arcep - // TODO: Wi-FI, BT: 2 400 et 2 483,5 MHz + // TODO: Wifi, BT: 2 400 et 2 483,5 MHz // DECT {{ true, 1880000000, 1900000000 }, // BW: 20MHz { false, 0, 0 }, { false, 0, 0 }}, - // Optifib, lol + // PMV AFSK {{ true, 162930000, 162970000 }, // BW: 40kHz { false, 0, 0 }, { false, 0, 0 }}, @@ -110,6 +106,11 @@ private: { false, 0, 0 }, { false, 0, 0 }}, + // Sigfox + {{ true, 868150000, 868250000 }, // BW: 40kHz (50kHz) + { false, 0, 0 }, + { false, 0, 0 }}, + // GPS L1 & L2 {{ true, 1575420000 - 50000, 1575420000 + 50000}, // BW: 100kHz { true, 1227600000 - 50000, 1227600000 + 50000 }, // BW: 100kHz @@ -177,7 +178,7 @@ private: }; OptionsField options_preset { { 10 * 8, 3 * 16 }, - 9, + 8, { { "Orange ", 0 }, { "SFR ", 1 }, @@ -187,7 +188,8 @@ private: { "DECT ", 5 }, { "Optifib ", 6 }, { "ISM 433 ", 7 }, - { "GPS ", 8 }, + { "Sigfox ", 8 }, + { "GPS ", 9 } } }; @@ -262,7 +264,7 @@ private: const auto message = static_cast(p); this->on_retune(message->freq); } -}; + }; }; } /* namespace ui */ diff --git a/firmware/baseband/CMakeLists.txt b/firmware/baseband/CMakeLists.txt index 4b7dc0884..c04e1a5e5 100644 --- a/firmware/baseband/CMakeLists.txt +++ b/firmware/baseband/CMakeLists.txt @@ -342,10 +342,10 @@ DeclareTargets(POOK ook) ### Jammer -#set(MODE_CPPSRC -# proc_jammer.cpp -#) -#DeclareTargets(PJAM jammer) +set(MODE_CPPSRC + proc_jammer.cpp +) +DeclareTargets(PJAM jammer) ### Audio transmit @@ -389,6 +389,13 @@ set(MODE_CPPSRC ) DeclareTargets(PRDS rds) +### ADS-B TX + +set(MODE_CPPSRC + proc_adsbtx.cpp +) +DeclareTargets(PADS ads) + ### HackRF "factory" firmware add_custom_command( diff --git a/firmware/baseband/baseband_ads.img b/firmware/baseband/baseband_ads.img new file mode 100644 index 0000000000000000000000000000000000000000..0152fd763644dd87122dfd73465b78f2fc881324 GIT binary patch literal 9060 zcmdTpYjjgpy8GmuB&QEb`T#>)Fpm}rDHtf@Aj}%mq@K1(ODm-ch~qg)iYK%{=)(aW zG!z5`@5n>3ycF!9pv;wwlqE_nP_8qxu6Il+&VZ;>L=6Kvb0V!dEltn;c5+e*v*xkx zzq{Ak*=O(lz4y1jy}zBx!lJ6hMuZTBGzUn84p6Zg8jlb$0ijf=@v(UOpz`*y(=yJs z41@~D-aZ${`G46G2>GGnVs0zaZ9GZ{Nkc^jia~lp*f6AH#yBjZW)5LAFla}5>3kz0 zTpv^&M#c<7p_p85|K2i&I+VNqOV^e4>%}~?(M<^N^phZ9g%)Ug0;?pqH(BMRYA*fUvgam!ewK|WdoeFN^JJm^D#uZ|Jmhf8Kfoezf-0?gz+{IJ~M9TP{v(GE9Q_0DFI~K3VPY%(^Hiilj)bxu!G0%6F@rk)+ zpO|whnWwH>X-Z5xwMit*4xX5?!v1tlMG1>XK!pQ>%6hCq|-^c#`Y(l8rx5s1Hru_0<1jq+4X?igG^s_?PdNenC}?R zEBk!&RSY%rcg6xY6#~_SCx@=^PW}L&Ui3(2f~oL(icnra!ZSn2SkTaZRoJ+nuU$aQ zR#++oI)xM!J*_;;dloFpwoOQfF_b`vO{G3sR zenPi&{PucELLs9qn#~Zx=7^o4ud4}wK!mU^(sARl7h3tmf>ss@MX=_Ca9E717SP^I_2qnqR~t?z^cea(?&TcCh9H1R^<(cpN4 ztCS8c%u!GmKpevD^Z7`V4f`$wDsFKlN|5mD_fUuTZfp%G!iW7xSbq}An@H!| z#Io$x5U*$kODEV<`83aS{C0ku_4y8!U2V6CmHBi#=0LY2(8Ub8oF9WUeu#f3p^hvn zdlhelJyFGC9(=(%pcs?ITa5AOwgg9l9qD(mYTc)-PLG8D6fOEh9TMIYeflI_`&HV4 zgkQaj`5t3-+=F&n$PjDWW+D4H zTkbWL0tt5`B3C(pgjCyE5v6yEKEiuai{qPItO@30x)}hcOfCb;B%wbXrBNgrG?>aM z)D62530frS37})RhES)7Nb^acaT)bs9L$sKTV_K7i8RMfq1_%SXT4>u#c+*6w5^4E zRHPhH+W=20RJkyiU@9+=> zJGkro5i1!Y$m^^&@CHxZ{|5WU2_ydvA7me8O%RPbLinHeyv6Ur{7I;%p!(u_>mR_k-2uOK1iTt3YueOh zNg$!ouX3oO9QF`Sygji2JD9dwjy z-hh!O3XBko@v7gc@4G!xIiIc*NNg*biX&5#^{5r0K};2%E+3Vn4+@u_NwF zcwXU%&FzL6>}PPkF;e)5WL&e(pJGZ0Aj1Kkb{Lwn_}%&L#6LZG@{4WL z<|>)dz;UTG)AKj3m4B1pZN2BB6t;s7bKXfYnxzK7&ZV6{hCMH4a};Ehdr z9Lb;_c@-`g>K5{&=NiGD9B7fu8r(B@tGl&s3Fr}%eNPsaoxF(c*f(^`j^UHH+fisk z1{BJnDg;FeF$slqDikVHu4UJ{d}2n=#wL|h$*p%5Ijv1rm%`P|Dcn|fvs-A#w#Nm| z7c0e#V#YF(zRa)-?w)08LikK{jeFIqJeQeOHoICs3vNN(Vr<_@;Xg#A@Gpki`i?w9 zbU!m~+Qo4o;je}cg1rqzs+O^iFIkj(Mzn0Lbf+&-=&4W+NriL@Lf7haIrUBZn5|wR|jh*G@pRmZJ_I;phkz#bX9Es zQqg%S{9MGf#wJjtt4Rv)iQL-rQN`pRFT@L#48JmxIpan&J<*iOD)=fE;z#6@psV&edxWiVd0{pY zjbjPk!G7o|U=+Y9#^)7lKk%`#B)fpsuqT869^6roa~;3Ky05!6NP#rA$hII}Z@2-X znNT&d{`kCz``d$%2}t25Bq{73jClp;*Xz~^fy1>9e}qkoiwHW0o<4yx5*fJKQBo)TIVNtuP8|Qo$xg&#)bkTOc2y z`4(WVLdCMW=Oe{@w(0nF;Wjw}D%Y-%S$kHaUkp1UK;a6pTI7hpa7N!@w zW05$6HSC7-QwneRKmdM3DxSsX&xE-sPurnl)YDY}r5DsnRfwiwKT2ee4c0OBBJ2?G zda+9i(^3JS^o}w_qn6^Ueii!wivU)~i0v?@*kPs5K|}$`ibT3r3Wp#|728(`YN9l2 zqc*9C;MZ0@#ZCgO?}8}jN)XE-wy7DEH#hLGNY`Qha2^lQ_s(SA2+>N&-!8a#y1-bp z&zjVI%$gE7VomPOf!nA!JbvR`7OdM>H;-9`E+e1i-)AMdvzg1mVv+tyE_>HsR7eq` zNmJ1lD;>bJdbH14HG$Y^c;EvEpIJoDC>E*w1RgN5;}C!CN-tUu`z;3dA0Oa*!f$RK z0pDN^a8HIBFEM|MN2pT+Qh52zGXDd9Bb;_1Ftp)2fK+)WUuo!!Pjt|H9|{}MpnSN2U1#ae%oE{)I{mxd`^RU;(10~AG%En zx4{noZ^$erLuOG7_1A-Hhq{!ucZ%7m>9v?Qar2Cbs@K&U;#U zcqLI0vkxuIv{3rB^IPHl<;`yW0XX`HOmbSaNTcUFQkWOA zW-!EIZ4nZJgT!02nO)=X3=(<U%>t`*it+I`r}xIWj;+H6t@MI^Va!G!<$NFztLl26~L!7%pBQK9_cj^mM9ZVP--q*s}xPE&ygez+!lXoh-%C#|7i3 z;Y~XPH83K65R-+rJjdkHi2;c5s)+)rB11Z`mzm17FJMuh?`NnFJ)A3$${ctHc?Cu+ zl@MQ4op3we$35m;;M(ha#Wju{$BlE2bA8Hw%6;nm)FrgvNiEH;{ioD4K<#d)HcD+F zyO3MxTsVRn>cIM-RE-5uC7Yo>8`q!6quVk%Dtare6}=@^RVls^Mut>T%i%~9vs?^6 zs`nlCBX6^D%m?DMaf|PFDL`}25X#eB8s$)!@v94Y9ce0hk<$jJ6*697jhqv1f6>>_ zXwS&HnLmhY0n+o|WUPFkjhVno~ug?i9 zW2oqDu}*SKD(e)rhSZQWUE4wEks(1x<(8sMXQ6O5Ws!5TZJ)D3xSagC)ABv}{rLB5*f)8Mk(~uO<9@KGIKqG7ys&LKigWhOL!dp}(O>C@*18t{ z+kjWJ0gj(hQ3A7DhB)2~>-f0D0>!U}rrA0EoR~4g*z0qhfp(7Pku}6*60)Ib0aB2Z z@1MBJSO8BNLM_U}tiP2fUip$&Zlzz+G6^rKcB;3h`?I2wW6Vd?S3k*ulh@XZZ0W2N zK0h=T{3>IH4XBqem_8B~^(W!Tx(=wTkSW*|qaT*(ALNPMS1|pZc}&7i)pqrcF@Do9 z{Y60k57GPTUc3*$Zb+ACiP?)Tr@>wnlLvZf`tff$*h|OYmo;5Kj;kYWW^P*t)=DT> zwY%?a9`%kx6sW%9Oq7&L~(JOy@^|8J8ujcXFoZ3#8QgDZa ze0PuvB_p^am$qNkSfsFUQUh=A2eJ_2pq_@h7V5|{**>LYio;YYv?=6xrwHlPlLS(| z6Yiou)mZLjP7yMzAoBfO!{T^|`c8T8azZ?dLTOw(;ai8`p9dAZ#iE_ASJ{Ou5%Q^t zKHt+2H&sO6sg)V!8D)=gE!;v^dPzoUrSZ|%hz9Bi*J{Q+X)0R?}617Iz4=)-Z z{~j#=ex3naC9zZruNq8<+S@w9-m!15Uek_kh529}@pFY>5S-2#@5SlE{cQLfkI{}r z9;-kr7IBM~T6=vn7CCW?qd z*3pP|jkaJGM9ENC`2p%MgD&xY1nl>d5&b^sm&kohn{7g3(Kag;NEHbODH0W85Z*b5 zi=v2Rc0h&=Gg$*c&_ymB3BClii-7-zp&c#?C7nDvZHzW+f<9-`l&R)|d+(d`(?T0l z>X=(uRsHay#Xn=6?j^jZcG+_8%7(_KCswUq{p3@>ShMEor=NZ%R^V&RnqNHiFXm%q4l;gfS8fAsqg&z}C^xPs&Fj`byJ5q|=QeM7{+BOo+y3Itmv`;i_v(SxgNNQc z^0xoj@e?OMIDPiR-+%P+xlb-!`r`6e!E4_MH^Kvv>g7DQ++A1WmJL$%ka0Txgm#A9 z7Rc>Px&4vc-Yd61mfKl!d!O7+H^T>}7bS=Xp}6=e7eB9tbFVJVo1CwUGHYn$T(!Ct zPt?>esax^$7+n0<;Ns`=Zd-i~*H}|($eWDEV`Eh{jg|GD74@FR)$({0bY4wE)3Taj z+A?fiO^r7S6@__Vm8Y?47(}M`Fz0EE5sJd#t_*T}KWdh^c%To6SLk-nt64HkFgiA` zrmlu-7#3ut9!&j;W#u)?R@ASqT(P1~7G9r=hW?zMN~Q zjp-8`uU=j+&*0J6n6-Wd=XP-ojTkt(q_OcT&*RIvx)Ey(bYo+;aEm+*Uarx_$9P0p z$A@H%fL2Kj=N&en+-K@*YNAN7Y1|z)!SGt*4}iyuG7=y6F+yBc+%E$i3hV2+sO!l% zg>_)rxcnoDLdZc1s5tE4zh{+D;VBoXp~lN;IHyCIP@%oE{4;#;qjGLJ_jnB;S(_Rd UuBomO<5xGp*l-U9&RkFWUz)igjsO4v literal 0 HcmV?d00001 diff --git a/firmware/baseband/proc_adsbtx.cpp b/firmware/baseband/proc_adsbtx.cpp new file mode 100644 index 000000000..461c9df30 --- /dev/null +++ b/firmware/baseband/proc_adsbtx.cpp @@ -0,0 +1,103 @@ +/* + * Copyright (C) 2014 Jared Boone, ShareBrained Technology, Inc. + * Copyright (C) 2016 Furrtek + * + * This file is part of PortaPack. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2, or (at your option) + * any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; see the file COPYING. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, + * Boston, MA 02110-1301, USA. + */ + +#include "proc_adsbtx.hpp" +#include "portapack_shared_memory.hpp" +#include "sine_table_int8.hpp" +#include "event_m4.hpp" + +#include + +void ADSBTXProcessor::execute(const buffer_c8_t& buffer) { + + // This is called at 2M/2048 = 977Hz + + if (!configured) return; + + for (size_t i = 0; i < buffer.count; i++) { + + // Synthesis at 2M + /*if (preamble == true) { + if (bit_pos >= 16) { + bit_pos = 0; + preamble = false; + bit_part = 0; + } else { + cur_bit = (preamble_parts << bit_pos) >> 15; + bit_pos++; + } + }*/ + //if (preamble == false) { + if (!bit_part) { + if (bit_pos >= 112) { + // Stop + cur_bit = 0; + } else { + cur_bit = shared_memory.tx_data[bit_pos]; + bit_pos++; + bit_part = 1; + } + } else { + bit_part = 0; + cur_bit ^= 1; + } + //} + + // 8D48: 10001101 01001000 + // 1001010110100110 0110010110010101 + + if (cur_bit) { + phase = (phase + 0x1FE0000); // What ? + sphase = phase + (64 << 18); + + re = (sine_table_i8[(sphase & 0x03FC0000) >> 18]); + im = (sine_table_i8[(phase & 0x03FC0000) >> 18]); + } else { + re = 0; + im = 0; + } + + buffer.p[i] = {(int8_t)re, (int8_t)im}; + } + + // TEST + message.n = 200; + shared_memory.application_queue.push(message); + configured = false; +} + +void ADSBTXProcessor::on_message(const Message* const p) { + const auto message = *reinterpret_cast(p); + + if (message.id == Message::ID::ADSBConfigure) { + bit_pos = 0; + cur_bit = 0; + preamble = true; + configured = true; + } +} + +int main() { + EventDispatcher event_dispatcher { std::make_unique() }; + event_dispatcher.run(); + return 0; +} diff --git a/firmware/baseband/proc_adsbtx.hpp b/firmware/baseband/proc_adsbtx.hpp new file mode 100644 index 000000000..eb0777ff3 --- /dev/null +++ b/firmware/baseband/proc_adsbtx.hpp @@ -0,0 +1,52 @@ +/* + * Copyright (C) 2014 Jared Boone, ShareBrained Technology, Inc. + * Copyright (C) 2016 Furrtek + * + * This file is part of PortaPack. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2, or (at your option) + * any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; see the file COPYING. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, + * Boston, MA 02110-1301, USA. + */ + +#ifndef __PROC_ADSBTX_H__ +#define __PROC_ADSBTX_H__ + +#include "baseband_processor.hpp" +#include "baseband_thread.hpp" + +class ADSBTXProcessor : public BasebandProcessor { +public: + void execute(const buffer_c8_t& buffer) override; + + void on_message(const Message* const p) override; + +private: + bool configured = false; + + BasebandThread baseband_thread { 2000000, this, NORMALPRIO + 20, baseband::Direction::Transmit }; // 2280000 + + const uint16_t preamble_parts = 0b1010000101000000; + uint8_t bit_part; + bool preamble; + int8_t re, im; + uint16_t bit_pos = 0; + uint8_t cur_bit = 0; + uint32_t phase, sphase; + int32_t sig, frq; + + TXDoneMessage message; +}; + +#endif diff --git a/firmware/baseband/proc_jammer.cpp b/firmware/baseband/proc_jammer.cpp index 2cb480067..b3b01ab12 100644 --- a/firmware/baseband/proc_jammer.cpp +++ b/firmware/baseband/proc_jammer.cpp @@ -1,5 +1,6 @@ /* * Copyright (C) 2014 Jared Boone, ShareBrained Technology, Inc. + * Copyright (C) 2016 Furrtek * * This file is part of PortaPack. * @@ -21,7 +22,7 @@ #include "proc_jammer.hpp" #include "portapack_shared_memory.hpp" -#include "sine_table.hpp" +#include "sine_table_int8.hpp" #include "event_m4.hpp" #include @@ -29,6 +30,9 @@ #define POLY_MASK_32 0xB4BCD35C void JammerProcessor::execute(const buffer_c8_t& buffer) { + + if (!configured) return; + for (size_t i = 0; i= 10000) { //shared_memory.jammer_ranges[ir].duration @@ -66,21 +70,68 @@ void JammerProcessor::execute(const buffer_c8_t& buffer) { } aphase += 8830; - sample = sine_table_f32[(aphase & 0x03FF0000)>>18]*256; + sample = sine_table_i8[(sphase & 0x03FC0000) >> 18]; - //FM - frq = sample * jammer_bw; // Bandwidth + // FM + frq = sample * jammer_bw; phase = (phase + frq); - sphase = phase + (256<<16); + sphase = phase + (64 << 18); - re = sine_table_f32[(sphase & 0x03FF0000)>>18]*127; - im = sine_table_f32[(phase & 0x03FF0000)>>18]*127; + re = (sine_table_i8[(sphase & 0x03FC0000) >> 18]); + im = (sine_table_i8[(phase & 0x03FC0000) >> 18]); - buffer.p[i] = {(int8_t)re,(int8_t)im}; + buffer.p[i] = {(int8_t)re, (int8_t)im}; } }; +void JammerProcessor::on_message(const Message* const msg) { + /*const auto message = *reinterpret_cast(msg); + + if (message.id == Message::ID::DTMFTXConfig) { + + // Translate DTMF message to index in DTMF frequencies table + tone_ptr = &shared_memory.tx_data[0]; + for (;;) { + tone_code = *tone_ptr; + if (tone_code == 0xFF) + break; // End of message + else if (tone_code <= 9) + // That's already fine bro. + *tone_ptr = tone_code; + else if (tone_code == 'A') + *tone_ptr = 10; + else if (tone_code == 'B') + *tone_ptr = 11; + else if (tone_code == 'C') + *tone_ptr = 12; + else if (tone_code == 'D') + *tone_ptr = 13; + else if (tone_code == '#') + *tone_ptr = 14; + else if (tone_code == '*') + *tone_ptr = 15; + else { + *tone_ptr = 0xFF; // Invalid character, stop here + } + tone_ptr++; + } + + // 1<<18 = 262144 + // m = (262144 * a) / 1536000 + // a = 262144 / 1536000 (*1000 = 171) + bw = 171 * (message.bw); + tone_length = message.tone_length * 154; // 153.6 + pause_length = message.pause_length * 154; // 153.6 + as = 0; + tone = false; + timer = 0; + tone_idx = 0; + + configured = true; + }*/ +} + int main() { EventDispatcher event_dispatcher { std::make_unique() }; event_dispatcher.run(); diff --git a/firmware/baseband/proc_jammer.hpp b/firmware/baseband/proc_jammer.hpp index 04a5f8f52..7b6ba8c78 100644 --- a/firmware/baseband/proc_jammer.hpp +++ b/firmware/baseband/proc_jammer.hpp @@ -1,5 +1,6 @@ /* * Copyright (C) 2014 Jared Boone, ShareBrained Technology, Inc. + * Copyright (C) 2016 Furrtek * * This file is part of PortaPack. * @@ -28,8 +29,14 @@ class JammerProcessor : public BasebandProcessor { public: void execute(const buffer_c8_t& buffer) override; + + void on_message(const Message* const msg) override; private: + bool configured = false; + + BasebandThread baseband_thread { 1536000, this, NORMALPRIO + 20, baseband::Direction::Transmit }; + int32_t lfsr32 = 0xABCDE; uint32_t s; int8_t r, ir, re, im; diff --git a/firmware/common/message.hpp b/firmware/common/message.hpp index a67415978..efb9104b6 100644 --- a/firmware/common/message.hpp +++ b/firmware/common/message.hpp @@ -76,11 +76,12 @@ public: AudioTXConfig = 27, POCSAGConfigure = 28, DTMFTXConfig = 29, + ADSBConfigure = 30, - POCSAGPacket = 30, + POCSAGPacket = 31, - FIFOSignal = 31, - FIFOData = 32, + FIFOSignal = 32, + FIFOData = 33, MAX }; @@ -638,6 +639,18 @@ public: const uint32_t rate; }; +class ADSBConfigureMessage : public Message { +public: + constexpr ADSBConfigureMessage( + const uint32_t test + ) : Message { ID::ADSBConfigure }, + test(test) + { + } + + const uint32_t test; +}; + class DTMFTXConfigMessage : public Message { public: constexpr DTMFTXConfigMessage( diff --git a/firmware/common/spi_image.hpp b/firmware/common/spi_image.hpp index a74732061..6d4a17d02 100644 --- a/firmware/common/spi_image.hpp +++ b/firmware/common/spi_image.hpp @@ -80,6 +80,7 @@ constexpr image_tag_t image_tag_xylos { 'P', 'X', 'Y', 'L' }; constexpr image_tag_t image_tag_rds { 'P', 'R', 'D', 'S' }; constexpr image_tag_t image_tag_ook { 'P', 'O', 'O', 'K' }; constexpr image_tag_t image_tag_dtmf_tx { 'P', 'D', 'T', 'X' }; +constexpr image_tag_t image_tag_adsb_tx { 'P', 'A', 'D', 'S' }; constexpr image_tag_t image_tag_hackrf { 'H', 'R', 'F', '1' }; diff --git a/firmware/portapack-h1-havoc.bin b/firmware/portapack-h1-havoc.bin index 27eec70ecbeb91b6e9c28da3386a678ee20ee419..990d84b0a9707b0689c231fc67c06002db2abaa4 100644 GIT binary patch delta 56778 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 Oe%kB*8B4+=W(EMUIC#GR delta 55110 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