This FW for the New Packet Radio project was taken from the Hackaday project https://hackaday.io/project/164092-npr-new-packet-radio The source code is original without any modifications, ver. 2020_06_29.
168 lines
6.4 KiB
C++
168 lines
6.4 KiB
C++
// This file is part of "NPR70 modem firmware" software
|
|
// (A GMSK data modem for ham radio 430-440MHz, at several hundreds of kbps)
|
|
// Copyright (c) 2017-2020 Guillaume F. F4HDK (amateur radio callsign)
|
|
//
|
|
// "NPR70 modem firmware" 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 3 of the License, or
|
|
// (at your option) any later version.
|
|
//
|
|
// "NPR70 modem firmware" 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 "NPR70 modem firmware". If not, see <http://www.gnu.org/licenses/>
|
|
|
|
#include "SI4463.h"
|
|
#include "W5500.h"
|
|
#include "global_variables.h"
|
|
#include "ext_SRAM2.h"
|
|
|
|
SI4463_Chip* G_SI4463;
|
|
W5500_chip* W5500_p1;
|
|
DigitalInOut* G_FDD_trig_pin;
|
|
InterruptIn* G_FDD_trig_IRQ;
|
|
DigitalOut* G_PTT_PA_pin;
|
|
|
|
ext_SRAM_chip* SPI_SRAM_p;
|
|
|
|
Serial pc(SERIAL_TX, SERIAL_RX);
|
|
//DigitalOut* LED_connected_p;
|
|
|
|
Timeout SI4463_prepa_TX_1_call;
|
|
|
|
char HMI_out_str[120];
|
|
|
|
unsigned int RX_FIFO_WR_point = 0;
|
|
unsigned int RX_FIFO_RD_point = 0;
|
|
unsigned int RX_FIFO_last_received = 0;
|
|
unsigned char RX_FIFO_data[0x2000]; //8kB
|
|
|
|
//unsigned int debug_counter = 0;
|
|
unsigned int RX_top_FDD_up_counter = 0;
|
|
int RX_Eth_IPv4_counter = 0;
|
|
int TX_radio_IPv4_counter = 0;
|
|
int RX_radio_IPv4_counter = 0;
|
|
unsigned int RSSI_total_stat = 0;
|
|
unsigned int RSSI_stat_pkt_nb = 0;
|
|
|
|
|
|
int slave_new_burst_tx_pending = 0;
|
|
|
|
unsigned char TX_buff_intern_FIFOdata[128][128];
|
|
unsigned int TX_buff_intern_WR_pointer=0;
|
|
unsigned int TX_buff_intern_RD_pointer=0;
|
|
unsigned int TX_buff_intern_last_ready=0;
|
|
|
|
unsigned char TX_buff_ext_sizes[1024];//1024
|
|
unsigned int TX_buff_ext_WR_pointer;
|
|
unsigned int TX_buff_ext_RD_pointer;
|
|
unsigned int TX_buff_ext_last_ready;
|
|
|
|
unsigned char TX_TDMA_intern_data[384];
|
|
|
|
unsigned char is_TDMA_master = 0; //truc
|
|
unsigned char is_telnet_active = 1;
|
|
unsigned char is_telnet_routed = 0;
|
|
unsigned char CONF_radio_modulation;
|
|
unsigned char CONF_radio_frequency;
|
|
unsigned char CONF_frequency_band;
|
|
unsigned char CONF_radio_network_ID;
|
|
unsigned short int CONF_frequency_HD;
|
|
short int CONF_freq_shift=0;
|
|
unsigned char CONF_channel_TX;
|
|
unsigned char CONF_channel_RX;
|
|
unsigned char CONF_SI4463_freq_conf_RX[15];
|
|
unsigned char CONF_SI4463_freq_conf_TX[15];
|
|
unsigned char CONF_transmission_method=0;
|
|
unsigned char CONF_master_FDD=0;
|
|
unsigned long int CONF_master_down_IP;
|
|
unsigned int CONF_TDMA_frame_duration = 65000; //
|
|
unsigned int CONF_TDMA_slot_duration = 3360;
|
|
unsigned int CONF_reduced_TDMA_slot_duration = 2360;
|
|
unsigned int CONF_TDMA_slot_margin = 300;
|
|
unsigned int CONF_TR_margain = 500;
|
|
unsigned int CONF_TA_margain = 2000;
|
|
unsigned int CONF_preamble_duration_for_decide = 590;
|
|
unsigned int CONF_long_preamble_duration_for_TA = 1000;
|
|
unsigned int CONF_byte_duration = 8;
|
|
unsigned int CONF_additional_preamble = 700;
|
|
unsigned long int CONF_radio_timeout = 30000000;
|
|
unsigned long int CONF_radio_timeout_small = 10000000;
|
|
unsigned int offset_time_TX_slave = 48000;
|
|
unsigned int time_next_TX_slave;
|
|
unsigned int time_max_TX_burst = 45000;//47000
|
|
int CONF_delay_prepTX1_2_TX = 1030;
|
|
unsigned char my_radio_client_ID = 0xFE;
|
|
int CONF_Tx_rframe_timeout = 30;//unit 1/65000 th of a second
|
|
int CONF_signaling_period = 1;
|
|
int is_SRAM_ext=1;
|
|
int DEBUG_max_rx_size_w5500=0;
|
|
|
|
unsigned int TDMA_slave_last_master_top = 0;
|
|
|
|
Timer GLOBAL_timer;
|
|
|
|
LAN_conf_T LAN_conf_saved;
|
|
LAN_conf_T LAN_conf_applied;
|
|
|
|
unsigned char CONF_modem_MAC[6];
|
|
unsigned char CONF_Eth_mode = 0x07;
|
|
|
|
char CONF_radio_my_callsign[16];
|
|
char CONF_radio_master_callsign[16];
|
|
unsigned long int CONF_radio_addr_table_IP_begin[radio_addr_table_size];
|
|
unsigned long int CONF_radio_addr_table_IP_size[radio_addr_table_size];
|
|
char CONF_radio_addr_table_callsign[radio_addr_table_size][16];
|
|
char CONF_radio_addr_table_status[radio_addr_table_size];
|
|
unsigned int CONF_radio_addr_table_date[radio_addr_table_size];
|
|
unsigned long int CONF_radio_IP_start;
|
|
unsigned long int CONF_radio_IP_size;
|
|
unsigned int my_client_radio_connexion_state;
|
|
unsigned int my_client_radio_connexion_date;
|
|
unsigned char G_connect_rejection_reason;
|
|
int G_temperature_SI4463;
|
|
int G_need_temperature_check = 0;
|
|
unsigned long int CONF_radio_IP_size_requested;
|
|
unsigned char CONF_radio_static_IP_requested;
|
|
unsigned char CONF_radio_state_ON_OFF = 0;
|
|
unsigned char CONF_radio_default_state_ON_OFF;
|
|
unsigned char CONF_radio_PA_PWR = 0x7F;
|
|
unsigned char CONF_preamble_TX_long;
|
|
unsigned char CONF_preamble_TX_short;
|
|
unsigned long int last_rframe_seen = 0;
|
|
|
|
long int TDMA_table_TA[radio_addr_table_size];
|
|
|
|
unsigned short int G_downlink_RSSI;
|
|
unsigned short int G_radio_addr_table_RSSI[radio_addr_table_size];
|
|
unsigned short int G_downlink_BER;
|
|
unsigned short int G_radio_addr_table_BER[radio_addr_table_size];
|
|
short int G_downlink_TA;
|
|
int G_downlink_bandwidth_temp;
|
|
int G_uplink_bandwidth_temp;
|
|
|
|
int super_debug = 0;
|
|
|
|
unsigned char parity_bit_elab[128] = {
|
|
0x00,0x80,0x80,0x00,0x80,0x00,0x00,0x80,0x80,0x00,0x00,0x80,0x00,0x80,0x80,0x00,
|
|
0x80,0x00,0x00,0x80,0x00,0x80,0x80,0x00,0x00,0x80,0x80,0x00,0x80,0x00,0x00,0x80,
|
|
0x80,0x00,0x00,0x80,0x00,0x80,0x80,0x00,0x00,0x80,0x80,0x00,0x80,0x00,0x00,0x80,
|
|
0x00,0x80,0x80,0x00,0x80,0x00,0x00,0x80,0x80,0x00,0x00,0x80,0x00,0x80,0x80,0x00,
|
|
0x80,0x00,0x00,0x80,0x00,0x80,0x80,0x00,0x00,0x80,0x80,0x00,0x80,0x00,0x00,0x80,
|
|
0x00,0x80,0x80,0x00,0x80,0x00,0x00,0x80,0x80,0x00,0x00,0x80,0x00,0x80,0x80,0x00,
|
|
0x00,0x80,0x80,0x00,0x80,0x00,0x00,0x80,0x80,0x00,0x00,0x80,0x00,0x80,0x80,0x00,
|
|
0x80,0x00,0x00,0x80,0x00,0x80,0x80,0x00,0x00,0x80,0x80,0x00,0x80,0x00,0x00,0x80
|
|
};
|
|
unsigned char parity_bit_check[256] = {
|
|
1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1,0,1,1,0,1,0,0,1,1,0,0,1,0,1,1,0,
|
|
0,1,1,0,1,0,0,1,1,0,0,1,0,1,1,0,1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1,
|
|
0,1,1,0,1,0,0,1,1,0,0,1,0,1,1,0,1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1,
|
|
1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1,0,1,1,0,1,0,0,1,1,0,0,1,0,1,1,0,
|
|
0,1,1,0,1,0,0,1,1,0,0,1,0,1,1,0,1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1,
|
|
1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1,0,1,1,0,1,0,0,1,1,0,0,1,0,1,1,0,
|
|
1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1,0,1,1,0,1,0,0,1,1,0,0,1,0,1,1,0,
|
|
0,1,1,0,1,0,0,1,1,0,0,1,0,1,1,0,1,0,0,1,0,1,1,0,0,1,1,0,1,0,0,1
|
|
};
|