Merge pull request #4 from n5ac/thumbDV_support

Thumb dv support
This commit is contained in:
Mark Hanson 2015-09-03 16:15:06 -04:00
commit d5b39e2b7d
19 changed files with 587 additions and 62 deletions

View file

@ -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

View file

@ -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
*/

View file

@ -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);

View file

@ -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 );

View file

@ -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 {

View file

@ -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 );
}

View file

@ -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 );

View file

@ -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;
}

View file

@ -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 {

View file

@ -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_ */

View 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]

Binary file not shown.

View file

@ -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

View file

@ -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);

View file

@ -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;
}
//*************************************

View file

@ -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")]

View file

@ -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)

View file

@ -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"
{
}
}
}
}
}

View file

@ -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]