mirror of
https://github.com/dj0abr/SSB_HighSpeed_Modem.git
synced 2024-11-22 12:19:49 -05:00
update
This commit is contained in:
parent
c8c377468f
commit
16ad58483c
Binary file not shown.
BIN
WinRelease/oscardata.exe
Executable file
BIN
WinRelease/oscardata.exe
Executable file
Binary file not shown.
@ -89,18 +89,20 @@ void init_packer()
|
|||||||
// the payload has a size of PAYLOADLEN
|
// the payload has a size of PAYLOADLEN
|
||||||
// type ... inserted in the "frame type information" field
|
// type ... inserted in the "frame type information" field
|
||||||
// status ... specifies first/last frame of a data stream
|
// status ... specifies first/last frame of a data stream
|
||||||
uint8_t *Pack(uint8_t *payload, int type, int status, int *plen)
|
// repeat ... 0=normal frame, 1=repeated frame (do not increment frame counter)
|
||||||
|
uint8_t *Pack(uint8_t *payload, int type, int status, int *plen, int repeat)
|
||||||
{
|
{
|
||||||
FRAME frame; // raw frame without fec
|
FRAME frame; // raw frame without fec
|
||||||
|
|
||||||
// polulate the raw frame
|
// polulate the raw frame
|
||||||
|
|
||||||
// make the frame counter
|
// make the frame counter
|
||||||
if(status == 0)
|
if(repeat == 0 || type == 1) // 1=BER test
|
||||||
framecounter = 0; // first block of a stream
|
|
||||||
else
|
|
||||||
framecounter++;
|
framecounter++;
|
||||||
|
|
||||||
|
if (status == 0)
|
||||||
|
framecounter = 0; // start of file
|
||||||
|
|
||||||
// insert frame counter and status bits
|
// insert frame counter and status bits
|
||||||
frame.counter_LSB = framecounter & 0xff;
|
frame.counter_LSB = framecounter & 0xff;
|
||||||
int framecnt_MSB = (framecounter >> 8) & 0x03; // Bit 8+9 of framecounter
|
int framecnt_MSB = (framecounter >> 8) & 0x03; // Bit 8+9 of framecounter
|
||||||
@ -108,6 +110,8 @@ uint8_t *Pack(uint8_t *payload, int type, int status, int *plen)
|
|||||||
frame.status += ((status & 0x03)<<4);
|
frame.status += ((status & 0x03)<<4);
|
||||||
frame.status += (type & 0x0f);
|
frame.status += (type & 0x0f);
|
||||||
|
|
||||||
|
//printf("type:%d stat:%d frmnum:%d fifo:%d\n", type, status, framecounter, io_pb_fifo_freespace(0));
|
||||||
|
|
||||||
// insert the payload
|
// insert the payload
|
||||||
memcpy(frame.payload, payload, PAYLOADLEN);
|
memcpy(frame.payload, payload, PAYLOADLEN);
|
||||||
|
|
||||||
@ -344,8 +348,8 @@ uint8_t *getPayload(uint8_t *rxb)
|
|||||||
payload[4] = rx_status; // frame lost information
|
payload[4] = rx_status; // frame lost information
|
||||||
payload[5] = speed >> 8; // measured line speed
|
payload[5] = speed >> 8; // measured line speed
|
||||||
payload[6] = speed;
|
payload[6] = speed;
|
||||||
payload[7] = maxLevel; // actual max level on sound capture in %
|
payload[7] = 0; // free for later use
|
||||||
payload[8] = 0; // free for later use
|
payload[8] = 0;
|
||||||
payload[9] = 0;
|
payload[9] = 0;
|
||||||
|
|
||||||
//printf("Frame no.: %d, type:%d, minfo:%d\n",framenumrx,payload[0],payload[3]);
|
//printf("Frame no.: %d, type:%d, minfo:%d\n",framenumrx,payload[0],payload[3]);
|
||||||
|
@ -36,7 +36,6 @@
|
|||||||
|
|
||||||
#include "hsmodem.h"
|
#include "hsmodem.h"
|
||||||
|
|
||||||
void toGR_sendData(uint8_t* data, int type, int status);
|
|
||||||
void bc_rxdata(uint8_t* pdata, int len, struct sockaddr_in* rxsock);
|
void bc_rxdata(uint8_t* pdata, int len, struct sockaddr_in* rxsock);
|
||||||
void appdata_rxdata(uint8_t* pdata, int len, struct sockaddr_in* rxsock);
|
void appdata_rxdata(uint8_t* pdata, int len, struct sockaddr_in* rxsock);
|
||||||
void startModem();
|
void startModem();
|
||||||
@ -90,6 +89,8 @@ int codec = 1; // 0=opus, 1=codec2
|
|||||||
int init_audio_result = 0;
|
int init_audio_result = 0;
|
||||||
int init_voice_result = 0;
|
int init_voice_result = 0;
|
||||||
|
|
||||||
|
int safemode = 0;
|
||||||
|
|
||||||
int main(int argc, char* argv[])
|
int main(int argc, char* argv[])
|
||||||
{
|
{
|
||||||
int opt = 0;
|
int opt = 0;
|
||||||
@ -300,7 +301,8 @@ void bc_rxdata(uint8_t* pdata, int len, struct sockaddr_in* rxsock)
|
|||||||
* 3 ... announcement on / off, duration
|
* 3 ... announcement on / off, duration
|
||||||
* 4 ... DV loudspeaker volume
|
* 4 ... DV loudspeaker volume
|
||||||
* 5 ... DV mic volume
|
* 5 ... DV mic volume
|
||||||
* 6..9 ... unused
|
* 6 ... safe mode number
|
||||||
|
* 7..9 ... unused
|
||||||
* 10 .. 109 ... PB device name
|
* 10 .. 109 ... PB device name
|
||||||
* 110 .. 209 ... CAP device name
|
* 110 .. 209 ... CAP device name
|
||||||
*/
|
*/
|
||||||
@ -308,6 +310,8 @@ void bc_rxdata(uint8_t* pdata, int len, struct sockaddr_in* rxsock)
|
|||||||
//printf("%d %d %d %d %d %d %d \n",pdata[1], pdata[2], pdata[3], pdata[4], pdata[5], pdata[6], pdata[7]);
|
//printf("%d %d %d %d %d %d %d \n",pdata[1], pdata[2], pdata[3], pdata[4], pdata[5], pdata[6], pdata[7]);
|
||||||
io_setAudioDevices(pdata[1], pdata[2], pdata[3], pdata[4], pdata[5], (char *)(pdata + 10), (char *)(pdata + 110));
|
io_setAudioDevices(pdata[1], pdata[2], pdata[3], pdata[4], pdata[5], (char *)(pdata + 10), (char *)(pdata + 110));
|
||||||
|
|
||||||
|
safemode = pdata[6];
|
||||||
|
|
||||||
char rxip[20];
|
char rxip[20];
|
||||||
strcpy(rxip, inet_ntoa(rxsock->sin_addr));
|
strcpy(rxip, inet_ntoa(rxsock->sin_addr));
|
||||||
|
|
||||||
@ -474,13 +478,14 @@ void appdata_rxdata(uint8_t* pdata, int len, struct sockaddr_in* rxsock)
|
|||||||
closeAllandTerminate();
|
closeAllandTerminate();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// here we are with payload data to be sent via the modulator
|
||||||
|
|
||||||
if (len != (PAYLOADLEN + 2))
|
if (len != (PAYLOADLEN + 2))
|
||||||
{
|
{
|
||||||
printf("data from app: wrong length:%d (should be %d)\n", len - 2, PAYLOADLEN);
|
printf("data from app: wrong length:%d (should be %d)\n", len - 2, PAYLOADLEN);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//if (getSending() == 1) return; // already sending (Array sending)
|
//if (getSending() == 1) return; // already sending (Array sending)
|
||||||
|
|
||||||
if (minfo == 0 || minfo == 3)
|
if (minfo == 0 || minfo == 3)
|
||||||
@ -493,9 +498,10 @@ void appdata_rxdata(uint8_t* pdata, int len, struct sockaddr_in* rxsock)
|
|||||||
// and bits: symbols * bitsPerSymbol
|
// and bits: symbols * bitsPerSymbol
|
||||||
// and bytes/second: bits/8 = (caprate/txinterpolfactor) * bitsPerSymbol / 8
|
// and bytes/second: bits/8 = (caprate/txinterpolfactor) * bitsPerSymbol / 8
|
||||||
// one frame has 258 bytes, so we need for 6s: 6* ((caprate/txinterpolfactor) * bitsPerSymbol / 8) /258 + 1 frames
|
// one frame has 258 bytes, so we need for 6s: 6* ((caprate/txinterpolfactor) * bitsPerSymbol / 8) /258 + 1 frames
|
||||||
|
toGR_sendData(pdata + 2, type, minfo,0);
|
||||||
int numframespreamble = 6 * ((caprate / txinterpolfactor) * bitsPerSymbol / 8) / 258 + 1;
|
int numframespreamble = 6 * ((caprate / txinterpolfactor) * bitsPerSymbol / 8) / 258 + 1;
|
||||||
for (int i = 0; i < numframespreamble; i++)
|
for (int i = 0; i < numframespreamble; i++)
|
||||||
toGR_sendData(pdata + 2, type, minfo);
|
toGR_sendData(pdata + 2, type, minfo,1);
|
||||||
}
|
}
|
||||||
else if ((len - 2) < PAYLOADLEN)
|
else if ((len - 2) < PAYLOADLEN)
|
||||||
{
|
{
|
||||||
@ -503,18 +509,41 @@ void appdata_rxdata(uint8_t* pdata, int len, struct sockaddr_in* rxsock)
|
|||||||
uint8_t payload[PAYLOADLEN];
|
uint8_t payload[PAYLOADLEN];
|
||||||
memset(payload, 0, PAYLOADLEN);
|
memset(payload, 0, PAYLOADLEN);
|
||||||
memcpy(payload, pdata + 2, len - 2);
|
memcpy(payload, pdata + 2, len - 2);
|
||||||
toGR_sendData(payload, type, minfo);
|
toGR_sendData(payload, type, minfo,0);
|
||||||
|
if (safemode > 0)
|
||||||
|
{
|
||||||
|
for (int sm = 0; sm < safemode; sm++)
|
||||||
|
toGR_sendData(payload, type, minfo, 1);
|
||||||
|
}
|
||||||
|
if (minfo == 2)
|
||||||
|
{
|
||||||
|
// repeat last frame
|
||||||
|
for (int rl = 0; rl < (10 - safemode); rl++)
|
||||||
|
toGR_sendData(payload, type, minfo, 1);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
toGR_sendData(pdata + 2, type, minfo);
|
toGR_sendData(pdata + 2, type, minfo,0);
|
||||||
|
|
||||||
|
if (safemode > 0)
|
||||||
|
{
|
||||||
|
for(int sm=0; sm < safemode; sm++)
|
||||||
|
toGR_sendData(pdata + 2, type, minfo, 1);
|
||||||
|
}
|
||||||
|
if (minfo == 2)
|
||||||
|
{
|
||||||
|
// repeat last frame
|
||||||
|
for(int rl = 0; rl < (10-safemode); rl ++)
|
||||||
|
toGR_sendData(pdata + 2, type, minfo, 1);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void toGR_sendData(uint8_t* data, int type, int status)
|
void toGR_sendData(uint8_t* data, int type, int status, int repeat)
|
||||||
{
|
{
|
||||||
int len = 0;
|
int len = 0;
|
||||||
uint8_t* txdata = Pack(data, type, status, &len);
|
uint8_t* txdata = Pack(data, type, status, &len, repeat);
|
||||||
|
|
||||||
//showbytestring((char *)"BERtx: ", txdata, len);
|
//showbytestring((char *)"BERtx: ", txdata, len);
|
||||||
|
|
||||||
|
@ -88,7 +88,7 @@ enum _VOICEMODES_ {
|
|||||||
};
|
};
|
||||||
|
|
||||||
void init_packer();
|
void init_packer();
|
||||||
uint8_t* Pack(uint8_t* payload, int type, int status, int* plen);
|
uint8_t* Pack(uint8_t* payload, int type, int status, int* plen, int repeat);
|
||||||
uint8_t* unpack_data(uint8_t* rxd, int len);
|
uint8_t* unpack_data(uint8_t* rxd, int len);
|
||||||
|
|
||||||
void convertBytesToSyms_QPSK(uint8_t* bytes, uint8_t* syms, int bytenum);
|
void convertBytesToSyms_QPSK(uint8_t* bytes, uint8_t* syms, int bytenum);
|
||||||
@ -142,7 +142,7 @@ void sendAnnouncement();
|
|||||||
void sleep_ms(int ms);
|
void sleep_ms(int ms);
|
||||||
int getus();
|
int getus();
|
||||||
void GRdata_rxdata(uint8_t* pdata, int len, struct sockaddr_in* rxsock);
|
void GRdata_rxdata(uint8_t* pdata, int len, struct sockaddr_in* rxsock);
|
||||||
void toGR_sendData(uint8_t* data, int type, int status);
|
void toGR_sendData(uint8_t* data, int type, int status, int repeat);
|
||||||
|
|
||||||
void modulator(uint8_t sym_in);
|
void modulator(uint8_t sym_in);
|
||||||
int io_pb_fifo_usedBlocks();
|
int io_pb_fifo_usedBlocks();
|
||||||
@ -213,6 +213,7 @@ extern int ann_running;
|
|||||||
extern int transmissions;
|
extern int transmissions;
|
||||||
extern int linespeed;
|
extern int linespeed;
|
||||||
extern uint8_t maxLevel;
|
extern uint8_t maxLevel;
|
||||||
|
extern uint8_t maxTXLevel;
|
||||||
extern int VoiceAudioMode;
|
extern int VoiceAudioMode;
|
||||||
extern int opusbitrate;
|
extern int opusbitrate;
|
||||||
extern int init_audio_result;
|
extern int init_audio_result;
|
||||||
@ -227,6 +228,7 @@ extern float softwareMICvolume;
|
|||||||
extern float softwareLSvolume;
|
extern float softwareLSvolume;
|
||||||
extern int physcaprate;
|
extern int physcaprate;
|
||||||
extern int restart_modems;
|
extern int restart_modems;
|
||||||
|
extern int safemode;
|
||||||
|
|
||||||
#ifdef _LINUX_
|
#ifdef _LINUX_
|
||||||
int isRunning(char* prgname);
|
int isRunning(char* prgname);
|
||||||
|
@ -199,7 +199,7 @@ void modulator(uint8_t sym_in)
|
|||||||
{
|
{
|
||||||
fs = io_pb_fifo_freespace(0);
|
fs = io_pb_fifo_freespace(0);
|
||||||
// wait until there is space in fifo
|
// wait until there is space in fifo
|
||||||
if(fs) break;
|
if(fs > 20000) break;
|
||||||
sleep_ms(10);
|
sleep_ms(10);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -229,7 +229,8 @@ unsigned int m_st = 7; // filter delay (symbols)
|
|||||||
float beta_st = beta_excessBW;//0.30f; // filter excess bandwidth factor
|
float beta_st = beta_excessBW;//0.30f; // filter excess bandwidth factor
|
||||||
float bandwidth_st = 0.9f; // loop filter bandwidth
|
float bandwidth_st = 0.9f; // loop filter bandwidth
|
||||||
|
|
||||||
uint8_t maxLevel = 0; // maximum level over the last x samples in %
|
uint8_t maxLevel = 0; // maximum RXlevel over the last x samples in %
|
||||||
|
uint8_t maxTXLevel = 0; // maximum TXlevel over the last x samples in %
|
||||||
|
|
||||||
void init_demodulator()
|
void init_demodulator()
|
||||||
{
|
{
|
||||||
@ -282,7 +283,7 @@ void make_FFTdata(float f)
|
|||||||
uint8_t txpl[10000];
|
uint8_t txpl[10000];
|
||||||
if (fftlen > (10000 * 2 + 1))
|
if (fftlen > (10000 * 2 + 1))
|
||||||
{
|
{
|
||||||
printf("GRdata_FFTdata: txpl too small !!!\n");
|
printf("FFTdata: txpl too small !!!\n");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -300,6 +301,9 @@ void make_FFTdata(float f)
|
|||||||
txpl[bidx++] = rxlevel_deteced; // RX level present
|
txpl[bidx++] = rxlevel_deteced; // RX level present
|
||||||
txpl[bidx++] = rx_in_sync;
|
txpl[bidx++] = rx_in_sync;
|
||||||
|
|
||||||
|
txpl[bidx++] = maxLevel; // actual max level on sound capture in %
|
||||||
|
txpl[bidx++] = maxTXLevel; // actual max level on sound playback in %
|
||||||
|
|
||||||
for (int i = 0; i < fftlen; i++)
|
for (int i = 0; i < fftlen; i++)
|
||||||
{
|
{
|
||||||
txpl[bidx++] = fft[i] >> 8;
|
txpl[bidx++] = fft[i] >> 8;
|
||||||
@ -309,7 +313,7 @@ void make_FFTdata(float f)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#define MCHECK 1000
|
#define MCHECK 48000
|
||||||
void getMax(float fv)
|
void getMax(float fv)
|
||||||
{
|
{
|
||||||
static float farr[MCHECK];
|
static float farr[MCHECK];
|
||||||
@ -334,7 +338,7 @@ void getMax(float fv)
|
|||||||
if (farr[i] > max) max = farr[i];
|
if (farr[i] > max) max = farr[i];
|
||||||
}
|
}
|
||||||
maxLevel = (uint8_t)(max*100);
|
maxLevel = (uint8_t)(max*100);
|
||||||
//printf("max: %10.6f\n", max);
|
//printf("RX max: %10.6f\n", max);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -414,7 +418,7 @@ static int ccol_idx = 0;
|
|||||||
unsigned int sym_out; // output symbol
|
unsigned int sym_out; // output symbol
|
||||||
sym_out = nsym_out;
|
sym_out = nsym_out;
|
||||||
|
|
||||||
//measure_speed_syms(1);
|
measure_speed_syms(1); // do NOT remove, used for speed display in GUI
|
||||||
|
|
||||||
// try to extract a complete frame
|
// try to extract a complete frame
|
||||||
uint8_t symb = sym_out;
|
uint8_t symb = sym_out;
|
||||||
|
@ -276,7 +276,7 @@ void read_callback(struct SoundIoInStream* instream, int frame_count_min, int fr
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
//printf("%d into fifo\n", frame_count);
|
//printf("%d into fifo\n", frame_count);
|
||||||
// needs to sleep or it will not work correctly, no idea why
|
// needs to sleep or it will not work correctly on Windows, no idea why
|
||||||
sleep_ms(1);
|
sleep_ms(1);
|
||||||
|
|
||||||
//measure_speed_bps(frame_count);
|
//measure_speed_bps(frame_count);
|
||||||
@ -300,6 +300,35 @@ void overflow_callback(struct SoundIoInStream* instream)
|
|||||||
printf("overflow %d\n", ++count);
|
printf("overflow %d\n", ++count);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#define MTXCHECK 48000
|
||||||
|
void getTXMax(float fv)
|
||||||
|
{
|
||||||
|
static float farr[MTXCHECK];
|
||||||
|
static int idx = 0;
|
||||||
|
static int f = 1;
|
||||||
|
|
||||||
|
if (f)
|
||||||
|
{
|
||||||
|
f = 0;
|
||||||
|
for (int i = 0; i < MTXCHECK; i++)
|
||||||
|
farr[i] = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
farr[idx] = fv;
|
||||||
|
idx++;
|
||||||
|
if (idx == MTXCHECK)
|
||||||
|
{
|
||||||
|
idx = 0;
|
||||||
|
float max = 0;
|
||||||
|
for (int i = 0; i < MTXCHECK; i++)
|
||||||
|
{
|
||||||
|
if (farr[i] > max) max = farr[i];
|
||||||
|
}
|
||||||
|
maxTXLevel = (uint8_t)(max * 100);
|
||||||
|
//printf("TX max: %10.6f\n", max);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// #define SINEWAVETEST
|
// #define SINEWAVETEST
|
||||||
|
|
||||||
#ifdef SINEWAVETEST
|
#ifdef SINEWAVETEST
|
||||||
@ -354,6 +383,7 @@ static void write_callback(struct SoundIoOutStream* outstream, int frame_count_m
|
|||||||
for (int channel = 0; channel < layout->channel_count; channel += 1)
|
for (int channel = 0; channel < layout->channel_count; channel += 1)
|
||||||
{
|
{
|
||||||
float ftx = f[frame] * softwarePBvolume;
|
float ftx = f[frame] * softwarePBvolume;
|
||||||
|
getTXMax(ftx);
|
||||||
if (pbrawdev == false)
|
if (pbrawdev == false)
|
||||||
{
|
{
|
||||||
#ifdef SINEWAVETEST
|
#ifdef SINEWAVETEST
|
||||||
|
@ -132,8 +132,8 @@ void measure_speed_syms(int len)
|
|||||||
speed = meanval((int)dspd) * bitsPerSymbol;
|
speed = meanval((int)dspd) * bitsPerSymbol;
|
||||||
|
|
||||||
// here we have number of elements after 1s
|
// here we have number of elements after 1s
|
||||||
printf("%d sym/s\n",speed);
|
//printf("%d sym/s\n",speed);
|
||||||
|
// do NOT uncomment this function for RX, it is used to measure the speed for the GUI
|
||||||
elems=0;
|
elems=0;
|
||||||
lasttim = tim;
|
lasttim = tim;
|
||||||
}
|
}
|
||||||
@ -160,7 +160,7 @@ void measure_speed_bps(int len)
|
|||||||
speed = meanvalbps((int)dspd);
|
speed = meanvalbps((int)dspd);
|
||||||
|
|
||||||
// here we have number of elements after 1s
|
// here we have number of elements after 1s
|
||||||
printf(" ======================= %d bit/s\n", speed);
|
//printf(" ======================= %d bit/s\n", speed);
|
||||||
|
|
||||||
elems = 0;
|
elems = 0;
|
||||||
lasttim = tim;
|
lasttim = tim;
|
||||||
|
@ -165,7 +165,7 @@ void sendCodecToModulator(uint8_t *pdata, int len)
|
|||||||
if (vdidx == PAYLOADLEN)
|
if (vdidx == PAYLOADLEN)
|
||||||
{
|
{
|
||||||
vdidx = 0;
|
vdidx = 0;
|
||||||
toGR_sendData(payload, 6, 1); // 6 ... voice data, 1 ... valid voice data
|
toGR_sendData(payload, 6, 1 ,0); // 6 ... voice data, 1 ... valid voice data
|
||||||
}
|
}
|
||||||
|
|
||||||
while (1)
|
while (1)
|
||||||
@ -179,7 +179,7 @@ void sendCodecToModulator(uint8_t *pdata, int len)
|
|||||||
// send a dummy frame, a frame with 0 voice data
|
// send a dummy frame, a frame with 0 voice data
|
||||||
uint8_t dummy[PAYLOADLEN];
|
uint8_t dummy[PAYLOADLEN];
|
||||||
memset(dummy, 0, PAYLOADLEN);
|
memset(dummy, 0, PAYLOADLEN);
|
||||||
toGR_sendData(dummy, 6, 0);
|
toGR_sendData(dummy, 6, 0, 0);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
break;
|
break;
|
||||||
|
@ -2,5 +2,5 @@
|
|||||||
<configuration>
|
<configuration>
|
||||||
<startup>
|
<startup>
|
||||||
|
|
||||||
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5"/></startup>
|
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2"/></startup>
|
||||||
</configuration>
|
</configuration>
|
||||||
|
@ -17,6 +17,7 @@ namespace oscardata
|
|||||||
public static Byte filestat = statics.noTX;
|
public static Byte filestat = statics.noTX;
|
||||||
static private readonly object busyLock = new object();
|
static private readonly object busyLock = new object();
|
||||||
static int timeout_period_ms = 10;
|
static int timeout_period_ms = 10;
|
||||||
|
static UInt16 fncrc;
|
||||||
|
|
||||||
// start a timer which is used to send a file from txdata
|
// start a timer which is used to send a file from txdata
|
||||||
public static void ArraySendInit()
|
public static void ArraySendInit()
|
||||||
@ -81,7 +82,7 @@ namespace oscardata
|
|||||||
|
|
||||||
// CRC16 over complete file contents is the file ID
|
// CRC16 over complete file contents is the file ID
|
||||||
Crc c = new Crc();
|
Crc c = new Crc();
|
||||||
UInt16 fncrc = c.crc16_messagecalc(data, data.Length);
|
fncrc = c.crc16_messagecalc(data, data.Length);
|
||||||
|
|
||||||
// create the file header
|
// create the file header
|
||||||
// 50 bytes ... Filename (or first 50 chars of the filename)
|
// 50 bytes ... Filename (or first 50 chars of the filename)
|
||||||
@ -133,7 +134,7 @@ namespace oscardata
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
// runs every 10 ms
|
// runs every 10 ms to send a file
|
||||||
static void TimerTick(object stateInfo)
|
static void TimerTick(object stateInfo)
|
||||||
{
|
{
|
||||||
// check if we need to send something
|
// check if we need to send something
|
||||||
@ -157,7 +158,7 @@ namespace oscardata
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// additional frame follow
|
// additional frame follows
|
||||||
// from txdata send one chunk of length statics.PayloadLen
|
// from txdata send one chunk of length statics.PayloadLen
|
||||||
// frame is repeated for preamble by hsmodem.cpp
|
// frame is repeated for preamble by hsmodem.cpp
|
||||||
Array.Copy(txdata, 0, txarr, 0, statics.PayloadLen);
|
Array.Copy(txdata, 0, txarr, 0, statics.PayloadLen);
|
||||||
@ -176,8 +177,8 @@ namespace oscardata
|
|||||||
{
|
{
|
||||||
// send as the last frame
|
// send as the last frame
|
||||||
Array.Copy(txdata, txpos, txarr, 0, restlen); // unused byte will be 0
|
Array.Copy(txdata, txpos, txarr, 0, restlen); // unused byte will be 0
|
||||||
// send the last frame a couple of times
|
|
||||||
for(int i=0; i<10; i++)
|
// send the last frame a couple of times (see hsmodem.cpp)
|
||||||
txudp(txarr, txtype, statics.LastFrame);
|
txudp(txarr, txtype, statics.LastFrame);
|
||||||
setSending(false); // transmission complete
|
setSending(false); // transmission complete
|
||||||
}
|
}
|
||||||
|
86
oscardata/oscardata/Form1.Designer.cs
generated
86
oscardata/oscardata/Form1.Designer.cs
generated
@ -97,6 +97,9 @@
|
|||||||
this.label11 = new System.Windows.Forms.Label();
|
this.label11 = new System.Windows.Forms.Label();
|
||||||
this.tabPage_setup = new System.Windows.Forms.TabPage();
|
this.tabPage_setup = new System.Windows.Forms.TabPage();
|
||||||
this.groupBox4 = new System.Windows.Forms.GroupBox();
|
this.groupBox4 = new System.Windows.Forms.GroupBox();
|
||||||
|
this.label13 = new System.Windows.Forms.Label();
|
||||||
|
this.label12 = new System.Windows.Forms.Label();
|
||||||
|
this.cb_safemode = new System.Windows.Forms.ComboBox();
|
||||||
this.cb_language = new System.Windows.Forms.ComboBox();
|
this.cb_language = new System.Windows.Forms.ComboBox();
|
||||||
this.cb_autostart = new System.Windows.Forms.CheckBox();
|
this.cb_autostart = new System.Windows.Forms.CheckBox();
|
||||||
this.bt_shutdown = new System.Windows.Forms.Button();
|
this.bt_shutdown = new System.Windows.Forms.Button();
|
||||||
@ -104,6 +107,8 @@
|
|||||||
this.bt_resetmodem = new System.Windows.Forms.Button();
|
this.bt_resetmodem = new System.Windows.Forms.Button();
|
||||||
this.textBox3 = new System.Windows.Forms.TextBox();
|
this.textBox3 = new System.Windows.Forms.TextBox();
|
||||||
this.groupBox3 = new System.Windows.Forms.GroupBox();
|
this.groupBox3 = new System.Windows.Forms.GroupBox();
|
||||||
|
this.vu_cap = new KmProgressBar();
|
||||||
|
this.vu_pb = new KmProgressBar();
|
||||||
this.pb_audioCAPstatus = new System.Windows.Forms.PictureBox();
|
this.pb_audioCAPstatus = new System.Windows.Forms.PictureBox();
|
||||||
this.pb_audioPBstatus = new System.Windows.Forms.PictureBox();
|
this.pb_audioPBstatus = new System.Windows.Forms.PictureBox();
|
||||||
this.label6 = new System.Windows.Forms.Label();
|
this.label6 = new System.Windows.Forms.Label();
|
||||||
@ -130,10 +135,10 @@
|
|||||||
this.cb_speed = new System.Windows.Forms.ComboBox();
|
this.cb_speed = new System.Windows.Forms.ComboBox();
|
||||||
this.label_speed = new System.Windows.Forms.Label();
|
this.label_speed = new System.Windows.Forms.Label();
|
||||||
this.timer_searchmodem = new System.Windows.Forms.Timer(this.components);
|
this.timer_searchmodem = new System.Windows.Forms.Timer(this.components);
|
||||||
this.progressBar_fifo = new System.Windows.Forms.ProgressBar();
|
this.progressBar_fifo = new KmProgressBar();
|
||||||
this.label_fifo = new System.Windows.Forms.Label();
|
this.label_fifo = new System.Windows.Forms.Label();
|
||||||
this.bt_blockinfo = new System.Windows.Forms.Button();
|
this.bt_blockinfo = new System.Windows.Forms.Button();
|
||||||
this.progressBar_capfifo = new System.Windows.Forms.ProgressBar();
|
this.progressBar_capfifo = new KmProgressBar();
|
||||||
this.label_capfifo = new System.Windows.Forms.Label();
|
this.label_capfifo = new System.Windows.Forms.Label();
|
||||||
this.lb_rxsignal = new System.Windows.Forms.Label();
|
this.lb_rxsignal = new System.Windows.Forms.Label();
|
||||||
this.lb_rxsync = new System.Windows.Forms.Label();
|
this.lb_rxsync = new System.Windows.Forms.Label();
|
||||||
@ -223,7 +228,7 @@
|
|||||||
// timer_qpsk
|
// timer_qpsk
|
||||||
//
|
//
|
||||||
this.timer_qpsk.Enabled = true;
|
this.timer_qpsk.Enabled = true;
|
||||||
this.timer_qpsk.Interval = 500;
|
this.timer_qpsk.Interval = 200;
|
||||||
this.timer_qpsk.Tick += new System.EventHandler(this.timer_qpsk_Tick);
|
this.timer_qpsk.Tick += new System.EventHandler(this.timer_qpsk_Tick);
|
||||||
//
|
//
|
||||||
// panel_txspectrum
|
// panel_txspectrum
|
||||||
@ -926,6 +931,9 @@
|
|||||||
//
|
//
|
||||||
// groupBox4
|
// groupBox4
|
||||||
//
|
//
|
||||||
|
this.groupBox4.Controls.Add(this.label13);
|
||||||
|
this.groupBox4.Controls.Add(this.label12);
|
||||||
|
this.groupBox4.Controls.Add(this.cb_safemode);
|
||||||
this.groupBox4.Controls.Add(this.cb_language);
|
this.groupBox4.Controls.Add(this.cb_language);
|
||||||
this.groupBox4.Controls.Add(this.cb_autostart);
|
this.groupBox4.Controls.Add(this.cb_autostart);
|
||||||
this.groupBox4.Controls.Add(this.bt_shutdown);
|
this.groupBox4.Controls.Add(this.bt_shutdown);
|
||||||
@ -939,13 +947,44 @@
|
|||||||
this.groupBox4.TabStop = false;
|
this.groupBox4.TabStop = false;
|
||||||
this.groupBox4.Text = "Maintenance";
|
this.groupBox4.Text = "Maintenance";
|
||||||
//
|
//
|
||||||
|
// label13
|
||||||
|
//
|
||||||
|
this.label13.AutoSize = true;
|
||||||
|
this.label13.Location = new System.Drawing.Point(240, 78);
|
||||||
|
this.label13.Name = "label13";
|
||||||
|
this.label13.Size = new System.Drawing.Size(70, 13);
|
||||||
|
this.label13.TabIndex = 27;
|
||||||
|
this.label13.Text = "data security:";
|
||||||
|
//
|
||||||
|
// label12
|
||||||
|
//
|
||||||
|
this.label12.AutoSize = true;
|
||||||
|
this.label12.Location = new System.Drawing.Point(253, 23);
|
||||||
|
this.label12.Name = "label12";
|
||||||
|
this.label12.Size = new System.Drawing.Size(54, 13);
|
||||||
|
this.label12.TabIndex = 26;
|
||||||
|
this.label12.Text = "language:";
|
||||||
|
//
|
||||||
|
// cb_safemode
|
||||||
|
//
|
||||||
|
this.cb_safemode.FormattingEnabled = true;
|
||||||
|
this.cb_safemode.Items.AddRange(new object[] {
|
||||||
|
"off (fast)",
|
||||||
|
"medium",
|
||||||
|
"high (slow)"});
|
||||||
|
this.cb_safemode.Location = new System.Drawing.Point(326, 75);
|
||||||
|
this.cb_safemode.Name = "cb_safemode";
|
||||||
|
this.cb_safemode.Size = new System.Drawing.Size(110, 21);
|
||||||
|
this.cb_safemode.TabIndex = 25;
|
||||||
|
this.cb_safemode.Text = "off";
|
||||||
|
//
|
||||||
// cb_language
|
// cb_language
|
||||||
//
|
//
|
||||||
this.cb_language.FormattingEnabled = true;
|
this.cb_language.FormattingEnabled = true;
|
||||||
this.cb_language.Items.AddRange(new object[] {
|
this.cb_language.Items.AddRange(new object[] {
|
||||||
"English",
|
"English",
|
||||||
"German/Deutsch"});
|
"German/Deutsch"});
|
||||||
this.cb_language.Location = new System.Drawing.Point(207, 19);
|
this.cb_language.Location = new System.Drawing.Point(326, 19);
|
||||||
this.cb_language.Name = "cb_language";
|
this.cb_language.Name = "cb_language";
|
||||||
this.cb_language.Size = new System.Drawing.Size(110, 21);
|
this.cb_language.Size = new System.Drawing.Size(110, 21);
|
||||||
this.cb_language.TabIndex = 24;
|
this.cb_language.TabIndex = 24;
|
||||||
@ -989,7 +1028,7 @@
|
|||||||
//
|
//
|
||||||
// bt_resetmodem
|
// bt_resetmodem
|
||||||
//
|
//
|
||||||
this.bt_resetmodem.Location = new System.Drawing.Point(356, 82);
|
this.bt_resetmodem.Location = new System.Drawing.Point(529, 92);
|
||||||
this.bt_resetmodem.Name = "bt_resetmodem";
|
this.bt_resetmodem.Name = "bt_resetmodem";
|
||||||
this.bt_resetmodem.Size = new System.Drawing.Size(117, 23);
|
this.bt_resetmodem.Size = new System.Drawing.Size(117, 23);
|
||||||
this.bt_resetmodem.TabIndex = 6;
|
this.bt_resetmodem.TabIndex = 6;
|
||||||
@ -1012,6 +1051,8 @@
|
|||||||
//
|
//
|
||||||
// groupBox3
|
// groupBox3
|
||||||
//
|
//
|
||||||
|
this.groupBox3.Controls.Add(this.vu_cap);
|
||||||
|
this.groupBox3.Controls.Add(this.vu_pb);
|
||||||
this.groupBox3.Controls.Add(this.pb_audioCAPstatus);
|
this.groupBox3.Controls.Add(this.pb_audioCAPstatus);
|
||||||
this.groupBox3.Controls.Add(this.pb_audioPBstatus);
|
this.groupBox3.Controls.Add(this.pb_audioPBstatus);
|
||||||
this.groupBox3.Controls.Add(this.label6);
|
this.groupBox3.Controls.Add(this.label6);
|
||||||
@ -1029,11 +1070,25 @@
|
|||||||
this.groupBox3.TabStop = false;
|
this.groupBox3.TabStop = false;
|
||||||
this.groupBox3.Text = "Transceiver Audio";
|
this.groupBox3.Text = "Transceiver Audio";
|
||||||
//
|
//
|
||||||
|
// vu_cap
|
||||||
|
//
|
||||||
|
this.vu_cap.Location = new System.Drawing.Point(479, 87);
|
||||||
|
this.vu_cap.Name = "vu_cap";
|
||||||
|
this.vu_cap.Size = new System.Drawing.Size(100, 10);
|
||||||
|
this.vu_cap.TabIndex = 20;
|
||||||
|
//
|
||||||
|
// vu_pb
|
||||||
|
//
|
||||||
|
this.vu_pb.Location = new System.Drawing.Point(479, 45);
|
||||||
|
this.vu_pb.Name = "vu_pb";
|
||||||
|
this.vu_pb.Size = new System.Drawing.Size(100, 10);
|
||||||
|
this.vu_pb.TabIndex = 19;
|
||||||
|
//
|
||||||
// pb_audioCAPstatus
|
// pb_audioCAPstatus
|
||||||
//
|
//
|
||||||
this.pb_audioCAPstatus.BackgroundImage = global::oscardata.Properties.Resources.ok;
|
this.pb_audioCAPstatus.BackgroundImage = global::oscardata.Properties.Resources.ok;
|
||||||
this.pb_audioCAPstatus.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Zoom;
|
this.pb_audioCAPstatus.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Zoom;
|
||||||
this.pb_audioCAPstatus.Location = new System.Drawing.Point(375, 52);
|
this.pb_audioCAPstatus.Location = new System.Drawing.Point(375, 63);
|
||||||
this.pb_audioCAPstatus.Name = "pb_audioCAPstatus";
|
this.pb_audioCAPstatus.Name = "pb_audioCAPstatus";
|
||||||
this.pb_audioCAPstatus.Size = new System.Drawing.Size(21, 21);
|
this.pb_audioCAPstatus.Size = new System.Drawing.Size(21, 21);
|
||||||
this.pb_audioCAPstatus.TabIndex = 18;
|
this.pb_audioCAPstatus.TabIndex = 18;
|
||||||
@ -1052,7 +1107,7 @@
|
|||||||
// label6
|
// label6
|
||||||
//
|
//
|
||||||
this.label6.AutoSize = true;
|
this.label6.AutoSize = true;
|
||||||
this.label6.Location = new System.Drawing.Point(428, 54);
|
this.label6.Location = new System.Drawing.Point(428, 65);
|
||||||
this.label6.Name = "label6";
|
this.label6.Name = "label6";
|
||||||
this.label6.Size = new System.Drawing.Size(45, 13);
|
this.label6.Size = new System.Drawing.Size(45, 13);
|
||||||
this.label6.TabIndex = 16;
|
this.label6.TabIndex = 16;
|
||||||
@ -1070,9 +1125,10 @@
|
|||||||
// tb_CAPvol
|
// tb_CAPvol
|
||||||
//
|
//
|
||||||
this.tb_CAPvol.Cursor = System.Windows.Forms.Cursors.SizeAll;
|
this.tb_CAPvol.Cursor = System.Windows.Forms.Cursors.SizeAll;
|
||||||
this.tb_CAPvol.Location = new System.Drawing.Point(479, 50);
|
this.tb_CAPvol.Location = new System.Drawing.Point(479, 61);
|
||||||
this.tb_CAPvol.Maximum = 100;
|
this.tb_CAPvol.Maximum = 100;
|
||||||
this.tb_CAPvol.MaximumSize = new System.Drawing.Size(0, 24);
|
this.tb_CAPvol.MaximumSize = new System.Drawing.Size(0, 24);
|
||||||
|
this.tb_CAPvol.Minimum = 1;
|
||||||
this.tb_CAPvol.MinimumSize = new System.Drawing.Size(100, 0);
|
this.tb_CAPvol.MinimumSize = new System.Drawing.Size(100, 0);
|
||||||
this.tb_CAPvol.Name = "tb_CAPvol";
|
this.tb_CAPvol.Name = "tb_CAPvol";
|
||||||
this.tb_CAPvol.Size = new System.Drawing.Size(100, 24);
|
this.tb_CAPvol.Size = new System.Drawing.Size(100, 24);
|
||||||
@ -1087,6 +1143,7 @@
|
|||||||
this.tb_PBvol.Location = new System.Drawing.Point(479, 19);
|
this.tb_PBvol.Location = new System.Drawing.Point(479, 19);
|
||||||
this.tb_PBvol.Maximum = 100;
|
this.tb_PBvol.Maximum = 100;
|
||||||
this.tb_PBvol.MaximumSize = new System.Drawing.Size(0, 24);
|
this.tb_PBvol.MaximumSize = new System.Drawing.Size(0, 24);
|
||||||
|
this.tb_PBvol.Minimum = 1;
|
||||||
this.tb_PBvol.MinimumSize = new System.Drawing.Size(100, 0);
|
this.tb_PBvol.MinimumSize = new System.Drawing.Size(100, 0);
|
||||||
this.tb_PBvol.Name = "tb_PBvol";
|
this.tb_PBvol.Name = "tb_PBvol";
|
||||||
this.tb_PBvol.Size = new System.Drawing.Size(100, 24);
|
this.tb_PBvol.Size = new System.Drawing.Size(100, 24);
|
||||||
@ -1116,7 +1173,7 @@
|
|||||||
// cb_audioCAP
|
// cb_audioCAP
|
||||||
//
|
//
|
||||||
this.cb_audioCAP.FormattingEnabled = true;
|
this.cb_audioCAP.FormattingEnabled = true;
|
||||||
this.cb_audioCAP.Location = new System.Drawing.Point(138, 52);
|
this.cb_audioCAP.Location = new System.Drawing.Point(138, 63);
|
||||||
this.cb_audioCAP.Name = "cb_audioCAP";
|
this.cb_audioCAP.Name = "cb_audioCAP";
|
||||||
this.cb_audioCAP.Size = new System.Drawing.Size(230, 21);
|
this.cb_audioCAP.Size = new System.Drawing.Size(230, 21);
|
||||||
this.cb_audioCAP.TabIndex = 9;
|
this.cb_audioCAP.TabIndex = 9;
|
||||||
@ -1125,7 +1182,7 @@
|
|||||||
// label4
|
// label4
|
||||||
//
|
//
|
||||||
this.label4.AutoSize = true;
|
this.label4.AutoSize = true;
|
||||||
this.label4.Location = new System.Drawing.Point(12, 56);
|
this.label4.Location = new System.Drawing.Point(12, 67);
|
||||||
this.label4.Name = "label4";
|
this.label4.Name = "label4";
|
||||||
this.label4.Size = new System.Drawing.Size(112, 13);
|
this.label4.Size = new System.Drawing.Size(112, 13);
|
||||||
this.label4.TabIndex = 10;
|
this.label4.TabIndex = 10;
|
||||||
@ -1538,7 +1595,7 @@
|
|||||||
private System.Windows.Forms.Label label6;
|
private System.Windows.Forms.Label label6;
|
||||||
private System.Windows.Forms.Label label5;
|
private System.Windows.Forms.Label label5;
|
||||||
private System.Windows.Forms.TrackBar tb_CAPvol;
|
private System.Windows.Forms.TrackBar tb_CAPvol;
|
||||||
private System.Windows.Forms.ProgressBar progressBar_fifo;
|
private KmProgressBar progressBar_fifo;
|
||||||
private System.Windows.Forms.Label label_fifo;
|
private System.Windows.Forms.Label label_fifo;
|
||||||
private System.Windows.Forms.CheckBox cb_autostart;
|
private System.Windows.Forms.CheckBox cb_autostart;
|
||||||
private System.Windows.Forms.TextBox textBox5;
|
private System.Windows.Forms.TextBox textBox5;
|
||||||
@ -1579,13 +1636,18 @@
|
|||||||
private System.Windows.Forms.RadioButton rb_codec2;
|
private System.Windows.Forms.RadioButton rb_codec2;
|
||||||
private System.Windows.Forms.CheckBox cb_digitalVoiceRXonly;
|
private System.Windows.Forms.CheckBox cb_digitalVoiceRXonly;
|
||||||
private System.Windows.Forms.PictureBox pb_voice;
|
private System.Windows.Forms.PictureBox pb_voice;
|
||||||
private System.Windows.Forms.ProgressBar progressBar_capfifo;
|
private KmProgressBar progressBar_capfifo;
|
||||||
private System.Windows.Forms.Label label_capfifo;
|
private System.Windows.Forms.Label label_capfifo;
|
||||||
private System.Windows.Forms.PictureBox pb_rxsignal;
|
private System.Windows.Forms.PictureBox pb_rxsignal;
|
||||||
private System.Windows.Forms.Label lb_rxsignal;
|
private System.Windows.Forms.Label lb_rxsignal;
|
||||||
private System.Windows.Forms.Label lb_rxsync;
|
private System.Windows.Forms.Label lb_rxsync;
|
||||||
private System.Windows.Forms.PictureBox pb_rxsync;
|
private System.Windows.Forms.PictureBox pb_rxsync;
|
||||||
private System.Windows.Forms.ComboBox cb_language;
|
private System.Windows.Forms.ComboBox cb_language;
|
||||||
|
private System.Windows.Forms.Label label13;
|
||||||
|
private System.Windows.Forms.Label label12;
|
||||||
|
private System.Windows.Forms.ComboBox cb_safemode;
|
||||||
|
private KmProgressBar vu_cap;
|
||||||
|
private KmProgressBar vu_pb;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -400,7 +400,6 @@ namespace oscardata
|
|||||||
// RX timer
|
// RX timer
|
||||||
int rxstat = 0;
|
int rxstat = 0;
|
||||||
int speed;
|
int speed;
|
||||||
int maxlevel = 0;
|
|
||||||
private void timer_udprx_Tick(object sender, EventArgs e)
|
private void timer_udprx_Tick(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
while (true)
|
while (true)
|
||||||
@ -418,11 +417,11 @@ namespace oscardata
|
|||||||
speed = rxd[5];
|
speed = rxd[5];
|
||||||
speed <<= 8;
|
speed <<= 8;
|
||||||
speed += rxd[6];
|
speed += rxd[6];
|
||||||
maxlevel = rxd[7];
|
int dummy3 = rxd[7];
|
||||||
int dummy4 = rxd[8];
|
int dummy4 = rxd[8];
|
||||||
int dummy5 = rxd[9];
|
int dummy5 = rxd[9];
|
||||||
|
|
||||||
rxbytecounter += statics.UdpBlocklen;
|
rxbytecounter = statics.UdpBlocklen * rxfrmnum;
|
||||||
|
|
||||||
Byte[] rxdata = new byte[rxd.Length - 10];
|
Byte[] rxdata = new byte[rxd.Length - 10];
|
||||||
Array.Copy(rxd, 10, rxdata, 0, rxd.Length - 10);
|
Array.Copy(rxd, 10, rxdata, 0, rxd.Length - 10);
|
||||||
@ -581,6 +580,32 @@ namespace oscardata
|
|||||||
// Show RX Status LEDs
|
// Show RX Status LEDs
|
||||||
if (statics.RXlevelDetected == 1) pb_rxsignal.BackgroundImage = Resources.greenmarker; else pb_rxsignal.BackgroundImage = Resources.redmarker;
|
if (statics.RXlevelDetected == 1) pb_rxsignal.BackgroundImage = Resources.greenmarker; else pb_rxsignal.BackgroundImage = Resources.redmarker;
|
||||||
if (statics.RXinSync == 1 && statics.RXlevelDetected == 1) pb_rxsync.BackgroundImage = Resources.greenmarker; else pb_rxsync.BackgroundImage = Resources.redmarker;
|
if (statics.RXinSync == 1 && statics.RXlevelDetected == 1) pb_rxsync.BackgroundImage = Resources.greenmarker; else pb_rxsync.BackgroundImage = Resources.redmarker;
|
||||||
|
|
||||||
|
// update rx,tx level progress bar
|
||||||
|
int factor = 1;
|
||||||
|
int addf = 80;
|
||||||
|
double vl100 = (100 / addf) + Math.Log10(100 + factor);
|
||||||
|
double vl = ((double)statics.maxRXlevel / addf) + Math.Log10((double)statics.maxRXlevel + factor);
|
||||||
|
vl = vl * 100 / vl100;
|
||||||
|
if (vl > 99) vl = 99;
|
||||||
|
if (vl < 1) vl = 1;
|
||||||
|
vu_cap.Value = (int)vl;
|
||||||
|
if (vl < 20 || vl > 85)
|
||||||
|
vu_cap.ForeColor = Color.Red;
|
||||||
|
else
|
||||||
|
vu_cap.ForeColor = Color.Yellow;
|
||||||
|
|
||||||
|
addf = 80;
|
||||||
|
vl = ((double)statics.maxTXlevel / addf) + Math.Log10((double)statics.maxTXlevel + factor);
|
||||||
|
vl100 = (100 / addf) + Math.Log10(100 + factor);
|
||||||
|
vl = vl * 100 / vl100;
|
||||||
|
if (vl > 99) vl = 99;
|
||||||
|
if (vl < 1) vl = 1;
|
||||||
|
vu_pb.Value = (int)vl;
|
||||||
|
if(vl <20 || vl > 85)
|
||||||
|
vu_pb.ForeColor = Color.Red;
|
||||||
|
else
|
||||||
|
vu_pb.ForeColor = Color.Yellow;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void panel_constel_Paint(object sender, PaintEventArgs e)
|
private void panel_constel_Paint(object sender, PaintEventArgs e)
|
||||||
@ -602,7 +627,7 @@ namespace oscardata
|
|||||||
static Brush brgreen = new SolidBrush(Color.FromArgb(255, (byte)240, (byte)255, (byte)240));
|
static Brush brgreen = new SolidBrush(Color.FromArgb(255, (byte)240, (byte)255, (byte)240));
|
||||||
static Brush brgray = new SolidBrush(Color.FromArgb(255, (byte)220, (byte)220, (byte)220));
|
static Brush brgray = new SolidBrush(Color.FromArgb(255, (byte)220, (byte)220, (byte)220));
|
||||||
static Pen pen = new Pen(Brushes.Black);
|
static Pen pen = new Pen(Brushes.Black);
|
||||||
static Pen penblue = new Pen(Brushes.Blue, 2);
|
static Pen penblue = new Pen(Brushes.Blue, 1);
|
||||||
static Pen pengrey = new Pen(brgray, 1);
|
static Pen pengrey = new Pen(brgray, 1);
|
||||||
Font fnt = new Font("Verdana", 8.0f);
|
Font fnt = new Font("Verdana", 8.0f);
|
||||||
Font smallfnt = new Font("Verdana", 6.0f);
|
Font smallfnt = new Font("Verdana", 6.0f);
|
||||||
@ -673,12 +698,14 @@ namespace oscardata
|
|||||||
for (int i = 0; i < maxxval; i++)
|
for (int i = 0; i < maxxval; i++)
|
||||||
{
|
{
|
||||||
UInt16 u = 0;
|
UInt16 u = 0;
|
||||||
if (i >= 1 && i < maxxval - 1)
|
if (i >= 2 && i < maxxval - 2)
|
||||||
u = (UInt16)((su[i - 1] + su[i] + su[i + 1]) / 3);
|
u = (UInt16)((su[i - 2] + su[i - 1] + su[i] + su[i + 1] + su[i + 2]) / 5);
|
||||||
else
|
else
|
||||||
u = su[i];
|
u = su[i];
|
||||||
|
|
||||||
u *= 3;
|
if (i < 3) u = 0;
|
||||||
|
|
||||||
|
u *= 10;
|
||||||
gp.AddLine(GetFFTPos(i, lastu), GetFFTPos(i + 1, u));
|
gp.AddLine(GetFFTPos(i, lastu), GetFFTPos(i + 1, u));
|
||||||
lastu = u;
|
lastu = u;
|
||||||
}
|
}
|
||||||
@ -698,7 +725,7 @@ namespace oscardata
|
|||||||
dam[0, i] = v[i];
|
dam[0, i] = v[i];
|
||||||
}
|
}
|
||||||
|
|
||||||
readonly static int meansize = 20;
|
readonly static int meansize = 6;//0;
|
||||||
readonly static int maxxval = (statics.real_datarate / 10) * 6 / 10;
|
readonly static int maxxval = (statics.real_datarate / 10) * 6 / 10;
|
||||||
readonly int maxyval = 3000;
|
readonly int maxyval = 3000;
|
||||||
|
|
||||||
@ -1154,7 +1181,8 @@ namespace oscardata
|
|||||||
* 3 ... announcement on/off, duration
|
* 3 ... announcement on/off, duration
|
||||||
* 4 ... DV loudspeaker volume
|
* 4 ... DV loudspeaker volume
|
||||||
* 5 ... DV mic volume
|
* 5 ... DV mic volume
|
||||||
* 6..9 ... unused
|
* 6 ... safe mode
|
||||||
|
* 7..9 ... unused
|
||||||
* 10 .. 109 ... PB device name
|
* 10 .. 109 ... PB device name
|
||||||
* 110 .. 209 ... CAP device name
|
* 110 .. 209 ... CAP device name
|
||||||
*
|
*
|
||||||
@ -1162,6 +1190,10 @@ namespace oscardata
|
|||||||
|
|
||||||
private void search_modem()
|
private void search_modem()
|
||||||
{
|
{
|
||||||
|
Byte safemode = 0; //number of frame repeats
|
||||||
|
if (cb_safemode.Text.Contains("medium")) safemode = 2;
|
||||||
|
else if (cb_safemode.Text.Contains("high")) safemode = 4;
|
||||||
|
|
||||||
Byte[] txb = new byte[210];
|
Byte[] txb = new byte[210];
|
||||||
txb[0] = 0x3c; // ID of this message
|
txb[0] = 0x3c; // ID of this message
|
||||||
txb[1] = (Byte)tb_PBvol.Value;
|
txb[1] = (Byte)tb_PBvol.Value;
|
||||||
@ -1169,7 +1201,7 @@ namespace oscardata
|
|||||||
txb[3] = (Byte)cb_announcement.Items.IndexOf(cb_announcement.Text);
|
txb[3] = (Byte)cb_announcement.Items.IndexOf(cb_announcement.Text);
|
||||||
txb[4] = (Byte)tb_loadspeaker.Value;
|
txb[4] = (Byte)tb_loadspeaker.Value;
|
||||||
txb[5] = (Byte)tb_mic.Value;
|
txb[5] = (Byte)tb_mic.Value;
|
||||||
txb[6] = (Byte)0; // unused
|
txb[6] = safemode;
|
||||||
txb[7] = (Byte)0; // unused
|
txb[7] = (Byte)0; // unused
|
||||||
txb[8] = (Byte)0; // unused
|
txb[8] = (Byte)0; // unused
|
||||||
txb[9] = (Byte)0; // unused
|
txb[9] = (Byte)0; // unused
|
||||||
|
@ -137,7 +137,7 @@
|
|||||||
AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w
|
AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w
|
||||||
LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0
|
LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0
|
||||||
ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAABw
|
ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAABw
|
||||||
FwAAAk1TRnQBSQFMAgEBDQEAAUABAQFAAQEBEAEAARABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo
|
FwAAAk1TRnQBSQFMAgEBDQEAAUABAgFAAQIBEAEAARABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo
|
||||||
AwABQAMAAUADAAEBAQABCAYAARAYAAGAAgABgAMAAoABAAGAAwABgAEAAYABAAKAAgADwAEAAcAB3AHA
|
AwABQAMAAUADAAEBAQABCAYAARAYAAGAAgABgAMAAoABAAGAAwABgAEAAYABAAKAAgADwAEAAcAB3AHA
|
||||||
AQAB8AHKAaYBAAEzBQABMwEAATMBAAEzAQACMwIAAxYBAAMcAQADIgEAAykBAANVAQADTQEAA0IBAAM5
|
AQAB8AHKAaYBAAEzBQABMwEAATMBAAEzAQACMwIAAxYBAAMcAQADIgEAAykBAANVAQADTQEAA0IBAAM5
|
||||||
AQABgAF8Af8BAAJQAf8BAAGTAQAB1gEAAf8B7AHMAQABxgHWAe8BAAHWAucBAAGQAakBrQIAAf8BMwMA
|
AQABgAF8Af8BAAJQAf8BAAGTAQAB1gEAAf8B7AHMAQABxgHWAe8BAAHWAucBAAGQAakBrQIAAf8BMwMA
|
||||||
|
55
oscardata/oscardata/KmProgressBar.cs
Executable file
55
oscardata/oscardata/KmProgressBar.cs
Executable file
@ -0,0 +1,55 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Drawing;
|
||||||
|
using System.Drawing.Drawing2D;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using System.Windows.Forms;
|
||||||
|
|
||||||
|
namespace oscardata
|
||||||
|
{
|
||||||
|
class KmProgressBar : ProgressBar
|
||||||
|
{
|
||||||
|
double myvalue = 0;
|
||||||
|
public KmProgressBar()
|
||||||
|
{
|
||||||
|
SetStyle(ControlStyles.UserPaint, true);
|
||||||
|
SetStyle(ControlStyles.OptimizedDoubleBuffer, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override void OnPaintBackground(PaintEventArgs pevent)
|
||||||
|
{
|
||||||
|
// None... Helps control the flicker.
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override void OnPaint(PaintEventArgs e)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
Rectangle rect = ClientRectangle;
|
||||||
|
Graphics g = e.Graphics;
|
||||||
|
Brush br = new SolidBrush(Color.FromArgb(255, ForeColor.R, ForeColor.G, ForeColor.B));
|
||||||
|
|
||||||
|
g.FillRectangle(Brushes.LightGray, rect);
|
||||||
|
rect.Inflate(-1, -1);
|
||||||
|
g.FillRectangle(Brushes.White, rect);
|
||||||
|
rect.Inflate(-1, -1);
|
||||||
|
|
||||||
|
double diff = Math.Abs(Value - myvalue);
|
||||||
|
if (Value > myvalue) myvalue += diff/10;
|
||||||
|
if (Value < myvalue) myvalue -= diff / 10;
|
||||||
|
|
||||||
|
//myvalue = Value;
|
||||||
|
|
||||||
|
if (myvalue > 0)
|
||||||
|
{
|
||||||
|
// As we doing this ourselves we need to draw the chunks on the progress bar
|
||||||
|
Rectangle clip = new Rectangle(rect.X, rect.Y, (int)Math.Round(((double)myvalue / Maximum) * rect.Width), rect.Height);
|
||||||
|
g.FillRectangle(br,clip);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch { }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -12,7 +12,7 @@ namespace oscardata.Properties {
|
|||||||
|
|
||||||
|
|
||||||
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
|
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
|
||||||
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "16.7.0.0")]
|
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "16.8.1.0")]
|
||||||
internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
|
internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
|
||||||
|
|
||||||
private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
|
private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
|
||||||
|
Binary file not shown.
@ -76,6 +76,8 @@ namespace oscardata
|
|||||||
public static int initVoiceStatus;
|
public static int initVoiceStatus;
|
||||||
public static int RXlevelDetected = 0;
|
public static int RXlevelDetected = 0;
|
||||||
public static int RXinSync = 0;
|
public static int RXinSync = 0;
|
||||||
|
public static int maxRXlevel = 0;
|
||||||
|
public static int maxTXlevel = 0;
|
||||||
|
|
||||||
|
|
||||||
public static String[] getOwnIPs()
|
public static String[] getOwnIPs()
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
<OutputType>WinExe</OutputType>
|
<OutputType>WinExe</OutputType>
|
||||||
<RootNamespace>oscardata</RootNamespace>
|
<RootNamespace>oscardata</RootNamespace>
|
||||||
<AssemblyName>oscardata</AssemblyName>
|
<AssemblyName>oscardata</AssemblyName>
|
||||||
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
|
<TargetFrameworkVersion>v4.5.2</TargetFrameworkVersion>
|
||||||
<FileAlignment>512</FileAlignment>
|
<FileAlignment>512</FileAlignment>
|
||||||
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
|
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
|
||||||
<TargetFrameworkProfile />
|
<TargetFrameworkProfile />
|
||||||
@ -71,6 +71,9 @@
|
|||||||
<DependentUpon>Form2_showtext.cs</DependentUpon>
|
<DependentUpon>Form2_showtext.cs</DependentUpon>
|
||||||
</Compile>
|
</Compile>
|
||||||
<Compile Include="imagehandler.cs" />
|
<Compile Include="imagehandler.cs" />
|
||||||
|
<Compile Include="KmProgressBar.cs">
|
||||||
|
<SubType>Component</SubType>
|
||||||
|
</Compile>
|
||||||
<Compile Include="Program.cs" />
|
<Compile Include="Program.cs" />
|
||||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||||
<Compile Include="receivefile.cs" />
|
<Compile Include="receivefile.cs" />
|
||||||
|
@ -24,11 +24,11 @@
|
|||||||
* =========================
|
* =========================
|
||||||
* 1) file header is received, get filename and file ID (which is the CRC16 over the complete file contents)
|
* 1) file header is received, get filename and file ID (which is the CRC16 over the complete file contents)
|
||||||
* 2) is this file already existing ? yes-> 3)
|
* 2) is this file already existing ? yes-> 3)
|
||||||
* 3) this file does not exist -> 4)
|
* this file does not exist -> 4)
|
||||||
*
|
*
|
||||||
* 3) file with this name and ID exists is already, cancel reception, show file
|
* 3) file with this name and ID exists is already, cancel reception, show file
|
||||||
*
|
*
|
||||||
* 4) file dows not exist, receive the blocks
|
* 4) file doews not exist, receive the blocks
|
||||||
* 5) a block is missing -> find a previous block-file with this name+ID. If exists, take the block from this file
|
* 5) a block is missing -> find a previous block-file with this name+ID. If exists, take the block from this file
|
||||||
* 6) reception complete, the files is OK -> save the file, delete a block file
|
* 6) reception complete, the files is OK -> save the file, delete a block file
|
||||||
* 7) reception complete, the files is incomplete -> save the block file for late use
|
* 7) reception complete, the files is incomplete -> save the block file for late use
|
||||||
@ -189,6 +189,8 @@ namespace oscardata
|
|||||||
if (!autoRXnum)
|
if (!autoRXnum)
|
||||||
blockidx = rxfrmnum;
|
blockidx = rxfrmnum;
|
||||||
|
|
||||||
|
Console.WriteLine("minfo:" + minfo + " framenum:" + rxfrmnum + " blockidx:" + blockidx);
|
||||||
|
|
||||||
Array.Copy(rxd, 10, rxdata, 0, rxd.Length - 10);
|
Array.Copy(rxd, 10, rxdata, 0, rxd.Length - 10);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -269,7 +271,10 @@ namespace oscardata
|
|||||||
|
|
||||||
public bool blockstat(int[] result)
|
public bool blockstat(int[] result)
|
||||||
{
|
{
|
||||||
|
// return if no blocks received
|
||||||
if (blockidx == 0) return false;
|
if (blockidx == 0) return false;
|
||||||
|
|
||||||
|
// count the number of good blocks
|
||||||
int ok = 0;
|
int ok = 0;
|
||||||
for (int i = 0; i <= blockidx; i++)
|
for (int i = 0; i <= blockidx; i++)
|
||||||
{
|
{
|
||||||
@ -278,6 +283,7 @@ namespace oscardata
|
|||||||
result[0] = blockidx+1; // +1 because we start with block 0
|
result[0] = blockidx+1; // +1 because we start with block 0
|
||||||
result[1] = ok;
|
result[1] = ok;
|
||||||
|
|
||||||
|
// store in lastblockvalid for later evaluation for status display on the screen
|
||||||
Array.Copy(blockvalid, lastblockvalid, blockvalid.Length);
|
Array.Copy(blockvalid, lastblockvalid, blockvalid.Length);
|
||||||
lastblockidx = blockidx;
|
lastblockidx = blockidx;
|
||||||
|
|
||||||
@ -385,10 +391,12 @@ namespace oscardata
|
|||||||
|
|
||||||
if (autoRXnum)
|
if (autoRXnum)
|
||||||
{
|
{
|
||||||
|
// for compatibility with old implementation which did not send a block number
|
||||||
blockidx++;
|
blockidx++;
|
||||||
Console.WriteLine("blockidx: do auto increment " + blockidx);
|
Console.WriteLine("blockidx: do auto increment " + blockidx);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// insert the received payload into the block buffer and set this block's status to "valid"
|
||||||
for (int i = 0; i < rxdata.Length; i++)
|
for (int i = 0; i < rxdata.Length; i++)
|
||||||
blockbuf[blockidx, i] = rxdata[i];
|
blockbuf[blockidx, i] = rxdata[i];
|
||||||
|
|
||||||
|
@ -125,6 +125,8 @@ namespace oscardata
|
|||||||
statics.CAPfifousage = b[1];
|
statics.CAPfifousage = b[1];
|
||||||
statics.RXlevelDetected = b[2];
|
statics.RXlevelDetected = b[2];
|
||||||
statics.RXinSync = b[3];
|
statics.RXinSync = b[3];
|
||||||
|
statics.maxRXlevel = b[4];
|
||||||
|
statics.maxTXlevel = b[5];
|
||||||
Byte[] b1 = new byte[b.Length - 4];
|
Byte[] b1 = new byte[b.Length - 4];
|
||||||
Array.Copy(b, 4, b1, 0, b1.Length);
|
Array.Copy(b, 4, b1, 0, b1.Length);
|
||||||
uq_fft.Add(b1);
|
uq_fft.Add(b1);
|
||||||
|
Loading…
Reference in New Issue
Block a user