mirror of
https://github.com/n5ac/smartsdr-dsp.git
synced 2026-02-07 23:54:17 +01:00
commit
d5b39e2b7d
|
|
@ -1,6 +1,6 @@
|
|||
[header]
|
||||
Name: ThumbDV
|
||||
Version: 0.0.2
|
||||
Version: "0.0.4"
|
||||
Minimum-SmartSDR-Version: 1.4.2.0
|
||||
Author: FlexRadio Systems
|
||||
Support-email: support@flexradio.com
|
||||
|
|
@ -9,7 +9,7 @@ License: GPL7.3
|
|||
Executable: "thumbdv"
|
||||
|
||||
[setup]
|
||||
waveform create name=ThumbDV mode=DSTR underlying_mode=DFM
|
||||
waveform create name=ThumbDV mode=DSTR underlying_mode=DFM version=0.0.4
|
||||
waveform set ThumbDV tx=1
|
||||
waveform set ThumbDV rx_filter low_cut=-8000
|
||||
waveform set ThumbDV rx_filter high_cut=8000
|
||||
|
|
|
|||
|
|
@ -350,7 +350,7 @@ void sched_waveform_setMessage( uint32 slice, const char * message)
|
|||
strncpy(_dstar->slow_encoder->message, string, copy_len);
|
||||
}
|
||||
|
||||
output( "TX Message: '%s'\n", _dstar->slow_encoder->message );
|
||||
output( "TX Message: '%s' : strlen() = %d \n", _dstar->slow_encoder->message , strlen(_dstar->slow_encoder->message));
|
||||
}
|
||||
|
||||
void sched_waveform_setFD( int fd ) {
|
||||
|
|
@ -485,6 +485,7 @@ static void * _sched_waveform_thread( void * param ) {
|
|||
memset( float_in_24k, 0, MEM_24 * sizeof( float ) );
|
||||
memset( float_in_8k, 0, MEM_8 * sizeof( float ) );
|
||||
|
||||
thumbDV_flushLists();
|
||||
/* Requires us to set initial_rx to FALSE which we do at the end of
|
||||
* the first loop
|
||||
*/
|
||||
|
|
@ -522,12 +523,6 @@ static void * _sched_waveform_thread( void * param ) {
|
|||
cbWriteShort( RX3_cb, speech_out[j] );
|
||||
}
|
||||
|
||||
if (_dstar->rx_state == END_PATTERN)
|
||||
{
|
||||
char msg[64];
|
||||
sprintf( msg, "waveform status slice=%d RX=END", _dstar->slice);
|
||||
tc_sendSmartSDRcommand( msg, FALSE, NULL );
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -588,6 +583,8 @@ static void * _sched_waveform_thread( void * param ) {
|
|||
memset( tx_float_in_24k, 0, MEM_24 * sizeof( float ) );
|
||||
memset( tx_float_in_8k, 0, MEM_8 * sizeof( float ) );
|
||||
|
||||
thumbDV_flushLists();
|
||||
|
||||
/* Requires us to set initial_rx to FALSE which we do at the end of
|
||||
* the first loop
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -80,7 +80,7 @@ static void _handle_status(char* string)
|
|||
// we are now in DSTR mode
|
||||
output(ANSI_MAGENTA "slice %d is now in DSTR mode\n",slc);
|
||||
char cmd[512] = {0};
|
||||
sprintf(cmd, "slice s %d fm_deviation=1250 post_demod_low=0 post_demod_high=6000 dfm_pre_de_emphasis=0 post_demod_bypass=1 squelch=0", slc);
|
||||
sprintf(cmd, "slice s %d fm_deviation=1200 post_demod_low=0 post_demod_high=6000 dfm_pre_de_emphasis=0 post_demod_bypass=1 squelch=0", slc);
|
||||
tc_sendSmartSDRcommand(cmd,FALSE, NULL);
|
||||
|
||||
sched_waveform_setDSTARSlice(slc);
|
||||
|
|
|
|||
|
|
@ -518,9 +518,6 @@ DSTAR_MACHINE dstar_createMachine( void ) {
|
|||
machine->slow_decoder = safe_malloc(sizeof(slow_data_decoder));
|
||||
machine->slow_encoder = safe_malloc(sizeof(slow_data_encoder));
|
||||
|
||||
/* Temporary */
|
||||
strcpy(machine->slow_encoder->message, "12345678901234567890");
|
||||
|
||||
machine->slice = 0;
|
||||
|
||||
return machine;
|
||||
|
|
@ -661,6 +658,14 @@ void dstar_updateStatus( DSTAR_MACHINE machine, uint32 slice, enum STATUS_TYPE
|
|||
sprintf( status, "waveform status slice=%d message=%s", slice, message_string);
|
||||
tc_sendSmartSDRcommand( status, FALSE, NULL );
|
||||
break;
|
||||
case STATUS_END_RX:
|
||||
{
|
||||
char msg[64];
|
||||
sprintf( msg, "waveform status slice=%d RX=END", machine->slice);
|
||||
tc_sendSmartSDRcommand( msg, FALSE, NULL );
|
||||
}
|
||||
break;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -670,21 +675,34 @@ void dstar_txStateMachine( DSTAR_MACHINE machine, GMSK_MOD gmsk_mod, Circular_Fl
|
|||
uint32 j = 0;
|
||||
float buf[DSTAR_RADIO_BIT_LENGTH];
|
||||
dstar_pfcs pfcs;
|
||||
#ifdef DUMP_GMSK_MOD
|
||||
static FILE * dump_file = NULL;
|
||||
|
||||
if ( dump_file == NULL ) {
|
||||
dump_file = fopen("/tmp/gmsk_encoding.dat", "w");
|
||||
}
|
||||
#endif
|
||||
|
||||
switch ( machine->tx_state ) {
|
||||
case BIT_FRAME_SYNC:
|
||||
/* Create Sync */
|
||||
for ( i = 0 ; i < 64 * 7; i += 2 ) {
|
||||
for ( i = 0 ; i < 64 * 5; i += 2 ) {
|
||||
gmsk_encode( gmsk_mod, TRUE, buf, DSTAR_RADIO_BIT_LENGTH );
|
||||
|
||||
for ( j = 0 ; j < DSTAR_RADIO_BIT_LENGTH ; j++ ) {
|
||||
cbWriteFloat( tx_cb, buf[j] );
|
||||
#ifdef DUMP_GMSK_MOD
|
||||
fprintf(dump_file, "%6.6f\n", buf[j]);
|
||||
#endif
|
||||
}
|
||||
|
||||
gmsk_encode( gmsk_mod, FALSE, buf, DSTAR_RADIO_BIT_LENGTH );
|
||||
|
||||
for ( j = 0 ; j < DSTAR_RADIO_BIT_LENGTH ; j++ ) {
|
||||
cbWriteFloat( tx_cb, buf[j] );
|
||||
#ifdef DUMP_GMSK_MOD
|
||||
fprintf(dump_file, "%6.6f\n", buf[j]);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -693,6 +711,9 @@ void dstar_txStateMachine( DSTAR_MACHINE machine, GMSK_MOD gmsk_mod, Circular_Fl
|
|||
|
||||
for ( j = 0 ; j < DSTAR_RADIO_BIT_LENGTH ; j++ ) {
|
||||
cbWriteFloat( tx_cb, buf[j] );
|
||||
#ifdef DUMP_GMSK_MOD
|
||||
fprintf(dump_file, "%6.6f\n", buf[j]);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
|
@ -722,13 +743,16 @@ void dstar_txStateMachine( DSTAR_MACHINE machine, GMSK_MOD gmsk_mod, Circular_Fl
|
|||
|
||||
uint32 count = 0;
|
||||
dstar_scramble( interleaved, scrambled, outLen, &count );
|
||||
output( "Count = %d\n", count );
|
||||
//output( "Count = %d\n", count );
|
||||
|
||||
for ( i = 0 ; i < count ; i++ ) {
|
||||
gmsk_encode( gmsk_mod, scrambled[i], buf, DSTAR_RADIO_BIT_LENGTH );
|
||||
|
||||
for ( j = 0 ; j < DSTAR_RADIO_BIT_LENGTH ; j++ ) {
|
||||
cbWriteFloat( tx_cb, buf[j] );
|
||||
#ifdef DUMP_GMSK_MOD
|
||||
fprintf(dump_file, "%6.6f\n", buf[j]);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
|
@ -745,6 +769,9 @@ void dstar_txStateMachine( DSTAR_MACHINE machine, GMSK_MOD gmsk_mod, Circular_Fl
|
|||
|
||||
for ( k = 0 ; k < DSTAR_RADIO_BIT_LENGTH ; k++ ) {
|
||||
cbWriteFloat( tx_cb, buf[k] );
|
||||
#ifdef DUMP_GMSK_MOD
|
||||
fprintf(dump_file, "%6.6f\n", buf[k]);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -767,12 +794,16 @@ void dstar_txStateMachine( DSTAR_MACHINE machine, GMSK_MOD gmsk_mod, Circular_Fl
|
|||
|
||||
dstar_scramble(encode_bits, encode_bits_scrambled, DATA_FRAME_LENGTH_BITS, &count);
|
||||
|
||||
|
||||
gmsk_bitsToBytes(encode_bits_scrambled, encode_bytes_scrambled, DATA_FRAME_LENGTH_BITS);
|
||||
|
||||
gmsk_encodeBuffer(gmsk_mod, encode_bytes_scrambled, DATA_FRAME_LENGTH_BITS, data_buf, DATA_FRAME_LENGTH_BITS * DSTAR_RADIO_BIT_LENGTH);
|
||||
|
||||
for ( i = 0 ; i < DATA_FRAME_LENGTH_BITS * DSTAR_RADIO_BIT_LENGTH ; i++ ) {
|
||||
cbWriteFloat(tx_cb, data_buf[i]);
|
||||
#ifdef DUMP_GMSK_MOD
|
||||
fprintf(dump_file, "%6.6f\n", data_buf[i]);
|
||||
#endif
|
||||
}
|
||||
|
||||
break;
|
||||
|
|
@ -787,7 +818,11 @@ void dstar_txStateMachine( DSTAR_MACHINE machine, GMSK_MOD gmsk_mod, Circular_Fl
|
|||
|
||||
for ( i = 0 ; i < DATA_FRAME_LENGTH_BITS * DSTAR_RADIO_BIT_LENGTH ; i++ ) {
|
||||
cbWriteFloat( tx_cb, sync_buf[i] );
|
||||
#ifdef DUMP_GMSK_MOD
|
||||
fprintf(dump_file, "%6.6f\n", sync_buf[i]);
|
||||
#endif
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
case END_PATTERN:
|
||||
|
|
@ -799,22 +834,38 @@ void dstar_txStateMachine( DSTAR_MACHINE machine, GMSK_MOD gmsk_mod, Circular_Fl
|
|||
|
||||
for ( i = 0 ; i < END_PATTERN_LENGTH_BITS * DSTAR_RADIO_BIT_LENGTH ; i++ ) {
|
||||
cbWriteFloat( tx_cb, end_buf[i] );
|
||||
#ifdef DUMP_GMSK_MOD
|
||||
fprintf(dump_file, "%6.6f\n", end_buf[i]);
|
||||
#endif
|
||||
}
|
||||
|
||||
for ( i = 0 ; i < 100 ; i += 2 ) {
|
||||
for ( i = 0 ; i < 22 ; i += 2 ) {
|
||||
gmsk_encode( gmsk_mod, TRUE, buf, DSTAR_RADIO_BIT_LENGTH );
|
||||
|
||||
for ( j = 0 ; j < DSTAR_RADIO_BIT_LENGTH ; j++ ) {
|
||||
cbWriteFloat( tx_cb, buf[j] );
|
||||
#ifdef DUMP_GMSK_MOD
|
||||
fprintf(dump_file, "%6.6f\n", buf[j]);
|
||||
#endif
|
||||
}
|
||||
|
||||
gmsk_encode( gmsk_mod, FALSE, buf, DSTAR_RADIO_BIT_LENGTH );
|
||||
|
||||
for ( j = 0 ; j < DSTAR_RADIO_BIT_LENGTH ; j++ ) {
|
||||
cbWriteFloat( tx_cb, buf[j] );
|
||||
#ifdef DUMP_GMSK_MOD
|
||||
fprintf(dump_file, "%6.6f\n", buf[j]);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef DUMP_GMSK_MOD
|
||||
fclose(dump_file);
|
||||
dump_file = NULL;
|
||||
#endif
|
||||
|
||||
slow_data_resetEncoder(machine);
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
|
@ -1004,6 +1055,7 @@ BOOL dstar_rxStateMachine( DSTAR_MACHINE machine, BOOL in_bit, unsigned char * a
|
|||
|
||||
bitPM_reset( machine->data_sync_pm );
|
||||
|
||||
dstar_updateStatus(machine, machine->slice, STATUS_END_RX);
|
||||
/* STATE CHANGE */
|
||||
machine->rx_state = BIT_FRAME_SYNC;
|
||||
machine->bit_count = 0;
|
||||
|
|
@ -1016,7 +1068,10 @@ BOOL dstar_rxStateMachine( DSTAR_MACHINE machine, BOOL in_bit, unsigned char * a
|
|||
|
||||
case END_PATTERN:
|
||||
|
||||
output( "Found end pattern bits\n" );
|
||||
output( "Found end pattern bits -- sending status update\n" );
|
||||
|
||||
dstar_updateStatus(machine, machine->slice, STATUS_END_RX);
|
||||
|
||||
bitPM_reset( machine->end_pm );
|
||||
bitPM_reset( machine->syn_pm );
|
||||
|
||||
|
|
|
|||
|
|
@ -78,7 +78,8 @@ enum DSTAR_RX_STATE {
|
|||
enum STATUS_TYPE {
|
||||
STATUS_RX = 0,
|
||||
STATUS_TX,
|
||||
STATUS_SLOW_DATA_MESSAGE
|
||||
STATUS_SLOW_DATA_MESSAGE,
|
||||
STATUS_END_RX
|
||||
};
|
||||
|
||||
typedef struct _dstar_header {
|
||||
|
|
|
|||
|
|
@ -269,6 +269,40 @@ const float MOD_COEFFS_TABLE[] = {
|
|||
|
||||
#define MOD_COEFFS_LENGTH 41U
|
||||
|
||||
#define eiline(n) (iir->in_line[(n)])
|
||||
#define eoline(n) (iir->out_line[(n)])
|
||||
|
||||
static float _process_iir_filter(IIR_FILTER iir, float sample)
|
||||
{
|
||||
|
||||
float * a = iir->a;
|
||||
float * b = iir->b;
|
||||
float N = 16.0f; // Scaling value for IIR Filter Realization
|
||||
float N_IV = 1.0f / N;
|
||||
float N_2 = N / 2.0f;
|
||||
|
||||
float local_out;
|
||||
//Shift Input Line
|
||||
eiline( 2) = eiline( 1);
|
||||
eiline( 1) = eiline( 0);
|
||||
|
||||
eiline( 0) = sample;
|
||||
|
||||
eoline( 2) = eoline( 1);
|
||||
eoline( 1) = eoline( 0);
|
||||
|
||||
local_out = 0.0f;
|
||||
|
||||
|
||||
local_out = 2.0f * ((-a[1]*0.5f * eoline(
|
||||
1)) - (a[2]*0.5f * eoline( 2))
|
||||
+ N_2 * ((b[0]*N_IV * eiline( 0)) + (b[1]*N_IV
|
||||
* eiline( 1)) + (b[2]*N_IV * eiline( 2))));
|
||||
|
||||
eoline(0) = local_out;
|
||||
return local_out;
|
||||
}
|
||||
|
||||
uint32 gmsk_encode( GMSK_MOD mod, BOOL bit, float * buffer, unsigned int length ) {
|
||||
|
||||
if ( length != DSTAR_RADIO_BIT_LENGTH ) {
|
||||
|
|
@ -286,6 +320,9 @@ uint32 gmsk_encode( GMSK_MOD mod, BOOL bit, float * buffer, unsigned int length
|
|||
} else {
|
||||
buffer[i] = gmsk_FilterProcessSingle( mod->filter, 0.75f );
|
||||
}
|
||||
|
||||
buffer[i] = _process_iir_filter(mod->iir, buffer[i]);
|
||||
|
||||
}
|
||||
|
||||
return DSTAR_RADIO_BIT_LENGTH;
|
||||
|
|
@ -355,12 +392,78 @@ GMSK_DEMOD gmsk_createDemodulator( void ) {
|
|||
return demod;
|
||||
}
|
||||
|
||||
|
||||
float convertVITAdbToFloat(VITAdb vita)
|
||||
{
|
||||
int32 db = (int32)((int16)(vita & 0xFFFF));
|
||||
return (float)db / 128.0;
|
||||
}
|
||||
// always assume the float is in dB (see the parameter name)
|
||||
VITAdb convertFloatToVITAdb(float db)
|
||||
{
|
||||
return ((int32)(db * 128) & 0xFFFF);
|
||||
}
|
||||
|
||||
GMSK_MOD gmsk_createModulator( void ) {
|
||||
GMSK_MOD mod = ( GMSK_MOD ) safe_malloc( sizeof( gmsk_mod ) );
|
||||
mod->m_invert = FALSE;
|
||||
|
||||
mod->filter = gmsk_createFilter( MOD_COEFFS_TABLE, MOD_COEFFS_LENGTH );
|
||||
|
||||
|
||||
mod->iir = safe_malloc(sizeof(iir_filter));
|
||||
|
||||
IIR_FILTER filter = mod->iir;
|
||||
|
||||
float * a = filter->a;
|
||||
float * b = filter->b;
|
||||
uint32 freq_hz = 4800;
|
||||
uint32 sample_rate_hz = 24000;
|
||||
uint32 level = 10;
|
||||
float q_level = 0.2;
|
||||
float w0 = 2.0 * M_PI * freq_hz/
|
||||
(float)sample_rate_hz;
|
||||
VITAdb db_gain = convertFloatToVITAdb(level);
|
||||
float q_factor;
|
||||
if ( level > 0 ) {
|
||||
q_factor = q_level;
|
||||
} else {
|
||||
q_factor = 4.0f * q_level;
|
||||
}
|
||||
float A = pow(10, convertVITAdbToFloat(db_gain) / 40);
|
||||
float alpha = sin(w0) / (2 * A * q_factor);
|
||||
//flex_printf(LOG_ALWAYS, "w0 = %lf, A = %lf, alpha = %lf", w0, A, alpha);
|
||||
|
||||
//float linearGain = pow(10, convertVITAdbToFloat(db_gain) / 20);
|
||||
|
||||
if (level != 0 ) {
|
||||
// Peaking EQ from AUDIO COOKBOOK
|
||||
b[0] = 1 + alpha * A;
|
||||
b[1] = -2 * cos(w0);
|
||||
b[2] = 1 - alpha * A;
|
||||
|
||||
a[0] = 1 + alpha/A;
|
||||
a[1] = -2 * cos(w0);
|
||||
a[2] = 1 - alpha / A;
|
||||
} else {
|
||||
b[0] = 0;
|
||||
b[1] = 0;
|
||||
b[2] = 0;
|
||||
a[0] = 1;
|
||||
a[1] = 0;
|
||||
a[2] = 0;
|
||||
}
|
||||
|
||||
// Normalize by a[0] so that a[0] = 1
|
||||
b[0] = b[0] / a[0];
|
||||
b[1] = b[1] / a[0];
|
||||
b[2] = b[2] / a[0];
|
||||
|
||||
a[1] = a[1] / a[0];
|
||||
a[2] = a[2] / a[0];
|
||||
a[0] = a[0] / a[0];
|
||||
|
||||
|
||||
return mod;
|
||||
}
|
||||
|
||||
|
|
@ -381,6 +484,7 @@ void gmsk_destroyModulator( GMSK_MOD mod ) {
|
|||
}
|
||||
|
||||
gmsk_destroyFilter( mod->filter );
|
||||
safe_free(mod->iir);
|
||||
safe_free( mod );
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -27,12 +27,25 @@
|
|||
#ifndef THUMBDV_GMSK_MODEM_H_
|
||||
#define THUMBDV_GMSK_MODEM_H_
|
||||
|
||||
#include "common.h"
|
||||
|
||||
enum DEMOD_STATE {
|
||||
DEMOD_FALSE,
|
||||
DEMOD_TRUE,
|
||||
DEMOD_UNKNOWN
|
||||
};
|
||||
|
||||
#define SC_EQ_MAX_DEPTH 3
|
||||
#define SC_EQ_FILTER_LEN 3
|
||||
|
||||
typedef struct _iir_filter
|
||||
{
|
||||
float in_line[SC_EQ_FILTER_LEN];
|
||||
float out_line[SC_EQ_FILTER_LEN];
|
||||
float a[SC_EQ_FILTER_LEN];
|
||||
float b[SC_EQ_FILTER_LEN];
|
||||
} iir_filter, * IIR_FILTER;
|
||||
|
||||
typedef struct _fir_filter {
|
||||
float * taps;
|
||||
uint32 length;
|
||||
|
|
@ -52,6 +65,7 @@ typedef struct _gmsk_mod {
|
|||
BOOL m_invert;
|
||||
|
||||
FIR_FILTER filter;
|
||||
IIR_FILTER iir;
|
||||
} gmsk_mod, * GMSK_MOD;
|
||||
|
||||
void gmsk_testBitsAndEncodeDecode( void );
|
||||
|
|
|
|||
|
|
@ -258,8 +258,8 @@ void slow_data_addDecodeData(DSTAR_MACHINE dstar, unsigned char * data, uint32 d
|
|||
uint32 message_index = data[0] & SLOW_DATA_LENGTH_MASK;
|
||||
|
||||
if ( message_index != slow_decoder->message_index ) {
|
||||
output("Out of order SLOW DATA MESSAGE SKIPPING\n");
|
||||
slow_decoder->message_index = 0;
|
||||
output("Out of order SLOW DATA MESSAGE setting to new index\n");
|
||||
slow_decoder->message_index = message_index;
|
||||
break;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -76,7 +76,7 @@
|
|||
static pthread_t _read_thread;
|
||||
BOOL _readThreadAbort = FALSE;
|
||||
|
||||
static uint32 _buffering_target = 4;
|
||||
static uint32 _buffering_target = 1;
|
||||
|
||||
static pthread_rwlock_t _encoded_list_lock;
|
||||
static BufferDescriptor _encoded_root;
|
||||
|
|
@ -218,6 +218,26 @@ static void delay( unsigned int delay ) {
|
|||
nanosleep( &tim, &tim2 );
|
||||
};
|
||||
|
||||
void thumbDV_flushLists(void)
|
||||
{
|
||||
BufferDescriptor buf_desc = NULL;
|
||||
|
||||
do
|
||||
{
|
||||
buf_desc = _thumbDVEncodedList_UnlinkHead();
|
||||
if ( buf_desc != NULL )
|
||||
hal_BufferRelease(&buf_desc);
|
||||
} while (buf_desc != NULL );
|
||||
|
||||
|
||||
do
|
||||
{
|
||||
buf_desc = _thumbDVDecodedList_UnlinkHead();
|
||||
if ( buf_desc != NULL )
|
||||
hal_BufferRelease(&buf_desc);
|
||||
} while (buf_desc != NULL );
|
||||
}
|
||||
|
||||
void thumbDV_dump( char * text, unsigned char * data, unsigned int length ) {
|
||||
unsigned int offset = 0U;
|
||||
unsigned int i;
|
||||
|
|
@ -555,7 +575,8 @@ int thumbDV_decode( int serial_fd, unsigned char * packet_in, short * speech_out
|
|||
|
||||
if ( samples_returned != 160 ) output( "Rate Mismatch expected %d got %d\n", 160, samples_returned );
|
||||
|
||||
safe_free( desc );
|
||||
// safe_free( desc );
|
||||
hal_BufferRelease(&desc);
|
||||
} else {
|
||||
/* Do nothing for now */
|
||||
}
|
||||
|
|
@ -622,7 +643,8 @@ int thumbDV_encode( int serial_fd, short * speech_in, unsigned char * packet_out
|
|||
if ( desc != NULL ) {
|
||||
memcpy( packet_out, desc->buf_ptr + 6, desc->sample_size * ( desc->num_samples - 6 ) );
|
||||
samples_returned = desc->num_samples - 6;
|
||||
safe_free( desc );
|
||||
//safe_free( desc );
|
||||
hal_BufferRelease(&desc);
|
||||
//thumbDV_dump(ANSI_BLUE "Coded Packet" ANSI_WHITE, packet_out, desc->num_samples - 6);
|
||||
|
||||
} else {
|
||||
|
|
|
|||
|
|
@ -44,4 +44,5 @@ int thumbDV_encode( int serial_fd, short * speech_in, unsigned char * packet_out
|
|||
int thumbDV_decode( int serial_fd, unsigned char * packet_in, short * speech_out, uint8 bytes_in_packet );
|
||||
|
||||
void thumbDV_dump( char * text, unsigned char * data, unsigned int length );
|
||||
void thumbDV_flushLists(void);
|
||||
#endif /* THUMBDV_THUMBDV_ */
|
||||
|
|
|
|||
23
DSP_API/Waveform/ThumbDV.cfg
Normal file
23
DSP_API/Waveform/ThumbDV.cfg
Normal file
|
|
@ -0,0 +1,23 @@
|
|||
[header]
|
||||
Name: ThumbDV
|
||||
Version: "0.0.4"
|
||||
Minimum-SmartSDR-Version: 1.4.2.0
|
||||
Author: FlexRadio Systems
|
||||
Support-email: support@flexradio.com
|
||||
Support-phone: 512-535-4713
|
||||
License: GPL7.3
|
||||
Executable: "thumbdv"
|
||||
|
||||
[setup]
|
||||
waveform create name=ThumbDV mode=DSTR underlying_mode=DFM version=0.0.4
|
||||
waveform set ThumbDV tx=1
|
||||
waveform set ThumbDV rx_filter low_cut=-4800
|
||||
waveform set ThumbDV rx_filter high_cut=4800
|
||||
waveform set ThumbDV rx_filter depth=2
|
||||
waveform set ThumbDV tx_filter low_cut=0
|
||||
waveform set ThumbDV tx_filter high_cut=4800
|
||||
waveform set ThumbDV tx_filter depth=2
|
||||
waveform set ThumbDV udpport=5000
|
||||
|
||||
[end]
|
||||
|
||||
BIN
DSP_API/Waveform/ThumbDV.ssdr_waveform
Normal file
BIN
DSP_API/Waveform/ThumbDV.ssdr_waveform
Normal file
Binary file not shown.
|
|
@ -10,6 +10,9 @@ EndProject
|
|||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Vita", "..\..\..\smartsdr-win\Vita\Vita.csproj", "{6ED364FB-7444-44DA-9196-1D8679425B3E}"
|
||||
EndProject
|
||||
Project("{54435603-DBB4-11D2-8724-00A0C9A8B90C}") = "CODEC2_GUI_INSTALLER", "CODEC2_GUI_INSTALLER\CODEC2_GUI_INSTALLER.vdproj", "{AABE6A3C-F038-4448-981F-F68A6D5069C3}"
|
||||
ProjectSection(ProjectDependencies) = postProject
|
||||
{19634B34-7569-4D1D-8182-B10AC27E13FF} = {19634B34-7569-4D1D-8182-B10AC27E13FF}
|
||||
EndProjectSection
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CODEC2 GUI", "CODEC2 GUI\CODEC2 GUI.csproj", "{19634B34-7569-4D1D-8182-B10AC27E13FF}"
|
||||
EndProject
|
||||
|
|
@ -62,6 +65,7 @@ Global
|
|||
{19634B34-7569-4D1D-8182-B10AC27E13FF}.Debug|x86.ActiveCfg = Debug|x86
|
||||
{19634B34-7569-4D1D-8182-B10AC27E13FF}.Debug|x86.Build.0 = Debug|x86
|
||||
{19634B34-7569-4D1D-8182-B10AC27E13FF}.Release|Any CPU.ActiveCfg = Release|x86
|
||||
{19634B34-7569-4D1D-8182-B10AC27E13FF}.Release|Any CPU.Build.0 = Release|x86
|
||||
{19634B34-7569-4D1D-8182-B10AC27E13FF}.Release|x86.ActiveCfg = Release|x86
|
||||
{19634B34-7569-4D1D-8182-B10AC27E13FF}.Release|x86.Build.0 = Release|x86
|
||||
EndGlobalSection
|
||||
|
|
|
|||
|
|
@ -509,7 +509,7 @@ namespace CODEC2_GUI
|
|||
|
||||
AssemblyInfo ai = new AssemblyInfo(Assembly.GetAssembly(typeof(MainForm)));
|
||||
|
||||
string mybasepath = System.IO.Path.Combine(basepath, ai.Company.Replace(' ', '_'), ai.ProductTitle.Replace(' ', '_'));
|
||||
string mybasepath = System.IO.Path.Combine(basepath, ai.Company, ai.ProductTitle);
|
||||
if (!System.IO.Directory.Exists(mybasepath))
|
||||
System.IO.Directory.CreateDirectory(mybasepath);
|
||||
|
||||
|
|
|
|||
|
|
@ -122,6 +122,13 @@ namespace CODEC2_GUI
|
|||
|
||||
void API_RadioRemoved(Radio radio)
|
||||
{
|
||||
_radio.SliceAdded -= _radio_SliceAdded;
|
||||
_radio.SliceRemoved -= _radio_SliceRemoved;
|
||||
|
||||
_radio.Disconnect();
|
||||
|
||||
_radio = null;
|
||||
_radioConnected = false;
|
||||
}
|
||||
|
||||
//*************************************
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@ using System.Runtime.InteropServices;
|
|||
// General Information about an assembly is controlled through the following
|
||||
// set of attributes. Change these attribute values to modify the information
|
||||
// associated with an assembly.
|
||||
[assembly: AssemblyTitle("ThumbDV VODEC GUI")]
|
||||
[assembly: AssemblyTitle("ThumbDV DSTAR GUI")]
|
||||
[assembly: AssemblyDescription("")]
|
||||
[assembly: AssemblyConfiguration("")]
|
||||
[assembly: AssemblyCompany("FlexRadio Systems")]
|
||||
|
|
|
|||
|
|
@ -255,7 +255,7 @@ namespace CODEC2_GUI
|
|||
StringBuilder sb = new StringBuilder();
|
||||
bool msg2snd = (messageInfo != null && messageSent == false);
|
||||
// log info if we get header for third time or finally got message
|
||||
bool hdr2snd = (headerInfo != null && headerSent == false && (headerCount > 3 || msg2snd));
|
||||
bool hdr2snd = (headerInfo != null && headerSent == false && (headerCount > 0 || msg2snd));
|
||||
if (hdr2snd || msg2snd)
|
||||
sb.Append(DateTime.UtcNow.ToString("yyyy-MM-dd HH:mm:ss"));
|
||||
if (hdr2snd)
|
||||
|
|
|
|||
|
|
@ -13,6 +13,24 @@
|
|||
"SccProvider" = "8:"
|
||||
"Hierarchy"
|
||||
{
|
||||
"Entry"
|
||||
{
|
||||
"MsmKey" = "8:_0766D6B5F67085FA6951B8F3A110AC52"
|
||||
"OwnerKey" = "8:_6B67ECD422687C0C1F634130CF5E98FB"
|
||||
"MsmSig" = "8:_UNDEFINED"
|
||||
}
|
||||
"Entry"
|
||||
{
|
||||
"MsmKey" = "8:_0766D6B5F67085FA6951B8F3A110AC52"
|
||||
"OwnerKey" = "8:_52F2E5C82F5A468DB0A14958DABC010C"
|
||||
"MsmSig" = "8:_UNDEFINED"
|
||||
}
|
||||
"Entry"
|
||||
{
|
||||
"MsmKey" = "8:_37A07FD6839A484AB728FA94B1083955"
|
||||
"OwnerKey" = "8:_UNDEFINED"
|
||||
"MsmSig" = "8:_UNDEFINED"
|
||||
}
|
||||
"Entry"
|
||||
{
|
||||
"MsmKey" = "8:_44FE594CB4324BE091F300EB9369B6CC"
|
||||
|
|
@ -21,14 +39,62 @@
|
|||
}
|
||||
"Entry"
|
||||
{
|
||||
"MsmKey" = "8:_52F2E5C82F5A468DB0A14958DABC010C"
|
||||
"OwnerKey" = "8:_UNDEFINED"
|
||||
"MsmSig" = "8:_UNDEFINED"
|
||||
}
|
||||
"Entry"
|
||||
{
|
||||
"MsmKey" = "8:_5841366F13AC47E5B678DCF7F7152F4E"
|
||||
"OwnerKey" = "8:_UNDEFINED"
|
||||
"MsmSig" = "8:_UNDEFINED"
|
||||
}
|
||||
"Entry"
|
||||
{
|
||||
"MsmKey" = "8:_88C1D5A632F74D7EBC8A5FDC131505EE"
|
||||
"OwnerKey" = "8:_UNDEFINED"
|
||||
"MsmKey" = "8:_6B67ECD422687C0C1F634130CF5E98FB"
|
||||
"OwnerKey" = "8:_52F2E5C82F5A468DB0A14958DABC010C"
|
||||
"MsmSig" = "8:_UNDEFINED"
|
||||
}
|
||||
"Entry"
|
||||
{
|
||||
"MsmKey" = "8:_BF7C891FD48893917AC2212F0D71946D"
|
||||
"OwnerKey" = "8:_6B67ECD422687C0C1F634130CF5E98FB"
|
||||
"MsmSig" = "8:_UNDEFINED"
|
||||
}
|
||||
"Entry"
|
||||
{
|
||||
"MsmKey" = "8:_BF7C891FD48893917AC2212F0D71946D"
|
||||
"OwnerKey" = "8:_52F2E5C82F5A468DB0A14958DABC010C"
|
||||
"MsmSig" = "8:_UNDEFINED"
|
||||
}
|
||||
"Entry"
|
||||
{
|
||||
"MsmKey" = "8:_BF7C891FD48893917AC2212F0D71946D"
|
||||
"OwnerKey" = "8:_E01867FA37CD77344818571B20736D3B"
|
||||
"MsmSig" = "8:_UNDEFINED"
|
||||
}
|
||||
"Entry"
|
||||
{
|
||||
"MsmKey" = "8:_DCE4F5BEF3314462167194E11CDFA3C0"
|
||||
"OwnerKey" = "8:_6B67ECD422687C0C1F634130CF5E98FB"
|
||||
"MsmSig" = "8:_UNDEFINED"
|
||||
}
|
||||
"Entry"
|
||||
{
|
||||
"MsmKey" = "8:_DCE4F5BEF3314462167194E11CDFA3C0"
|
||||
"OwnerKey" = "8:_52F2E5C82F5A468DB0A14958DABC010C"
|
||||
"MsmSig" = "8:_UNDEFINED"
|
||||
}
|
||||
"Entry"
|
||||
{
|
||||
"MsmKey" = "8:_E01867FA37CD77344818571B20736D3B"
|
||||
"OwnerKey" = "8:_6B67ECD422687C0C1F634130CF5E98FB"
|
||||
"MsmSig" = "8:_UNDEFINED"
|
||||
}
|
||||
"Entry"
|
||||
{
|
||||
"MsmKey" = "8:_E01867FA37CD77344818571B20736D3B"
|
||||
"OwnerKey" = "8:_52F2E5C82F5A468DB0A14958DABC010C"
|
||||
"MsmSig" = "8:_UNDEFINED"
|
||||
}
|
||||
"Entry"
|
||||
|
|
@ -37,6 +103,42 @@
|
|||
"OwnerKey" = "8:_UNDEFINED"
|
||||
"MsmSig" = "8:_UNDEFINED"
|
||||
}
|
||||
"Entry"
|
||||
{
|
||||
"MsmKey" = "8:_UNDEFINED"
|
||||
"OwnerKey" = "8:_52F2E5C82F5A468DB0A14958DABC010C"
|
||||
"MsmSig" = "8:_UNDEFINED"
|
||||
}
|
||||
"Entry"
|
||||
{
|
||||
"MsmKey" = "8:_UNDEFINED"
|
||||
"OwnerKey" = "8:_6B67ECD422687C0C1F634130CF5E98FB"
|
||||
"MsmSig" = "8:_UNDEFINED"
|
||||
}
|
||||
"Entry"
|
||||
{
|
||||
"MsmKey" = "8:_UNDEFINED"
|
||||
"OwnerKey" = "8:_0766D6B5F67085FA6951B8F3A110AC52"
|
||||
"MsmSig" = "8:_UNDEFINED"
|
||||
}
|
||||
"Entry"
|
||||
{
|
||||
"MsmKey" = "8:_UNDEFINED"
|
||||
"OwnerKey" = "8:_E01867FA37CD77344818571B20736D3B"
|
||||
"MsmSig" = "8:_UNDEFINED"
|
||||
}
|
||||
"Entry"
|
||||
{
|
||||
"MsmKey" = "8:_UNDEFINED"
|
||||
"OwnerKey" = "8:_BF7C891FD48893917AC2212F0D71946D"
|
||||
"MsmSig" = "8:_UNDEFINED"
|
||||
}
|
||||
"Entry"
|
||||
{
|
||||
"MsmKey" = "8:_UNDEFINED"
|
||||
"OwnerKey" = "8:_DCE4F5BEF3314462167194E11CDFA3C0"
|
||||
"MsmSig" = "8:_UNDEFINED"
|
||||
}
|
||||
}
|
||||
"Configurations"
|
||||
{
|
||||
|
|
@ -62,6 +164,19 @@
|
|||
"PrerequisitesLocation" = "2:1"
|
||||
"Url" = "8:"
|
||||
"ComponentsUrl" = "8:"
|
||||
"Items"
|
||||
{
|
||||
"{EDC2488A-8267-493A-A98E-7D9C3B36CDF3}:.NETFramework,Version=v4.0,Profile=Client"
|
||||
{
|
||||
"Name" = "8:Microsoft .NET Framework 4 Client Profile (x86 and x64)"
|
||||
"ProductCode" = "8:.NETFramework,Version=v4.0,Profile=Client"
|
||||
}
|
||||
"{EDC2488A-8267-493A-A98E-7D9C3B36CDF3}:Microsoft.Windows.Installer.3.1"
|
||||
{
|
||||
"Name" = "8:Windows Installer 3.1"
|
||||
"ProductCode" = "8:Microsoft.Windows.Installer.3.1"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
"Release"
|
||||
|
|
@ -69,7 +184,7 @@
|
|||
"DisplayName" = "8:Release"
|
||||
"IsDebugOnly" = "11:FALSE"
|
||||
"IsReleaseOnly" = "11:TRUE"
|
||||
"OutputFilename" = "8:Release\\FreeDV.msi"
|
||||
"OutputFilename" = "8:Release\\ThumbDV_DSTAR.msi"
|
||||
"PackageFilesAs" = "3:2"
|
||||
"PackageFileSize" = "3:-2147483648"
|
||||
"CabType" = "3:1"
|
||||
|
|
@ -86,6 +201,19 @@
|
|||
"PrerequisitesLocation" = "2:1"
|
||||
"Url" = "8:"
|
||||
"ComponentsUrl" = "8:"
|
||||
"Items"
|
||||
{
|
||||
"{EDC2488A-8267-493A-A98E-7D9C3B36CDF3}:.NETFramework,Version=v4.0,Profile=Client"
|
||||
{
|
||||
"Name" = "8:Microsoft .NET Framework 4 Client Profile (x86 and x64)"
|
||||
"ProductCode" = "8:.NETFramework,Version=v4.0,Profile=Client"
|
||||
}
|
||||
"{EDC2488A-8267-493A-A98E-7D9C3B36CDF3}:Microsoft.Windows.Installer.3.1"
|
||||
{
|
||||
"Name" = "8:Windows Installer 3.1"
|
||||
"ProductCode" = "8:Microsoft.Windows.Installer.3.1"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -116,6 +244,57 @@
|
|||
}
|
||||
"File"
|
||||
{
|
||||
"{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_0766D6B5F67085FA6951B8F3A110AC52"
|
||||
{
|
||||
"AssemblyRegister" = "3:1"
|
||||
"AssemblyIsInGAC" = "11:FALSE"
|
||||
"AssemblyAsmDisplayName" = "8:Flex.UiWpfFramework, Version=1.0.1.24789, Culture=neutral, processorArchitecture=MSIL"
|
||||
"ScatterAssemblies"
|
||||
{
|
||||
"_0766D6B5F67085FA6951B8F3A110AC52"
|
||||
{
|
||||
"Name" = "8:Flex.UiWpfFramework.dll"
|
||||
"Attributes" = "3:512"
|
||||
}
|
||||
}
|
||||
"SourcePath" = "8:Flex.UiWpfFramework.dll"
|
||||
"TargetName" = "8:"
|
||||
"Tag" = "8:"
|
||||
"Folder" = "8:_40196D409E904F29B144A3CC2149E747"
|
||||
"Condition" = "8:"
|
||||
"Transitive" = "11:FALSE"
|
||||
"Vital" = "11:TRUE"
|
||||
"ReadOnly" = "11:FALSE"
|
||||
"Hidden" = "11:FALSE"
|
||||
"System" = "11:FALSE"
|
||||
"Permanent" = "11:FALSE"
|
||||
"SharedLegacy" = "11:FALSE"
|
||||
"PackageAs" = "3:1"
|
||||
"Register" = "3:1"
|
||||
"Exclude" = "11:FALSE"
|
||||
"IsDependency" = "11:TRUE"
|
||||
"IsolateTo" = "8:"
|
||||
}
|
||||
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_37A07FD6839A484AB728FA94B1083955"
|
||||
{
|
||||
"SourcePath" = "8:..\\..\\..\\..\\..\\ThumbDV.ssdr_waveform"
|
||||
"TargetName" = "8:ThumbDV.ssdr_waveform"
|
||||
"Tag" = "8:"
|
||||
"Folder" = "8:_377DE1BBED84443D8A1631B8496FDC4E"
|
||||
"Condition" = "8:"
|
||||
"Transitive" = "11:FALSE"
|
||||
"Vital" = "11:TRUE"
|
||||
"ReadOnly" = "11:FALSE"
|
||||
"Hidden" = "11:FALSE"
|
||||
"System" = "11:FALSE"
|
||||
"Permanent" = "11:FALSE"
|
||||
"SharedLegacy" = "11:FALSE"
|
||||
"PackageAs" = "3:1"
|
||||
"Register" = "3:1"
|
||||
"Exclude" = "11:FALSE"
|
||||
"IsDependency" = "11:FALSE"
|
||||
"IsolateTo" = "8:"
|
||||
}
|
||||
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_44FE594CB4324BE091F300EB9369B6CC"
|
||||
{
|
||||
"SourcePath" = "8:..\\CODEC2 GUI\\Images\\FDVLogo.ico"
|
||||
|
|
@ -156,12 +335,23 @@
|
|||
"IsDependency" = "11:FALSE"
|
||||
"IsolateTo" = "8:"
|
||||
}
|
||||
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_88C1D5A632F74D7EBC8A5FDC131505EE"
|
||||
"{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_6B67ECD422687C0C1F634130CF5E98FB"
|
||||
{
|
||||
"SourcePath" = "8:FreeDV_Release.ssdr_waveform"
|
||||
"TargetName" = "8:FreeDV_Release.ssdr_waveform"
|
||||
"AssemblyRegister" = "3:1"
|
||||
"AssemblyIsInGAC" = "11:FALSE"
|
||||
"AssemblyAsmDisplayName" = "8:FlexLib, Version=1.4.23.24790, Culture=neutral, processorArchitecture=MSIL"
|
||||
"ScatterAssemblies"
|
||||
{
|
||||
"_6B67ECD422687C0C1F634130CF5E98FB"
|
||||
{
|
||||
"Name" = "8:FlexLib.dll"
|
||||
"Attributes" = "3:512"
|
||||
}
|
||||
}
|
||||
"SourcePath" = "8:FlexLib.dll"
|
||||
"TargetName" = "8:"
|
||||
"Tag" = "8:"
|
||||
"Folder" = "8:_377DE1BBED84443D8A1631B8496FDC4E"
|
||||
"Folder" = "8:_40196D409E904F29B144A3CC2149E747"
|
||||
"Condition" = "8:"
|
||||
"Transitive" = "11:FALSE"
|
||||
"Vital" = "11:TRUE"
|
||||
|
|
@ -173,7 +363,100 @@
|
|||
"PackageAs" = "3:1"
|
||||
"Register" = "3:1"
|
||||
"Exclude" = "11:FALSE"
|
||||
"IsDependency" = "11:FALSE"
|
||||
"IsDependency" = "11:TRUE"
|
||||
"IsolateTo" = "8:"
|
||||
}
|
||||
"{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_BF7C891FD48893917AC2212F0D71946D"
|
||||
{
|
||||
"AssemblyRegister" = "3:1"
|
||||
"AssemblyIsInGAC" = "11:FALSE"
|
||||
"AssemblyAsmDisplayName" = "8:Util, Version=1.0.1.24789, Culture=neutral, processorArchitecture=MSIL"
|
||||
"ScatterAssemblies"
|
||||
{
|
||||
"_BF7C891FD48893917AC2212F0D71946D"
|
||||
{
|
||||
"Name" = "8:Util.dll"
|
||||
"Attributes" = "3:512"
|
||||
}
|
||||
}
|
||||
"SourcePath" = "8:Util.dll"
|
||||
"TargetName" = "8:"
|
||||
"Tag" = "8:"
|
||||
"Folder" = "8:_40196D409E904F29B144A3CC2149E747"
|
||||
"Condition" = "8:"
|
||||
"Transitive" = "11:FALSE"
|
||||
"Vital" = "11:TRUE"
|
||||
"ReadOnly" = "11:FALSE"
|
||||
"Hidden" = "11:FALSE"
|
||||
"System" = "11:FALSE"
|
||||
"Permanent" = "11:FALSE"
|
||||
"SharedLegacy" = "11:FALSE"
|
||||
"PackageAs" = "3:1"
|
||||
"Register" = "3:1"
|
||||
"Exclude" = "11:FALSE"
|
||||
"IsDependency" = "11:TRUE"
|
||||
"IsolateTo" = "8:"
|
||||
}
|
||||
"{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_DCE4F5BEF3314462167194E11CDFA3C0"
|
||||
{
|
||||
"AssemblyRegister" = "3:1"
|
||||
"AssemblyIsInGAC" = "11:FALSE"
|
||||
"AssemblyAsmDisplayName" = "8:Ionic.Zip, Version=1.9.1.8, Culture=neutral, PublicKeyToken=edbe51ad942a3f5c, processorArchitecture=MSIL"
|
||||
"ScatterAssemblies"
|
||||
{
|
||||
"_DCE4F5BEF3314462167194E11CDFA3C0"
|
||||
{
|
||||
"Name" = "8:Ionic.Zip.dll"
|
||||
"Attributes" = "3:512"
|
||||
}
|
||||
}
|
||||
"SourcePath" = "8:Ionic.Zip.dll"
|
||||
"TargetName" = "8:"
|
||||
"Tag" = "8:"
|
||||
"Folder" = "8:_40196D409E904F29B144A3CC2149E747"
|
||||
"Condition" = "8:"
|
||||
"Transitive" = "11:FALSE"
|
||||
"Vital" = "11:TRUE"
|
||||
"ReadOnly" = "11:FALSE"
|
||||
"Hidden" = "11:FALSE"
|
||||
"System" = "11:FALSE"
|
||||
"Permanent" = "11:FALSE"
|
||||
"SharedLegacy" = "11:FALSE"
|
||||
"PackageAs" = "3:1"
|
||||
"Register" = "3:1"
|
||||
"Exclude" = "11:FALSE"
|
||||
"IsDependency" = "11:TRUE"
|
||||
"IsolateTo" = "8:"
|
||||
}
|
||||
"{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_E01867FA37CD77344818571B20736D3B"
|
||||
{
|
||||
"AssemblyRegister" = "3:1"
|
||||
"AssemblyIsInGAC" = "11:FALSE"
|
||||
"AssemblyAsmDisplayName" = "8:Vita, Version=1.0.1.24789, Culture=neutral, processorArchitecture=MSIL"
|
||||
"ScatterAssemblies"
|
||||
{
|
||||
"_E01867FA37CD77344818571B20736D3B"
|
||||
{
|
||||
"Name" = "8:Vita.dll"
|
||||
"Attributes" = "3:512"
|
||||
}
|
||||
}
|
||||
"SourcePath" = "8:Vita.dll"
|
||||
"TargetName" = "8:"
|
||||
"Tag" = "8:"
|
||||
"Folder" = "8:_40196D409E904F29B144A3CC2149E747"
|
||||
"Condition" = "8:"
|
||||
"Transitive" = "11:FALSE"
|
||||
"Vital" = "11:TRUE"
|
||||
"ReadOnly" = "11:FALSE"
|
||||
"Hidden" = "11:FALSE"
|
||||
"System" = "11:FALSE"
|
||||
"Permanent" = "11:FALSE"
|
||||
"SharedLegacy" = "11:FALSE"
|
||||
"PackageAs" = "3:1"
|
||||
"Register" = "3:1"
|
||||
"Exclude" = "11:FALSE"
|
||||
"IsDependency" = "11:TRUE"
|
||||
"IsolateTo" = "8:"
|
||||
}
|
||||
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_F5493E84A58F4E0D993B24BAD4694555"
|
||||
|
|
@ -284,20 +567,20 @@
|
|||
"Product"
|
||||
{
|
||||
"Name" = "8:Microsoft Visual Studio"
|
||||
"ProductName" = "8:FreeDV"
|
||||
"ProductCode" = "8:{31966E85-47C4-49D4-80B5-3051D960ADC0}"
|
||||
"PackageCode" = "8:{4151C606-CE2E-419B-B8A3-5EA149790371}"
|
||||
"UpgradeCode" = "8:{BA448748-24DA-43CE-BAA7-FC4F549589E8}"
|
||||
"ProductName" = "8:ThumbDV DSTAR"
|
||||
"ProductCode" = "8:{0A72FD89-CF75-4368-8DCF-20719A4EF565}"
|
||||
"PackageCode" = "8:{7B138403-B258-48E4-9991-7DDD5FFDFC50}"
|
||||
"UpgradeCode" = "8:{A727F8A2-D15B-45F4-9728-19541BB04667}"
|
||||
"AspNetVersion" = "8:4.0.30319.0"
|
||||
"RestartWWWService" = "11:FALSE"
|
||||
"RemovePreviousVersions" = "11:TRUE"
|
||||
"DetectNewerInstalledVersion" = "11:TRUE"
|
||||
"InstallAllUsers" = "11:TRUE"
|
||||
"ProductVersion" = "8:1.0.0"
|
||||
"ProductVersion" = "8:1.0.4"
|
||||
"Manufacturer" = "8:FlexRadio Systems"
|
||||
"ARPHELPTELEPHONE" = "8:"
|
||||
"ARPHELPLINK" = "8:"
|
||||
"Title" = "8:FreeDV"
|
||||
"Title" = "8:ThumbDV DSTAR"
|
||||
"Subject" = "8:"
|
||||
"ARPCONTACT" = "8:"
|
||||
"Keywords" = "8:"
|
||||
|
|
@ -406,32 +689,18 @@
|
|||
}
|
||||
"Shortcut"
|
||||
{
|
||||
"{970C0BB2-C7D0-45D7-ABFA-7EC378858BC0}:_1AA7F5078E9B42FB8E16D82998B06E10"
|
||||
"{970C0BB2-C7D0-45D7-ABFA-7EC378858BC0}:_0CB4C29272694A3C8B3AD5BF0F25047C"
|
||||
{
|
||||
"Name" = "8:FreeDV"
|
||||
"Name" = "8:ThumbDV DSTAR"
|
||||
"Arguments" = "8:"
|
||||
"Description" = "8:"
|
||||
"ShowCmd" = "3:1"
|
||||
"IconIndex" = "3:0"
|
||||
"Transitive" = "11:FALSE"
|
||||
"Target" = "8:"
|
||||
"Folder" = "8:_28A6D54432764B34ABC7E36F336A6762"
|
||||
"WorkingFolder" = "8:_40196D409E904F29B144A3CC2149E747"
|
||||
"Icon" = "8:_44FE594CB4324BE091F300EB9369B6CC"
|
||||
"Feature" = "8:"
|
||||
}
|
||||
"{970C0BB2-C7D0-45D7-ABFA-7EC378858BC0}:_A4D147B0B4B04223B55728F898826A49"
|
||||
{
|
||||
"Name" = "8:CODEC2 GUI"
|
||||
"Arguments" = "8:"
|
||||
"Description" = "8:"
|
||||
"ShowCmd" = "3:1"
|
||||
"IconIndex" = "3:0"
|
||||
"Transitive" = "11:FALSE"
|
||||
"Target" = "8:"
|
||||
"Target" = "8:_52F2E5C82F5A468DB0A14958DABC010C"
|
||||
"Folder" = "8:_01E98CA335E74C1385F704CA49E431C5"
|
||||
"WorkingFolder" = "8:_40196D409E904F29B144A3CC2149E747"
|
||||
"Icon" = "8:_44FE594CB4324BE091F300EB9369B6CC"
|
||||
"Icon" = "8:"
|
||||
"Feature" = "8:"
|
||||
}
|
||||
}
|
||||
|
|
@ -833,6 +1102,34 @@
|
|||
}
|
||||
"ProjectOutput"
|
||||
{
|
||||
"{5259A561-127C-4D43-A0A1-72F10C7B3BF8}:_52F2E5C82F5A468DB0A14958DABC010C"
|
||||
{
|
||||
"SourcePath" = "8:..\\CODEC2 GUI\\obj\\x86\\Release\\ThumbDV_DSTAR_GUI.exe"
|
||||
"TargetName" = "8:"
|
||||
"Tag" = "8:"
|
||||
"Folder" = "8:_40196D409E904F29B144A3CC2149E747"
|
||||
"Condition" = "8:"
|
||||
"Transitive" = "11:FALSE"
|
||||
"Vital" = "11:TRUE"
|
||||
"ReadOnly" = "11:FALSE"
|
||||
"Hidden" = "11:FALSE"
|
||||
"System" = "11:FALSE"
|
||||
"Permanent" = "11:FALSE"
|
||||
"SharedLegacy" = "11:FALSE"
|
||||
"PackageAs" = "3:1"
|
||||
"Register" = "3:1"
|
||||
"Exclude" = "11:FALSE"
|
||||
"IsDependency" = "11:FALSE"
|
||||
"IsolateTo" = "8:"
|
||||
"ProjectOutputGroupRegister" = "3:1"
|
||||
"OutputConfiguration" = "8:"
|
||||
"OutputGroupCanonicalName" = "8:Built"
|
||||
"OutputProjectGuid" = "8:{19634B34-7569-4D1D-8182-B10AC27E13FF}"
|
||||
"ShowKeyOutput" = "11:TRUE"
|
||||
"ExcludeFilters"
|
||||
{
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
;
|
||||
|
||||
#define MyAppName "Flex DSTAR Waveform"
|
||||
#define MyAppName "FlexRadio DSTAR Waveform"
|
||||
#define MyAppVersion "1.4.0.3"
|
||||
#define MyAppPublisher "FlexRadio Systems, LLC"
|
||||
#define MyAppURL "http://www.flexradio.com/"
|
||||
|
|
@ -18,9 +18,9 @@ AppSupportURL={#MyAppURL}
|
|||
AppUpdatesURL={#MyAppURL}
|
||||
DefaultDirName=FlexRadio Systems\ThumbDV DSTAR
|
||||
DisableDirPage=yes
|
||||
DefaultGroupName=Flex DSTAR Waveform
|
||||
DefaultGroupName=FlexRadio DSTAR Waveform
|
||||
DisableProgramGroupPage=yes
|
||||
OutputBaseFilename=FlexDSTARWaveform
|
||||
OutputBaseFilename=FlexRadioDSTARWaveform
|
||||
SetupIconFile=..\CODEC2 GUI\Images\dstar.ico
|
||||
Compression=lzma
|
||||
SolidCompression=yes
|
||||
|
|
@ -39,7 +39,7 @@ Source: "..\CODEC2 GUI\bin\x86\Release\FlexLib.dll"; DestDir: "{app}"; Flags: ig
|
|||
Source: "..\CODEC2 GUI\bin\x86\Release\Ionic.Zip.dll"; DestDir: "{app}"; Flags: ignoreversion
|
||||
Source: "..\CODEC2 GUI\bin\x86\Release\Util.dll"; DestDir: "{app}"; Flags: ignoreversion
|
||||
Source: "..\CODEC2 GUI\bin\x86\Release\Vita.dll"; DestDir: "{app}"; Flags: ignoreversion
|
||||
Source: "..\..\..\DSP_API\ThumbDV_Release\ThumbDV.ssdr_waveform"; DestDir: {userappdata}\FlexRadio Systems\Waveforms; Flags: ignoreversion
|
||||
Source: "..\..\..\DSP_API\Waveform\ThumbDV.ssdr_waveform"; DestDir: "{userappdata}\FlexRadio Systems\Waveforms\"; Flags: ignoreversion
|
||||
; NOTE: Don't use "Flags: ignoreversion" on any shared system files
|
||||
|
||||
[Icons]
|
||||
|
|
|
|||
Loading…
Reference in a new issue