1 //====================================================================== 2 // transmit_camp.cxx 3 // 4 // Author(s): 5 // Dave Freese, W1HKJ, Copyright (C) 2010, 2011, 2012, 2013 6 // Robert Stiles, KK5VD, Copyright (C) 2013 7 // 8 // This file is part of FLAMP. 9 // 10 // This is free software; you can redistribute it and/or modify 11 // it under the terms of the GNU General Public License as published by 12 // the Free Software Foundation; either version 3 of the License, or 13 // (at your option) any later version. 14 // 15 // This software is distributed in the hope that it will be useful, 16 // but WITHOUT ANY WARRANTY; without even the implied warranty of 17 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 18 // GNU General Public License for more details. 19 // 20 // You should have received a copy of the GNU General Public License 21 // along with this program. If not, see <http://www.gnu.org/licenses/>. 22 // 23 // ===================================================================== 24 25 #ifndef __flamp_transmit_camp__ 26 #define __flamp_transmit_camp__ 27 28 #define TX_CONTINIOUS 0x01 //!< @brief No breaks in the transmitted data. 29 #define TX_MODEM_SAME 0x02 //!< @brief Header modem not used. 30 #define TX_MULTI_MODEM 0x04 //!< @brief Create a time table for all modems. 31 #define TX_SEGMENTED 0x08 //!< @brief Interval Timer 32 #define TX_SINGLE_MODEM 0x10 //!< @brief Create a time table for a single modem. 33 34 #define TX_ALL_BUTTON 1 //!< @brief Flag indicating transmit all queued file. 35 #define TX_BUTTON 2 //!< @brief Flag indicating transmit a single file. 36 37 #define DATA_MODEM 1 //!< @brief Indicate this data is for data modem. 38 #define HEADER_MODEM 2 //!< @brief Indicate this data is for header modem. 39 40 #define CALLSIGN_PREAMBLE 0x01 41 #define CALLSIGN_POSTAMBLE 0x02 42 43 #define BROADCAST_MAX_MODEMS 4 //!< @brief Maximum number of modems (hamcast). 44 45 #define THREAD_ERR_MSG_SIZE 256 46 47 //! @struct _tx_fldigi_thread 48 //! Structure information used to transmit cAmp data (threaded) and the creation of a character time table. 49 50 //! @typedef TX_FLDIGI_THREAD 51 //! @see _tx_fldigi_thread 52 53 typedef struct _tx_fldigi_thread { 54 pthread_attr_t attr; //!< Flag for indicating thread is to be detached. pthread_execute() 55 pthread_cond_t condition; //!< Condition used to signal exit when process is asleep. 56 pthread_mutex_t mutex; //!< Mutex for transit thread. 57 pthread_t thread; //!< Thread 58 59 bool err_flag; //!< @brief Indicating an error occured 60 bool event_driven; //!< @brief Indicate the tx thread is event_driven 61 62 char err_msg[THREAD_ERR_MSG_SIZE]; //!< @brief Error message storage. 63 64 int amp_type; //!< @brief What type of instance in this? RX_AMP or TX_AMP. 65 int exit_thread; //!< @brief Setting to true causes thread to exit. 66 int mode; //!< @brief Mode (modem index) used in time table generation 67 int que; //!< @brief Flag to determine if a single file or multiple files to be sent. 68 int rx_interval_time; //!< @brief Delay period between transmits 69 int tx_interval_time; //!< @brief Transmit period in seconds 70 int thread_running; //!< @brief Flag indicating thread is running. 71 72 std::string header_modem; //!< @brief Local storage for current selected header modem 73 std::string modem; //!< @brief Local storage for current selected modem 74 75 vector<std::string> bc_modems; //!< @brief Local storage for hamcast modems. 76 77 void *data; //!< For future use 78 _tx_fldigi_thread_tx_fldigi_thread79 _tx_fldigi_thread() { //!< @brief Clear struct _tx_fldigi_thread memory on allocation. 80 bc_modems.clear(); 81 data = (void *)0; 82 event_driven = false; 83 exit_thread = 0; 84 header_modem.clear(); 85 memset(&attr, 0, sizeof(attr)); 86 memset(&condition, 0, sizeof(condition)); 87 memset(&err_msg, 0, sizeof(err_msg)); 88 memset(&mutex, 0, sizeof(mutex)); 89 memset(&thread, 0, sizeof(thread)); 90 mode = 0; 91 modem.clear(); 92 que = 0; 93 thread_running = 0; 94 } 95 96 } TX_FLDIGI_THREAD; 97 98 extern std::string g_header_modem; 99 extern std::string g_modem; 100 extern unsigned int modem_rotation_index; 101 extern vector<std::string> bc_modems; 102 103 extern class cAmpGlobal rx_amp; 104 extern class cAmpGlobal tx_amp; 105 106 extern bool active_data_io; 107 extern bool event_bail_flag; 108 extern bool transmit_queue; 109 110 extern int g_event_driven; 111 extern int last_selected_tx_file; 112 extern int tx_thread_running_count; 113 114 extern bool check_block_tx_time(std::vector<std::string> &header, std::vector<std::string> &data, TX_FLDIGI_THREAD *thread_ptr); 115 extern bool send_vector_to_fldigi(TX_FLDIGI_THREAD *thread, std::string modem, std::string &tail, std::vector<std::string> vector_data, int mode, cAmp *tx); 116 extern TX_FLDIGI_THREAD * run_in_thread(void *(*func)(void *), int mode, bool queued, bool event_driven, RELAY_DATA *relay_data); 117 extern void * run_in_thread_destroy(TX_FLDIGI_THREAD *tx_thread, int level, bool *in_use_flag); 118 extern void * transmit_header_current(void *); 119 extern void * transmit_header(void * ptr); 120 extern void * transmit_interval(void *); 121 extern void * transmit_relay_interval(void *ptr); 122 extern void * transmit_serial_current(void *); 123 extern void * transmit_serial_queued(void *); 124 extern void * transmit_serial_relay(void *ptr); 125 extern void clear_missing(void *ptr); 126 extern void abort_tx_from_main(void *ptr); 127 extern bool wait_for_rx(int max_wait_seconds, float factpr = 1.0); 128 129 #endif /* defined(__flamp_transmit_camp__) */ 130