2017-05-25 20:08:33 +00:00
/*
* Copyright ( C ) 2015 Jared Boone , ShareBrained Technology , Inc .
* Copyright ( C ) 2017 Furrtek
2023-05-18 20:16:05 +00:00
*
2017-05-25 20:08:33 +00:00
* 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 .
*/
2017-08-29 08:42:04 +00:00
# include "ui_aprs_tx.hpp"
2017-05-25 20:08:33 +00:00
# include "ui_alphanum.hpp"
# include "aprs.hpp"
# include "string_format.hpp"
# include "portapack.hpp"
# include "baseband_api.hpp"
2018-02-23 20:21:24 +00:00
# include "portapack_shared_memory.hpp"
2017-05-25 20:08:33 +00:00
# include "portapack_persistent_memory.hpp"
# include <cstring>
# include <stdio.h>
using namespace aprs ;
using namespace portapack ;
namespace ui {
void APRSTXView : : focus ( ) {
2023-05-18 20:16:05 +00:00
tx_view . focus ( ) ;
2017-05-25 20:08:33 +00:00
}
APRSTXView : : ~ APRSTXView ( ) {
2023-05-18 20:16:05 +00:00
transmitter_model . disable ( ) ;
2023-06-17 14:54:52 +00:00
baseband : : shutdown ( ) ;
2017-05-25 20:08:33 +00:00
}
void APRSTXView : : start_tx ( ) {
2023-09-12 19:38:19 +00:00
// TODO: Clean up this API to take string_views to avoid allocations.
2023-05-18 20:16:05 +00:00
make_aprs_frame (
2023-09-12 19:38:19 +00:00
sym_source . to_string ( ) . c_str ( ) , num_ssid_source . value ( ) ,
sym_dest . to_string ( ) . c_str ( ) , num_ssid_dest . value ( ) ,
2023-05-18 20:16:05 +00:00
payload ) ;
// uint8_t * bb_data_ptr = shared_memory.bb_data.data;
// text_payload.set(to_string_hex_array(bb_data_ptr + 56, 15));
2023-10-08 15:50:31 +00:00
transmitter_model . set_baseband_bandwidth ( 1'750'000 ) ; // APRS Automatic Packet Reporting System (APRS).AFSK with NBFM , max BW= 12k5 , then TX LPF min 1M75
2023-05-18 20:16:05 +00:00
transmitter_model . enable ( ) ;
baseband : : set_afsk_data (
AFSK_TX_SAMPLERATE / 1200 ,
1200 ,
2200 ,
1 ,
10000 , // APRS uses fixed 10k bandwidth
8 ) ;
2017-05-25 20:08:33 +00:00
}
2017-09-24 19:05:42 +00:00
void APRSTXView : : on_tx_progress ( const uint32_t progress , const bool done ) {
2023-05-18 20:16:05 +00:00
( void ) progress ;
if ( done ) {
transmitter_model . disable ( ) ;
tx_view . set_transmitting ( false ) ;
}
2017-05-25 20:08:33 +00:00
}
APRSTXView : : APRSTXView ( NavigationView & nav ) {
2023-05-18 20:16:05 +00:00
baseband : : run_image ( portapack : : spi_flash : : image_tag_afsk ) ;
add_children ( { & labels ,
& sym_source ,
& num_ssid_source ,
& sym_dest ,
& num_ssid_dest ,
& text_payload ,
& button_set ,
& tx_view } ) ;
button_set . on_select = [ this , & nav ] ( Button & ) {
text_prompt (
nav ,
payload ,
30 ,
[ this ] ( std : : string & s ) {
text_payload . set ( s ) ;
} ) ;
} ;
tx_view . on_edit_frequency = [ this , & nav ] ( ) {
2023-06-11 18:47:13 +00:00
auto new_view = nav . push < FrequencyKeypadView > ( transmitter_model . target_frequency ( ) ) ;
2023-05-18 20:16:05 +00:00
new_view - > on_changed = [ this ] ( rf : : Frequency f ) {
2023-06-11 18:47:13 +00:00
transmitter_model . set_target_frequency ( f ) ;
2023-05-18 20:16:05 +00:00
} ;
} ;
tx_view . on_start = [ this ] ( ) {
start_tx ( ) ;
tx_view . set_transmitting ( true ) ;
} ;
tx_view . on_stop = [ this ] ( ) {
tx_view . set_transmitting ( false ) ;
transmitter_model . disable ( ) ;
} ;
2017-05-25 20:08:33 +00:00
}
} /* namespace ui */