From 01f82d2afbbba941ed092e84bb491f4b607cbe09 Mon Sep 17 00:00:00 2001 From: Kurt Date: Mon, 22 Feb 2021 15:58:19 +0100 Subject: [PATCH] update --- WinRelease/hsmodem.exe | Bin 305664 -> 316928 bytes WinRelease/oscardata.exe | Bin 879104 -> 881152 bytes hsmodem/Makefile | 15 +- hsmodem/announcement.cpp | 4 + hsmodem/distrubution.cpp | 117 ++++ hsmodem/extdata.cpp | 509 ++++++++++++++++++ hsmodem/fft.cpp | 4 +- hsmodem/fifo.cpp | 462 +++++----------- hsmodem/fifo.h | 17 + hsmodem/frame_packer.cpp | 18 +- hsmodem/hsmodem.cpp | 198 ++++--- hsmodem/hsmodem.h | 56 +- hsmodem/hsmodem.vcxproj | 13 + hsmodem/hsmodem.vcxproj.filters | 39 ++ hsmodem/html/websample.html | 101 ++++ hsmodem/kmtimer.cpp | 125 +++++ hsmodem/libkmaudio/libkmaudio.h | 8 +- hsmodem/libkmaudio/libkmaudio_capture.cpp | 2 +- .../libkmaudio/libkmaudio_capture_linux.cpp | 2 +- hsmodem/libkmaudio/libkmaudio_fifo.cpp | 11 +- hsmodem/libkmaudio/libkmaudio_init.cpp | 6 +- hsmodem/libkmaudio/libkmaudio_interface.cpp | 5 + hsmodem/libkmaudio/libkmaudio_playback.cpp | 20 +- .../libkmaudio/libkmaudio_playback_linux.cpp | 28 +- hsmodem/libkmaudio/portaudio.h | 6 +- hsmodem/liquid_if.cpp | 14 +- hsmodem/main_helper.cpp | 13 +- hsmodem/rtty.cpp | 144 ++--- hsmodem/udp.cpp | 2 +- hsmodem/voiceprocessor.cpp | 3 +- hsmodem/websocket/base64.cpp | 155 ++++++ hsmodem/websocket/base64.h | 19 + hsmodem/websocket/handshake.cpp | 73 +++ hsmodem/websocket/sha1.cpp | 389 +++++++++++++ hsmodem/websocket/sha1.h | 73 +++ hsmodem/websocket/websocketserver.cpp | 339 ++++++++++++ hsmodem/websocket/websocketserver.h | 87 +++ hsmodem/websocket/ws.cpp | 434 +++++++++++++++ hsmodem/websocket/ws_callbacks.cpp | 101 ++++ hsmodemLinux/hsmodem | Bin 414888 -> 440320 bytes hsmodemLinux/oscardata.exe | Bin 879104 -> 883712 bytes oscardata/oscardata/ArraySend.cs | 7 +- oscardata/oscardata/Form1.Designer.cs | 416 ++++++++------ oscardata/oscardata/Form1.cs | 358 ++++++++---- oscardata/oscardata/Form1.resx | 8 +- oscardata/oscardata/bin/Release/oscardata.exe | Bin 879104 -> 883712 bytes oscardata/oscardata/config.cs | 6 +- oscardata/oscardata/receivefile.cs | 57 +- oscardata/oscardata/udp.cs | 26 +- 49 files changed, 3643 insertions(+), 847 deletions(-) create mode 100755 hsmodem/distrubution.cpp create mode 100755 hsmodem/extdata.cpp create mode 100755 hsmodem/fifo.h create mode 100755 hsmodem/html/websample.html create mode 100755 hsmodem/kmtimer.cpp create mode 100755 hsmodem/websocket/base64.cpp create mode 100755 hsmodem/websocket/base64.h create mode 100755 hsmodem/websocket/handshake.cpp create mode 100755 hsmodem/websocket/sha1.cpp create mode 100755 hsmodem/websocket/sha1.h create mode 100755 hsmodem/websocket/websocketserver.cpp create mode 100755 hsmodem/websocket/websocketserver.h create mode 100755 hsmodem/websocket/ws.cpp create mode 100755 hsmodem/websocket/ws_callbacks.cpp diff --git a/WinRelease/hsmodem.exe b/WinRelease/hsmodem.exe index 430c8af304bce04fb7c5c2faa0c1b593699ef488..c44d35a495415faac44d2475036c6c4cab51e356 100755 GIT binary patch delta 79116 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 R6(dqx8-8LOkMA#^{(njI0F3|u delta 68114 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 VCpwMQw2a=N_0V>6#+Alg{vW8t{e%Dj diff --git a/WinRelease/oscardata.exe b/WinRelease/oscardata.exe index ac7c65a0d8f0536cb25801d0ca151f1585832de6..1f1953bdd68247a4f2931a2fbbbc3942833be643 100755 GIT binary patch delta 69528 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 delta 67640 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 RWLVdbcVhHESZ$8&{{V4FB0B&8 diff --git a/hsmodem/Makefile b/hsmodem/Makefile index fdac833..e7faec7 100755 --- a/hsmodem/Makefile +++ b/hsmodem/Makefile @@ -20,7 +20,14 @@ libkmaudio/libkmaudio_init_linux.o\ libkmaudio/libkmaudio_interface.o\ libkmaudio/libkmaudio_capture_linux.o\ libkmaudio/libkmaudio_playback_linux.o\ -libkmaudio/libkmaudio_resampler.o +libkmaudio/libkmaudio_resampler.o\ +websocket/ws.o\ +websocket/ws_callbacks.o\ +websocket/websocketserver.o\ +websocket/sha1.o\ +websocket/base64.o\ +websocket/handshake.o\ +extdata.o distrubution.o kmtimer.o default: $(OBJ) mkdir -p ../hsmodemLinux @@ -28,6 +35,6 @@ default: $(OBJ) g++ $(CXXFLAGS) -o ../hsmodemLinux/hsmodem $(OBJ) $(LDFLAGS) clean: - rm -f *.o - rm -f libkmaudio/*.o - rm -f libkmaudio/*.o + rm -r *.o + rm -r libkmaudio/*.o + rm -r websocket/*.o diff --git a/hsmodem/announcement.cpp b/hsmodem/announcement.cpp index 8afdf9b..86352b7 100755 --- a/hsmodem/announcement.cpp +++ b/hsmodem/announcement.cpp @@ -79,6 +79,7 @@ void playAudioPCM(char* fn, int destination) int16_t d[100]; printf("play:%s, caprate:%d\n", fn,caprate); FILE* fp = fopen(fn, "rb"); + const float ann_volume = 0.3f; // volume reduction for announcement if (fp) { while ((len = fread(d, sizeof(int16_t), 100, fp))) @@ -102,6 +103,8 @@ void playAudioPCM(char* fn, int destination) } sleep_ms(1); } + f = lowpass(f); + f *= ann_volume; // reduce volume float f1 = f / 32768; kmaudio_playsamples(voice_pbidx, &f1, 1, lsvol); } @@ -119,6 +122,7 @@ void playAudioPCM(char* fn, int destination) } f = lowpass(f); + f *= ann_volume; // reduce volume f /= 32768; if ((destination & 1) == 1) diff --git a/hsmodem/distrubution.cpp b/hsmodem/distrubution.cpp new file mode 100755 index 0000000..953d332 --- /dev/null +++ b/hsmodem/distrubution.cpp @@ -0,0 +1,117 @@ +/* +* High Speed modem to transfer data in a 2,7kHz SSB channel +* ========================================================= +* Author: DJ0ABR +* made for: AMSAT-DL +* +* (c) DJ0ABR +* www.dj0abr.de +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +* +* distribution.cpp ... handles priorities for hsmodem TX +*/ + +#include "hsmodem.h" + +#ifdef _LINUX_ +void* dist_function(void* param); +#endif +#ifdef _WIN32_ + void dist_function(void* param); +#endif + + +void init_distributor() +{ +#ifdef _LINUX_ + pthread_t dist_txthread; + pthread_create(&dist_txthread, NULL, dist_function, NULL); +#endif +#ifdef _WIN32_ + _beginthread(dist_function, 0, NULL); +#endif +} + +// TX thread +#ifdef _LINUX_ +void* dist_function(void* param) +{ + pthread_detach(pthread_self()); +#endif +#ifdef _WIN32_ +void dist_function(void* param) +{ +#endif + + uint8_t rxdata[500]; + int circ = 0; + + printf("Distributor running\n"); + while (keeprunning) + { + if (ann_running == 0) + { + // give all data sources the same priority + if (++circ >= 5) circ = 0; + + int len = 0; + switch (circ) + { + case 0: + len = read_fifo(PSK_GUI_TX, rxdata, sizeof(rxdata)); + break; + case 1: + len = read_fifo(EXT_TX, rxdata, sizeof(rxdata)); + break; + case 2: + len = read_fifo(EXT_SPECNB, rxdata, sizeof(rxdata)); + break; + case 3: + len = read_fifo(EXT_SPECWB, rxdata, sizeof(rxdata)); + break; + case 4: sleep_ms(10); //prevent process from eating 100% CPU time + break; + } + + if (len > 0) _sendToModulator(rxdata, len); + } + } + printf("Distributor exits\n"); + +#ifdef _LINUX_ + pthread_exit(NULL); // self terminate this thread + return NULL; +#endif +} + + +/* +* data.. to be sent to _sendToModulator +* put it into the PSK_GUI_TX fifo +*/ +void sendPSKdata(uint8_t* data, int len, int fifoID) +{ + write_fifo(fifoID, data, len); + //printf("into fifo:%d has now:%d of 100 elements (each 300 bytes long)\n", fifoID, fifo_usedspace(fifoID)); + + // wait until sent + while (keeprunning) + { + int us = fifo_usedspace(fifoID); + if (us <= 2) break; + sleep_ms(10); + } +} diff --git a/hsmodem/extdata.cpp b/hsmodem/extdata.cpp new file mode 100755 index 0000000..65e4cac --- /dev/null +++ b/hsmodem/extdata.cpp @@ -0,0 +1,509 @@ +/* +* High Speed modem to transfer data in a 2,7kHz SSB channel +* ========================================================= +* Author: DJ0ABR +* +* (c) DJ0ABR +* www.dj0abr.de +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +* +* extdata.c ... handle external data coming via udp 40135 +* +* Data format (Packet Length: 219 Byte, fits into one HSmodem payload) +* ==================================================================== +* Byte 0 ... Data Type +* Byte 1 ... Length +* Byte 2-218 .. data (217 Bytes) +* +* Data Type: +* types 0-31 ... reserved for HSmodem's internal use +* type 32-255 .. available for public use. Registration recommended to avoid identical use by different apps +* already defined by HSmodem: +* type 0 ... payload contains DX-cluster messages as ASCII text +* type 1 ... NB spectrum data +* +* Length: +* length of the data field, maximum: 217 +* +*/ + +#include "hsmodem.h" + +void makeSpecData(uint8_t* pdata, int len); +void handleNBSpecData(uint8_t *pdata, int len); +void makeWBSpecData(uint8_t* pdata, int len); +void handleWBSpecData(uint8_t* pdata, int len); + +uint32_t extDataID = 0x7743fa9f; + +// message received on UDP port 40135 +void ext_rxdata(uint8_t* pdata, int len, struct sockaddr_in* rxsock) +{ + if (extData_active == 0) return; + + uint32_t id = pdata[0]; + id <<= 8; + id += pdata[1]; + id <<= 8; + id += pdata[2]; + id <<= 8; + id += pdata[3]; + + if (id != extDataID) + { + printf("incoming data on 40135, wrong ID: %d\n", id); + return; + } + + if (pdata[4] == 0) + { + // DX cluster message + printf("DX cluster message received: <%s>\n", pdata + 5); + // pdata MUST have size: PAYLOADLEN + if (len != PAYLOADLEN) + { + printf("ext_rxdata wrong size:%d, need:%d, ignoring\n", len, PAYLOADLEN); + return; + } + + // 8 ... ExternalData + // 3 ... SingleFrame + // 1 ... repeat frame if TX currently down + modem_sendPSKData(pdata + 4, 8, 3, 1, EXT_TX); + } + + else if (pdata[4] == 1) + { + // NB spectrum data + makeSpecData(pdata + 4 + 1, len - 1 - 4); + } + + else if (pdata[4] == 2) + { + // CW Skimmer data + + // generate a full payload, padded with zeros + uint8_t payload[PAYLOADLEN]; + memset(payload, 0, PAYLOADLEN); + if (len > PAYLOADLEN) len = PAYLOADLEN; // just for security, will usually never happen + memcpy(payload, pdata + 4, len-4); + + printf("external CW Skimmer message ID: %d msglen:%d message<%s>\n", pdata[4], len, payload); + + // 8 ... ExternalData + // 3 ... SingleFrame + // 1 ... repeat frame if TX currently down + modem_sendPSKData(payload, 8, 3, 1, EXT_TX); + } + + else if (pdata[4] == 3) + { + // WB spectrum data + makeWBSpecData(pdata + 4 + 1, len - 1 - 4); + } + + else + { + printf("external message: %d msglen: %d unknown\n", pdata[0], len); + } +} + +// message received by modem +// length of pdata is PAYLOADLEN+10 (see frame_packer.c: getPayload()) +void ext_modemRX(uint8_t* pdata) +{ + static uint8_t lastpl[PAYLOADLEN]; + static uint8_t lastcwpl[PAYLOADLEN]; + + uint8_t* payload = pdata + 10; + // the first byte is the external-type specifier + if (payload[0] == 0) + { + if (memcmp(payload, lastpl, PAYLOADLEN)) + { + // new frame received + memcpy(lastpl, payload, PAYLOADLEN); + + // DX-cluster message + // send to websocket + ws_send(payload, PAYLOADLEN); + } + } + + if (payload[0] == 1) + { + handleNBSpecData(payload, PAYLOADLEN); + } + + if (payload[0] == 2) + { + if (memcmp(payload, lastcwpl, PAYLOADLEN)) + { + // new frame received + memcpy(lastcwpl, payload, PAYLOADLEN); + + // CW skimmer message + // send to websocket + ws_send(payload, PAYLOADLEN); + } + } + + if (payload[0] == 3) + { + handleWBSpecData(payload, PAYLOADLEN); + } + + // type=16 is also in use, see hsmodem (Bulletin) +} + +/* +* pdata: array of 550 16-bit values +* starting at 10489.475 with a resolution of 1 kHz +* up to 10490.025 which is a range of 550kHz (550 16bit values) +* left beacon 10489.500 is at index 25 (24..26) +*/ +void makeSpecData(uint8_t *pdata, int len) +{ + // check if TX fifo has data already + int us = fifo_usedspace(EXT_SPECNB); + if (us > 1) return; // ignore data + + const int mlen = 550; + if (len > mlen) len = mlen; + + // convert into 16 bit values + uint16_t sval[mlen]; + for (int i = 0; i < mlen; i++) + { + sval[i] = pdata[2 * i]; + sval[i] <<= 8; + sval[i] += pdata[2 * i + 1]; + } + + // measure value of left beacon + int vmax = 0; + for (int i = 24; i <= 26; i++) + if (sval[i] > vmax) vmax = sval[i]; + if (vmax < 1) vmax = 1; // avoid divide by zero error + + //printf("Beaconlevel: %d\n",vmax); + + // normalize to beaconlevel, which is 100% + // and 100% is 6 bit maximum, which is 63 + // also reduce length by 2, resulting in 275 values + const int vlen = mlen / 2; + uint8_t snormval[vlen]; + int idx = 0; + for (int i = 0; i < mlen; i+=2) + { + if (idx >= vlen) + { + printf("vlen too small\n"); + break; // just for security, will never happen + } + snormval[idx] = (uint8_t)((63 * sval[i]) / vmax); + uint8_t v = (uint8_t)((63 * sval[i+1]) / vmax); + if (v > snormval[idx]) snormval[idx] = v; + idx++; + } + + // here we have 275 values with a resolution of 2kHz + // each value is 6 bit long + // so we have 275 * 6 = 1650 bit, which is 207 byte, + // and fits into the extData payload of 217 byte + + //showbytestring("TX:",snormval,30,30); + + // store in average buffer + static uint16_t avgbuf[vlen]; + static int avganz = 0; + for (int i = 0; i < idx; i++) + //avgbuf[i] += snormval[i]; + if(avgbuf[i] < snormval[i]) avgbuf[i] = snormval[i]; + avganz++; + + /* + // check if TX fifo has data already + int us = fifo_usedspace(EXT_SPECNB); + if (us > 1) return; + + + // check if audio playback fifo is filled already + us = io_fifo_usedspace(io_pbidx); + if (us > 48000) return; // max 1s latency + */ + + // build average + //for (int i = 0; i < idx; i++) + // avgbuf[i] /= avganz; + avganz = 0; + + // snormval has 6-bit values, each in one byte + // convert it to a bitstream + uint8_t bitstream[PAYLOADLEN]; // the result will be shorter + int sbyte = 0, sbit = 0; + int dbyte = 1, dbit = 0; // dbyte=1 because bitstream[0] is the message ID + memset(bitstream, 0, sizeof(bitstream)); + while (1) + { + // read actual bit + uint8_t bit = avgbuf[sbyte] & (1 << sbit); + if (bit) bit = 1; + // write into bitstream + bitstream[dbyte] |= (bit << dbit); + // move source to next position + if (++sbit >= 6) + { + sbit = 0; + sbyte++; + if (sbyte == idx) break; // finished + } + // move destination to next position + if (++dbit >= 8) + { + dbit = 0; + dbyte++; + } + if (dbyte >= PAYLOADLEN) + { + printf("dbyte wrong:%d max is %d\n", dbyte, PAYLOADLEN); + break; + } + } + memset(avgbuf, 0, vlen * sizeof(uint16_t)); + // data in: bitstream, length of data: dbyte + + // send to modem + // 8 ... ExternalData + // 3 ... SingleFrame + // 1 ... repeat frame if TX currently down + + bitstream[0] = 1; // message ID for spectrum data + modem_sendPSKData(bitstream, 8, 3, 1, EXT_SPECNB); +} + +void handleNBSpecData(uint8_t *pdata, int len) +{ + // extract into original data + uint8_t odata[1000]; + int sby = 1, sbi = 0; + int dby = 1, dbi = 0; + memset(odata, 0, sizeof(odata)); + while (1) + { + // read actual bit + uint8_t bit = pdata[sby] & (1 << sbi); + if (bit) bit = 1; + // write into orig data + odata[dby] |= (bit << dbi); + // move source to next position + if (++sbi >= 8) + { + sbi = 0; + sby++; + if (sby >= len) break; // finished + } + // move destination to next position + if (++dbi >= 6) + { + dbi = 0; + dby++; + } + } + + //showbytestring("RX:", odata, 30, 30); + + // send to websocket + odata[0] = 1; + ws_send(odata, dby); +} + +/* +* Spectrum data format as received by the browser: +* ------------------------------------------------ +* Byte 0 ... fixed to 0 +* Byte 1 ... length MSB +* Byte 2 ... length LSB +* Byte 3 ... =1 identifies the message as NB spectrum +* Byte 4-278 ... spectrum data (275 values) +* +* spectrum data: +* -------------- +* 10489.525 - 10490.025 = 550kHz Resolution 2 kHz: 275 values +* each value has 6 bit. 0x3f is the maximum +*/ + +// WB Transponder + +/* +* pdata: array of 266 16-bit values +* starting at 10491.500 with a resolution of 30 kHz +* up to 10499.500 which is a range of 8000kHz (266 16bit values) +* left beacon 10491.500 is at index 0 (0..16) +*/ +void makeWBSpecData(uint8_t* pdata, int len) +{ + // check if TX fifo has data already + int us = fifo_usedspace(EXT_SPECWB); + if (us > 1) return; // ignore data + + const int mlen = 266; + if (len > mlen) len = mlen; + + // convert into 16 bit values + uint16_t sval[mlen]; + for (int i = 0; i < mlen; i++) + { + sval[i] = pdata[2 * i]; + sval[i] <<= 8; + sval[i] += pdata[2 * i + 1]; + } + + // measure value of left beacon + int vmax = 0; + for (int i = 0; i <= 16; i++) + if (sval[i] > vmax) vmax = sval[i]; + if (vmax < 1) vmax = 1; // avoid divide by zero error + + //printf("Beaconlevel: %d\n",vmax); + //showbytestring16("gultiti:", sval, 40); + + // substract 0-level then + // normalize to beaconlevel, which is 100% + // and 100% is 6 bit maximum, which is 63 + uint16_t WBnullLevel = 350; + uint8_t snormval[mlen]; + int idx = 0; + vmax -= WBnullLevel; + if (vmax < 0) vmax = 0; + for (int i = 0; i < mlen; i++) + { + int nv = sval[i] - WBnullLevel; + if (nv < 0) nv = 0; + uint8_t va = (uint8_t)((63 * nv) / vmax); + if (va > 63) va = 63; + snormval[idx] = va; + idx++; + } + + // here we have 266 values with a resolution of 30kHz + // each value is 6 bit long + // so we have 266 * 6 = 1596 bit, which is 199 byte, + // and fits into the extData payload of 217 byte + + //showbytestring("TX:",snormval,30,30); + + // store in average buffer + static uint16_t avgbuf[mlen]; + static int avganz = 0; + for (int i = 0; i < idx; i++) + //avgbuf[i] += snormval[i]; + if (avgbuf[i] < snormval[i]) avgbuf[i] = snormval[i]; + avganz++; + /* + // check if TX fifo has data already + int us = fifo_usedspace(EXT_SPECWB); + if (us > 1) return; + + // check if audio playback fifo is filled already + us = io_fifo_usedspace(io_pbidx); + if (us > 48000) return; // max 1s latency + */ + // build average + //for (int i = 0; i < idx; i++) + // avgbuf[i] /= avganz; + avganz = 0; + + // snormval has 6-bit values, each in one byte + // convert it to a bitstream + uint8_t bitstream[PAYLOADLEN]; // the result will be shorter + int sbyte = 0, sbit = 0; + int dbyte = 1, dbit = 0; // dbyte=1 because bitstream[0] is the message ID + memset(bitstream, 0, sizeof(bitstream)); + while (1) + { + // read actual bit + uint8_t bit = avgbuf[sbyte] & (1 << sbit); + if (bit) bit = 1; + // write into bitstream + bitstream[dbyte] |= (bit << dbit); + // move source to next position + if (++sbit >= 6) + { + sbit = 0; + sbyte++; + if (sbyte == idx) break; // finished + } + // move destination to next position + if (++dbit >= 8) + { + dbit = 0; + dbyte++; + } + if (dbyte >= PAYLOADLEN) + { + printf("dbyte wrong:%d max is %d\n", dbyte, PAYLOADLEN); + break; + } + } + memset(avgbuf, 0, mlen * sizeof(uint16_t)); + // data in: bitstream, length of data: dbyte + + // send to modem + // 8 ... ExternalData + // 3 ... SingleFrame + // 1 ... repeat frame if TX currently down + + bitstream[0] = 3; // message ID for WB spectrum data + modem_sendPSKData(bitstream, 8, 3, 1, EXT_SPECWB); +} + +// WB data received via HF +void handleWBSpecData(uint8_t* pdata, int len) +{ + // extract into original data + uint8_t odata[1000]; + int sby = 1, sbi = 0; + int dby = 1, dbi = 0; + memset(odata, 0, sizeof(odata)); + while (1) + { + // read actual bit + uint8_t bit = pdata[sby] & (1 << sbi); + if (bit) bit = 1; + // write into orig data + odata[dby] |= (bit << dbi); + // move source to next position + if (++sbi >= 8) + { + sbi = 0; + sby++; + if (sby >= len) break; // finished + } + // move destination to next position + if (++dbi >= 6) + { + dbi = 0; + dby++; + } + } + + //showbytestring("RX:", odata, 30, 30); + + // send to websocket + odata[0] = 3; + ws_send(odata, dby); +} diff --git a/hsmodem/fft.cpp b/hsmodem/fft.cpp index 034aaae..aa82f12 100755 --- a/hsmodem/fft.cpp +++ b/hsmodem/fft.cpp @@ -288,15 +288,13 @@ uint16_t* mean(uint16_t* f, int smoothX, int smoothY) void _init_fft() { - printf("init FFT\n"); fftcount = FFT_AUDIOSAMPLERATE / 2 + 1; // number of output samples // the FFT outputs 400 values from 0 to 4kHz with a resolution of 10 Hz _exit_fft(); din = (double *)fftw_malloc(sizeof(double) * FFT_AUDIOSAMPLERATE); cpout = (fftw_complex *)fftw_malloc(sizeof(fftw_complex) * fftcount); - - plan = fftw_plan_dft_r2c_1d(FFT_AUDIOSAMPLERATE, din, cpout, FFTW_MEASURE); + plan = fftw_plan_dft_r2c_1d(FFT_AUDIOSAMPLERATE, din, cpout, FFTW_MEASURE); // create arbitrary pre decimator // decimate 44.1k or 48k down to 8000Hz diff --git a/hsmodem/fifo.cpp b/hsmodem/fifo.cpp index 563539a..634098e 100755 --- a/hsmodem/fifo.cpp +++ b/hsmodem/fifo.cpp @@ -1,10 +1,16 @@ /* -* High Speed modem to transfer data in a 2,7kHz SSB channel -* ========================================================= +* Audio Library for Linux and Windows +* =================================== * Author: DJ0ABR * -* (c) DJ0ABR -* www.dj0abr.de +* Author: Kurt Moraw, Ham radio: DJ0ABR, github: dj0abr +* License: GPL-3 +* +* compilation: +* Windows ... Visual Studio +* Linux ... make +* +* Documentation see: libkmaudio.h * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -20,372 +26,168 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * -* fifo.c ... thread safe buffer for audio I/O -* +* fifo.cpp ... thread safe FIFOs * */ #include "hsmodem.h" +#define NUM_OF_FIFOS 20 - -/* -#ifdef _WIN32_ -CRITICAL_SECTION io_cap_crit_sec; -CRITICAL_SECTION io_pb_crit_sec; -#define IO_CAP_LOCK EnterCriticalSection(&io_cap_crit_sec) -#define IO_PB_LOCK EnterCriticalSection(&io_pb_crit_sec) -void IO_CAP_UNLOCK() +#ifdef WIN32 +CRITICAL_SECTION fifo_crit_sec[NUM_OF_FIFOS]; +#define LOCKFIFO(pn) EnterCriticalSection(&(fifo_crit_sec[pn])) +void UNLOCKFIFO(int pn) { - if (&io_cap_crit_sec != NULL) - LeaveCriticalSection(&io_cap_crit_sec); -} -void IO_PB_UNLOCK() -{ - if (&io_pb_crit_sec != NULL) - LeaveCriticalSection(&io_pb_crit_sec); + if (&(fifo_crit_sec[pn]) != NULL) + LeaveCriticalSection(&(fifo_crit_sec[pn])); } +#else +pthread_mutex_t fifo_crit_sec[NUM_OF_FIFOS]; +#define LOCKFIFO(pn) pthread_mutex_lock(&(fifo_crit_sec[pn])) +#define UNLOCKFIFO(pn) pthread_mutex_unlock(&(fifo_crit_sec[pn])) #endif -#ifdef _LINUX_ -pthread_mutex_t io_cap_crit_sec; -pthread_mutex_t io_pb_crit_sec; -#define IO_CAP_LOCK pthread_mutex_lock(&io_cap_crit_sec) -void IO_CAP_UNLOCK() { pthread_mutex_unlock(&io_cap_crit_sec); } -#define IO_PB_LOCK pthread_mutex_lock(&io_pb_crit_sec) -void IO_PB_UNLOCK() { pthread_mutex_unlock(&io_pb_crit_sec); } -#endif +#define FIFOBUFLEN 100 // number of fifo buffers +#define FIFOELEMENTLEN 300 // length of one fifo element -#define AUDIO_PLAYBACK_BUFLEN (48000 * 15) // space for 10 seconds of samples -#define AUDIO_CAPTURE_BUFLEN (10000) //48000)// * 10) // space for 10 seconds of samples +int wridx[NUM_OF_FIFOS]; +int rdidx[NUM_OF_FIFOS]; +int8_t buffer[NUM_OF_FIFOS][FIFOBUFLEN][FIFOELEMENTLEN]; -int io_cap_wridx = 0; -int io_cap_rdidx = 0; -float io_cap_buffer[AUDIO_CAPTURE_BUFLEN]; - -int io_pb_wridx = 0; -int io_pb_rdidx = 0; -float io_pb_buffer[AUDIO_PLAYBACK_BUFLEN]; - -void io_init_pipes() +void init_fifos() { -#ifdef _WIN32_ - if (&io_cap_crit_sec != NULL) DeleteCriticalSection(&io_cap_crit_sec); - InitializeCriticalSection(&io_cap_crit_sec); - - if (&io_pb_crit_sec != NULL) DeleteCriticalSection(&io_pb_crit_sec); - InitializeCriticalSection(&io_pb_crit_sec); - - io_clear_audio_fifos(); -#endif - - io_voice_init_pipes(); - rtty_init_pipes(); -} - -// write one sample into the fifo -// overwrite old data if the fifo is full -void io_cap_write_fifo(float sample) -{ - if (((io_cap_wridx + 1) % AUDIO_CAPTURE_BUFLEN) == io_cap_rdidx) - { - //printf("cap fifo full\n"); - return; - } - - IO_CAP_LOCK; - io_cap_buffer[io_cap_wridx] = sample; - if (++io_cap_wridx >= AUDIO_CAPTURE_BUFLEN) io_cap_wridx = 0; - IO_CAP_UNLOCK(); -} - -int io_cap_read_fifo(float* data) -{ - IO_CAP_LOCK; - - if (io_cap_rdidx == io_cap_wridx) - { - // Fifo empty, no data available - IO_CAP_UNLOCK(); - return 0; - } - - *data = io_cap_buffer[io_cap_rdidx]; - if (++io_cap_rdidx >= AUDIO_CAPTURE_BUFLEN) io_cap_rdidx = 0; - IO_CAP_UNLOCK(); - - return 1; -} - - -void io_cap_write_fifo_clear() -{ - io_cap_wridx = io_cap_rdidx = 0; -} - -int io_cap_fifo_freespace() -{ - int freebuf = 0; - - IO_CAP_LOCK; - - int elemInFifo = (io_cap_wridx + AUDIO_CAPTURE_BUFLEN - io_cap_rdidx) % AUDIO_CAPTURE_BUFLEN; - freebuf = AUDIO_CAPTURE_BUFLEN - elemInFifo; - - IO_CAP_UNLOCK(); - - return freebuf; -} - -int io_cap_fifo_usedPercent() -{ - int fs = io_cap_fifo_freespace(); - int used = AUDIO_CAPTURE_BUFLEN - fs; - used = (used * 100) / AUDIO_CAPTURE_BUFLEN; - return used; -} - -void io_pb_write_fifo(float sample) -{ - IO_PB_LOCK; - - // check if there is free space in fifo - if (io_pb_fifo_freespace(1) == 0) - { - IO_PB_UNLOCK(); - printf("************* pb fifo full\n"); - return; - } - - io_pb_buffer[io_pb_wridx] = sample; - if (++io_pb_wridx >= AUDIO_PLAYBACK_BUFLEN) io_pb_wridx = 0; - IO_PB_UNLOCK(); - //printf("write: pbw:%d pbr:%d\n",io_pb_wridx,io_pb_rdidx); -} - -void io_pb_write_fifo_clear() -{ - io_pb_wridx = io_pb_rdidx = 0; -} - -int io_pb_fifo_usedBlocks() -{ - int fs = io_pb_fifo_freespace(0); - int used = AUDIO_PLAYBACK_BUFLEN - fs; - used /= (txinterpolfactor * UDPBLOCKLEN * 8 / bitsPerSymbol); - return used; -} - -int io_pb_fifo_freespace(int nolock) -{ - int freebuf = 0; - - if (nolock == 0) IO_PB_LOCK; - - int elemInFifo = (io_pb_wridx + AUDIO_PLAYBACK_BUFLEN - io_pb_rdidx) % AUDIO_PLAYBACK_BUFLEN; - freebuf = AUDIO_PLAYBACK_BUFLEN - elemInFifo; - - if (nolock == 0) IO_PB_UNLOCK(); - - //printf("fifolen:%d check: pbw:%d pbr:%d freebuf:%d\n",AUDIO_PLAYBACK_BUFLEN,io_pb_wridx,io_pb_rdidx,freebuf); - - return freebuf; -} - -int io_pb_fifo_usedspace() -{ - IO_PB_LOCK; - int elemInFifo = (io_pb_wridx + AUDIO_PLAYBACK_BUFLEN - io_pb_rdidx) % AUDIO_PLAYBACK_BUFLEN; - IO_PB_UNLOCK(); - - return elemInFifo; -} - -// read num elements -// if num elems not avail, return all what fifo has stored -int io_pb_read_fifo_num(float* data, int num) -{ - IO_PB_LOCK; - - int elemInFifo = (io_pb_wridx + AUDIO_PLAYBACK_BUFLEN - io_pb_rdidx) % AUDIO_PLAYBACK_BUFLEN; - - if (elemInFifo == 0) - { - // Fifo empty, no data available - //printf("only %d elements available\n", elemInFifo); - IO_PB_UNLOCK(); - return 0; - } - - if (num > elemInFifo) - num = elemInFifo; - - for (int i = 0; i < num; i++) - { - *data++ = io_pb_buffer[io_pb_rdidx]; - if (++io_pb_rdidx >= AUDIO_PLAYBACK_BUFLEN) io_pb_rdidx = 0; - } - IO_PB_UNLOCK(); - - return num; -} - -void io_clear_audio_fifos() -{ - io_pb_write_fifo_clear(); - io_cap_write_fifo_clear(); -} -*/ -// ================== RTTY FIFO =================== - -void clear_rtty_fifos(); - -#ifdef _WIN32_ -CRITICAL_SECTION rtty_tx_crit_sec; -CRITICAL_SECTION rtty_rx_crit_sec; -#define RTTY_TX_LOCK EnterCriticalSection(&rtty_tx_crit_sec) -#define RTTY_RX_LOCK EnterCriticalSection(&rtty_rx_crit_sec) -void RTTY_TX_UNLOCK() -{ - if (&rtty_tx_crit_sec != NULL) - LeaveCriticalSection(&rtty_tx_crit_sec); -} -void RTTY_RX_UNLOCK() -{ - if (&rtty_rx_crit_sec != NULL) - LeaveCriticalSection(&rtty_rx_crit_sec); -} -#endif - -#ifdef _LINUX_ -pthread_mutex_t rtty_tx_crit_sec; -pthread_mutex_t rtty_rx_crit_sec; -#define RTTY_TX_LOCK pthread_mutex_lock(&rtty_tx_crit_sec) -void RTTY_TX_UNLOCK() { pthread_mutex_unlock(&rtty_tx_crit_sec); } -#define RTTY_RX_LOCK pthread_mutex_lock(&rtty_rx_crit_sec) -void RTTY_RX_UNLOCK() { pthread_mutex_unlock(&rtty_rx_crit_sec); } -#endif - -void rtty_init_pipes() -{ -#ifdef _WIN32_ + // init pipes only once static int f = 1; - if (f) { f = 0; - if (&rtty_tx_crit_sec != NULL) DeleteCriticalSection(&rtty_tx_crit_sec); - InitializeCriticalSection(&rtty_tx_crit_sec); - - if (&rtty_rx_crit_sec != NULL) DeleteCriticalSection(&rtty_rx_crit_sec); - InitializeCriticalSection(&rtty_rx_crit_sec); - } + for (int i = 0; i < NUM_OF_FIFOS; i++) + { +#ifdef WIN32 + if (&(fifo_crit_sec[i]) != NULL) DeleteCriticalSection(&(fifo_crit_sec[i])); + InitializeCriticalSection(&(fifo_crit_sec[i])); +#else + if (&(fifo_crit_sec[i]) != NULL) pthread_mutex_destroy(&(fifo_crit_sec[i])); + pthread_mutex_init(&(fifo_crit_sec[i]), NULL); #endif + } + } - clear_rtty_fifos(); + for (int i = 0; i < NUM_OF_FIFOS; i++) + fifo_clear(i); } -#define RTTY_FIFOLEN 200 - -int rtty_tx_wridx = 0; -int rtty_tx_rdidx = 0; -char rtty_tx_buffer[RTTY_FIFOLEN]; - -int rtty_rx_wridx = 0; -int rtty_rx_rdidx = 0; -char rtty_rx_buffer[RTTY_FIFOLEN]; - -// TX char from GUI to RTTY TX thread - -void clear_rtty_fifos() +// write into the fifo +// ignore data if the fifo is full +void write_fifo(int pipenum, uint8_t *pdata, int len) { - rtty_tx_wridx = rtty_tx_rdidx = 0; - rtty_rx_wridx = rtty_rx_rdidx = 0; -} + if (pipenum < 0 || pipenum >= NUM_OF_FIFOS) return; -int rtty_tx_fifo_freespace() -{ - int elemInFifo = (rtty_tx_wridx + RTTY_FIFOLEN - rtty_tx_rdidx) % RTTY_FIFOLEN; - return RTTY_FIFOLEN - elemInFifo; -} - -void clear_rtty_txfifo() -{ - RTTY_TX_LOCK; - rtty_tx_wridx = rtty_tx_rdidx = 0; - RTTY_TX_UNLOCK(); -} - -void rtty_tx_write_fifo(char c) -{ - RTTY_TX_LOCK; - - // check if there is free space in fifo - if (rtty_tx_fifo_freespace() == 0) + LOCKFIFO(pipenum); + if (((wridx[pipenum] + 1) % FIFOBUFLEN) == rdidx[pipenum]) { - RTTY_TX_UNLOCK(); + //printf("cannot WRITE fifo %d full\n",pipenum); + UNLOCKFIFO(pipenum); return; } - rtty_tx_buffer[rtty_tx_wridx] = c; - if (++rtty_tx_wridx >= RTTY_FIFOLEN) rtty_tx_wridx = 0; - RTTY_TX_UNLOCK(); + // as the first 2 bytes store the length, MSB first + buffer[pipenum][wridx[pipenum]][0] = len >> 8; + buffer[pipenum][wridx[pipenum]][1] = len & 0xff; + + // followed by the data + memcpy(buffer[pipenum][wridx[pipenum]] + 2, pdata, len); + if (++wridx[pipenum] >= FIFOBUFLEN) wridx[pipenum] = 0; + + UNLOCKFIFO(pipenum); } -int rtty_tx_read_fifo(char *pc) +// read from the fifo +// return: number of bytes read +int read_fifo(int pipenum, uint8_t* pdata, int maxlen) { - RTTY_TX_LOCK; - - if (rtty_tx_rdidx == rtty_tx_wridx) + if (pipenum < 0 || pipenum >= NUM_OF_FIFOS) { - // Fifo empty, no data available - RTTY_TX_UNLOCK(); + printf("read_fifo: wrong pipenum:%d (%d ..%d)\n", pipenum, 0, NUM_OF_FIFOS-1); return 0; } - *pc = rtty_tx_buffer[rtty_tx_rdidx]; - if (++rtty_tx_rdidx >= RTTY_FIFOLEN) rtty_tx_rdidx = 0; - RTTY_TX_UNLOCK(); + LOCKFIFO(pipenum); - return 1; -} - -int rtty_rx_fifo_freespace() -{ - int elemInFifo = (rtty_rx_wridx + RTTY_FIFOLEN - rtty_rx_rdidx) % RTTY_FIFOLEN; - return RTTY_FIFOLEN - elemInFifo; -} - -void rtty_rx_write_fifo(char c) -{ - RTTY_RX_LOCK; - - // check if there is free space in fifo - if (rtty_rx_fifo_freespace() == 0) - { - RTTY_RX_UNLOCK(); - return; - } - - rtty_rx_buffer[rtty_rx_wridx] = c; - if (++rtty_rx_wridx >= RTTY_FIFOLEN) rtty_rx_wridx = 0; - RTTY_RX_UNLOCK(); -} - -int rtty_rx_read_fifo(char* pc) -{ - RTTY_RX_LOCK; - - if (rtty_rx_rdidx == rtty_rx_wridx) + if (rdidx[pipenum] == wridx[pipenum]) { // Fifo empty, no data available - RTTY_RX_UNLOCK(); + //printf("read: no data\n"); + UNLOCKFIFO(pipenum); return 0; } - *pc = rtty_rx_buffer[rtty_rx_rdidx]; - if (++rtty_rx_rdidx >= RTTY_FIFOLEN) rtty_rx_rdidx = 0; - RTTY_RX_UNLOCK(); + // read length + int len = buffer[pipenum][rdidx[pipenum]][0]; + len <<= 8; + len += buffer[pipenum][rdidx[pipenum]][1]; + if (len > maxlen) + { + printf("read_fifo: %d, pdata too small. Need:%d has:%d\n", pipenum, len, maxlen); + return 0; // pdata too small + } + + // read data + memcpy(pdata, buffer[pipenum][rdidx[pipenum]] + 2, len); + if (++rdidx[pipenum] >= FIFOBUFLEN) rdidx[pipenum] = 0; + UNLOCKFIFO(pipenum); + + return len; +} + +void fifo_clear(int pipenum) +{ + if (pipenum < 0 || pipenum >= NUM_OF_FIFOS) return; + + wridx[pipenum] = rdidx[pipenum] = 0; +} + +int fifo_freespace(int pipenum) +{ + if (pipenum < 0 || pipenum >= NUM_OF_FIFOS) return 0; + + int freebuf = 0; + + LOCKFIFO(pipenum); + + int elemInFifo = (wridx[pipenum] + FIFOBUFLEN - rdidx[pipenum]) % FIFOBUFLEN; + freebuf = FIFOBUFLEN - elemInFifo; + + UNLOCKFIFO(pipenum); + return freebuf; +} + +int fifo_dataavail(int pipenum) +{ + LOCKFIFO(pipenum); + + if (rdidx[pipenum] == wridx[pipenum]) + { + // Fifo empty, no data available + UNLOCKFIFO(pipenum); + return 0; + } + UNLOCKFIFO(pipenum); return 1; } + +int fifo_usedspace(int pipenum) +{ + int us = FIFOBUFLEN - fifo_freespace(pipenum); + //printf("fifo:%d used space:%d\n", pipenum, us); + return us; +} + +int fifo_usedpercent(int pipenum) +{ + int used = FIFOBUFLEN - fifo_freespace(pipenum); + int percent = (used * 100) / FIFOBUFLEN; + return percent; +} diff --git a/hsmodem/fifo.h b/hsmodem/fifo.h new file mode 100755 index 0000000..809f8c6 --- /dev/null +++ b/hsmodem/fifo.h @@ -0,0 +1,17 @@ +#pragma once + +enum _FIFOUSAGE_ { + FIFO_RTTYTX = 0, + PSK_GUI_TX, + EXT_TX, + EXT_SPECNB, + EXT_SPECWB, +}; + +void init_fifos(); +void write_fifo(int pipenum, uint8_t* pdata, int len); +int read_fifo(int pipenum, uint8_t* data, int maxlen); +void fifo_clear(int pipenum); +int fifo_freespace(int pipenum); +int fifo_usedspace(int pipenum); +int fifo_usedpercent(int pipenum); diff --git a/hsmodem/frame_packer.cpp b/hsmodem/frame_packer.cpp index f353d33..e521210 100755 --- a/hsmodem/frame_packer.cpp +++ b/hsmodem/frame_packer.cpp @@ -108,11 +108,15 @@ uint8_t *Pack(uint8_t *payload, int type, int status, int *plen, int repeat) // polulate the raw frame // make the frame counter - if(repeat == 0 || type == 1) // 1=BER test - framecounter++; + // for type 8 (external app data) do not use frame counter + if (type != 8) + { + if (repeat == 0 || type == 1) // 1=BER test + framecounter++; - if (status == 0) - framecounter = 0; // start of file + if (status == 0) + framecounter = 0; // start of file + } // insert frame counter and status bits frame.counter_LSB = framecounter & 0xff; @@ -367,7 +371,11 @@ uint8_t *getPayload(uint8_t *rxb) framenumrx <<= 8; framenumrx += frame.counter_LSB; // frame counter LSB - if (lastframenum != framenumrx) rx_status |= 4; + if ((lastframenum != framenumrx) && (lastframenum != ((framenumrx+1)%1024))) + { + + rx_status |= 4; + } lastframenum = framenumrx; if (++lastframenum >= 1024) lastframenum = 0; // 1024 = 2^10 (10 bit frame number) diff --git a/hsmodem/hsmodem.cpp b/hsmodem/hsmodem.cpp index b865296..6d501ff 100755 --- a/hsmodem/hsmodem.cpp +++ b/hsmodem/hsmodem.cpp @@ -46,12 +46,13 @@ int keeprunning = 1; // UDP I/O int BC_sock_AppToModem = -1; int DATA_sock_AppToModem = -1; -int DATA_sock_FFT_from_GR = -1; -int DATA_sock_I_Q_from_GR = -1; +int DATA_sock_ExtToModem = -1; -int UdpBCport_AppToModem = 40131; -int UdpDataPort_AppToModem = 40132; -int UdpDataPort_ModemToApp = 40133; +int UdpBCport_AppToModem = 40131; // broadcast messages from GUI +int UdpDataPort_AppToModem = 40132; // data messages from GUI +int UdpDataPort_ModemToApp = 40133; // all messages to GUI +int TcpDataPort_WebSocket = 40134; // web socket data exchange to local browser +int UdpDataPort_ExtWebdata = 40135; // get data from ext. application to sent via modem // op mode depending values // default mode if not set by the app @@ -93,8 +94,8 @@ int io_pbidx = -1; int voice_capidx = -1; int voice_pbidx = -1; -int safemode = 0; int sendIntro = 0; +int extData_active = 0; char mycallsign[21]; char myqthloc[11]; @@ -198,11 +199,14 @@ int main(int argc, char* argv[]) #endif printf("user home path:<%s>\n", homepath); - init_tune(); - kmaudio_init(); - kmaudio_getDeviceList(); - init_packer(); - initFEC(); + init_fifos(); // init fifos for PSK data and RTTY characters + init_distributor(); // init distribution process for PSK data + init_tune(); // init tuning tones (mixed to signal) + kmaudio_init(); // init soundcard driver + kmaudio_getDeviceList();// get sound devices + init_packer(); // init PSK packer/unpacker + initFEC(); // init FEC calculator + ws_init(); // init Websocket // start udp RX to listen for broadcast search message from Application UdpRxInit(&BC_sock_AppToModem, UdpBCport_AppToModem, &bc_rxdata, &keeprunning); @@ -210,12 +214,16 @@ int main(int argc, char* argv[]) // start udp RX for data from application UdpRxInit(&DATA_sock_AppToModem, UdpDataPort_AppToModem, &appdata_rxdata, &keeprunning); + // start udp RX to listen for data from external program + // these data will be sent via QO100 (i.e.: to the receiver's websocket) + UdpRxInit(&DATA_sock_ExtToModem, UdpDataPort_ExtWebdata, &ext_rxdata, &keeprunning); + printf("QO100modem initialised and running\n"); while (keeprunning) { int wait = 1; - + if (restart_modems == 1) { printf("restart modem requested\n"); @@ -352,9 +360,10 @@ SPEEDRATE sr[NUMSPEEDMODES] = { void startModem() { - printf("startModem\n"); + printf("startModem. Speedmode:%d\n",set_speedmode); close_dsp(); close_rtty(); + fifo_clear(PSK_GUI_TX); speedmode = set_speedmode; if (speedmode < 0 || speedmode >= NUMSPEEDMODES) speedmode = 4; @@ -367,7 +376,6 @@ void startModem() rxPreInterpolfactor = sr[speedmode].rx; linespeed = sr[speedmode].linespeed; opusbitrate = sr[speedmode].codecrate; - // int TX audio and modulator io_capidx = kmaudio_startCapture(captureDeviceName, caprate); if (io_capidx == -1) @@ -375,7 +383,7 @@ void startModem() printf("CAP: cannot open device: %s\n", captureDeviceName); return; } - + io_pbidx = kmaudio_startPlayback(playbackDeviceName, caprate); if (io_pbidx == -1) { @@ -384,6 +392,7 @@ void startModem() } _init_fft(); + if (speedmode < 10) { init_dsp(); @@ -393,7 +402,6 @@ void startModem() rtty_txoff = 1; init_rtty(); } - init_tune(); } @@ -435,7 +443,7 @@ void initVoice() } } -// called from UDP callback ! DO NOT call any system functions +// called from UDP callback void setSpeedmode(int spm) { printf("set speedmode:%d\n", spm); @@ -475,7 +483,7 @@ uint8_t *getDevList(int* plen) txdata[2] = (io_pbidx != -1 && devlist[io_pbidx].working) ? '1' : '0'; txdata[3] = (voice_capidx != -1 && devlist[voice_capidx].working) ? '1' : '0'; txdata[4] = (voice_pbidx != -1 && devlist[voice_pbidx].working) ? '1' : '0'; - + return txdata; } @@ -501,12 +509,14 @@ void bc_rxdata(uint8_t* pdata, int len, struct sockaddr_in* rxsock) * 6 ... safe mode number * 7 ... send Intro * 8 ... rtty autosync - * 9 ... unused - * 10 .. 109 ... PB device name - * 110 .. 209 ... CAP device name - * 210 .. 229 ... Callsign - * 230 .. 239 ... qthloc - * 240 .. 259 ... Name + * 9 ... hsmodem speed mode + * 10 .. external data IF on/off + * 11-19 ... unused + * 20 .. 119 ... PB device name + * 120 .. 219 ... CAP device name + * 220 .. 239 ... Callsign + * 230 .. 249 ... qthloc + * 250 .. 269 ... Name */ char rxip[20]; @@ -555,23 +565,32 @@ void bc_rxdata(uint8_t* pdata, int len, struct sockaddr_in* rxsock) return; } - memcpy(mycallsign, pdata + 210, sizeof(mycallsign)); + memcpy(mycallsign, pdata + 220, sizeof(mycallsign)); mycallsign[sizeof(mycallsign) - 1] = 0; - memcpy(myqthloc, pdata + 230, sizeof(myqthloc)); + memcpy(myqthloc, pdata + 240, sizeof(myqthloc)); myqthloc[sizeof(myqthloc) - 1] = 0; - memcpy(myname, pdata + 240, sizeof(myname)); + memcpy(myname, pdata + 250, sizeof(myname)); myname[sizeof(myname) - 1] = 0; + if(pdata[9] != 255 && set_speedmode != pdata[9]) + setSpeedmode(pdata[9]); + //printf("<%s> <%s> <%s>\n", mycallsign, myqthloc, myname); //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)); - safemode = pdata[6]; + io_setAudioDevices(pdata[1], pdata[2], pdata[3], pdata[4], pdata[5], (char*)(pdata + 20), (char*)(pdata + 120)); sendIntro = pdata[7]; rtty_autosync = pdata[8]; + if (extData_active == 0 && pdata[10] == 1) + printf("ext.Data activated\n"); + else if (extData_active == 1 && pdata[10] == 0) + printf("ext.Data deactivated\n"); + + extData_active = pdata[10]; + lastms = actms; } } @@ -583,12 +602,17 @@ void appdata_rxdata(uint8_t* pdata, int len, struct sockaddr_in* rxsock) uint8_t minfo = pdata[1]; //printf("from GUI: %d %d\n", pdata[0], pdata[1]); - + // type values: see oscardata config.cs: frame types + if (type == 16) { - // Byte 1 contains the speed mode index - setSpeedmode(pdata[1]); + // a bulletin file from the GUI + // has to be sent to webbrowsers via websocket + //printf("Bulletin contents:\n<%s>\n", pdata + 1); + // the first byte (16) is used as the external type specifier + + ws_send(pdata, len); return; } @@ -741,7 +765,7 @@ void appdata_rxdata(uint8_t* pdata, int len, struct sockaddr_in* rxsock) if (type == 30) { // rtty key pressed - rtty_tx_write_fifo(minfo); + write_fifo(FIFO_RTTYTX,&minfo,1); return; } @@ -753,11 +777,13 @@ void appdata_rxdata(uint8_t* pdata, int len, struct sockaddr_in* rxsock) len += pdata[2]; len++; // the first toTX command //printf("hsmodem.cpp rtty_tx_write_fifo: "); - for (int i = 0; i < len; i++) + write_fifo(FIFO_RTTYTX, pdata+3,len); + + /*for (int i = 0; i < len; i++) { //printf("%c", pdata[3 + i]); - rtty_tx_write_fifo(pdata[3 + i]); - } + write_fifo(FIFO_RTTYTX, pdata[3 + i]); + }*/ //printf("\n"); return; } @@ -773,13 +799,14 @@ void appdata_rxdata(uint8_t* pdata, int len, struct sockaddr_in* rxsock) { // stop TX immediately rtty_txoff = 1; - clear_rtty_txfifo(); + fifo_clear(FIFO_RTTYTX); } } if (type >= 29 && type <= 32) return; if (speedmode == 10) return; + // here we are with payload data to be sent via the modulator if (len != (PAYLOADLEN + 2)) @@ -790,22 +817,12 @@ void appdata_rxdata(uint8_t* pdata, int len, struct sockaddr_in* rxsock) //if (getSending() == 1) return; // already sending (Array sending) + // send a payload if (minfo == 0 || minfo == 3) { // this is the first frame of a larger file sendAnnouncement(); - // send first frame multiple times, like a preamble, to give the - // receiver some time for synchronisation - // caprate: samples/s. This are symbols: caprate/txinterpolfactor - // and bits: symbols * bitsPerSymbol - // 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 - toGR_sendData(pdata + 2, type, minfo,0); - int numframespreamble = 6 * ((caprate / txinterpolfactor) * bitsPerSymbol / 8) / 258 + 1; - //if (type == 1)// BER Test - // numframespreamble = 1; - for (int i = 0; i < numframespreamble; i++) - toGR_sendData(pdata + 2, type, minfo,1); + toGR_sendData(pdata + 2, type, minfo, 5); // repeat the first frame a couple of times sendStationInfo(); } else if ((len - 2) < PAYLOADLEN) @@ -814,45 +831,63 @@ void appdata_rxdata(uint8_t* pdata, int len, struct sockaddr_in* rxsock) uint8_t payload[PAYLOADLEN]; memset(payload, 0, PAYLOADLEN); memcpy(payload, pdata + 2, len - 2); - 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); - } + + if (minfo == 2) // if its the last frame, repeate a couple of times + toGR_sendData(payload, type, minfo, 5); + else + toGR_sendData(payload, type, minfo, 0); // send only once } else { - 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); - } + // normal sending: continous or last frame + if (minfo == 2) // if its the last frame, repeate a couple of times + toGR_sendData(pdata + 2, type, minfo, 5); + else + toGR_sendData(pdata + 2, type, minfo, 0); } } +// pack and send PSK data void toGR_sendData(uint8_t* data, int type, int status, int repeat) { + modem_sendPSKData(data, type, status, repeat, PSK_GUI_TX); +} + +// pack and send PSK data +// handle repetitions and check if TX was down +// repeat: 0=do not repeat, 1=repeat if currently not sending, >1 = number of repetitions +void modem_sendPSKData(uint8_t* data, int type, int status, int repeat, int fifoID) +{ + // send the first frame normal (with a new frame counter value) int len = 0; - uint8_t* txdata = Pack(data, type, status, &len, repeat); + uint8_t* txdata = Pack(data, type, status, &len, 0); + if (txdata != NULL) + { + sendPSKdata(txdata, len, fifoID); + } + if (repeat == 0) return; - //showbytestring((char *)"TX: ", txdata, len); + // now check if repetitions are required + if (bitsPerSymbol == 0 || txinterpolfactor == 0) return; // just for security, no useful function + int repetitions = 6 * ((caprate / txinterpolfactor) * bitsPerSymbol / 8) / 258 + 1; - if (txdata != NULL) sendToModulator(txdata, len); + if (isPlaying(io_pbidx) == 0) // if not sending, repeat frame + { + if (repeat == 1) + repeat = repetitions; + else if (repeat > 1) + { + // if TX was down, do at least "repetitions" repetitions + if (repeat < repetitions) repeat = repetitions; + } + } + + // and the rest repeated if requested + txdata = Pack(data, type, status, &len, 1); + for (int i = 0; i < repeat; i++) + { + if (txdata != NULL) sendPSKdata(txdata, len, fifoID); + } } void sendStationInfo() @@ -869,7 +904,7 @@ void sendStationInfo() for (int i = 0; i < 2; i++) { - if (txdata != NULL) sendToModulator(txdata, len); + if (txdata != NULL) sendPSKdata(txdata, len, PSK_GUI_TX); } } @@ -885,6 +920,13 @@ void GRdata_rxdata(uint8_t* pdata, int len, struct sockaddr_in* rxsock) { // complete frame received //printf("type:%d\n", pl[0]); + + if (pl[0] == 8) + { + // external data received + ext_modemRX(pl); + } + // send payload to app uint8_t txpl[PAYLOADLEN + 10 + 1]; memcpy(txpl + 1, pl, PAYLOADLEN + 10); diff --git a/hsmodem/hsmodem.h b/hsmodem/hsmodem.h index 2cbd553..2868e1c 100755 --- a/hsmodem/hsmodem.h +++ b/hsmodem/hsmodem.h @@ -66,7 +66,9 @@ #include "codec2.h" #include "libkmaudio/soundio.h" #include "baudot.h" +#include "fifo.h" #include "libkmaudio/libkmaudio.h" +#include "websocket/websocketserver.h" #define jpg_tempfilename "rxdata.jpg" @@ -127,37 +129,6 @@ void measure_speed_bps(int len); void initFEC(); void GetFEC(uint8_t* txblock, int len, uint8_t* destArray); int cfec_Reconstruct(uint8_t* darr, uint8_t* destination); -/* -void io_pb_write_fifo_clear(); -int io_init_sound(char* pbname, char* capname); -int io_pb_fifo_freespace(int nolock); -void io_init_pipes(); -void io_clear_audio_fifos(); -void io_close_audio(); -int io_cap_read_fifo(float* data); -void io_readAudioDevices(); -uint8_t* io_getAudioDevicelist(int* len); -void io_pb_write_fifo(float sample); -int io_pb_fifo_usedspace(); -int io_cap_fifo_usedPercent(); -int io_pb_read_fifo_num(float* data, int num); -void io_clear_audio_fifos(); -int io_pb_fifo_usedBlocks(); -void io_voice_init_pipes(); -int io_mic_read_fifo(float* data); -void io_ls_write_fifo(float sample); -char* getDevID(char* devname, int io); -int io_init_voice(char* lsname, char* micname); -int min_int(int a, int b); -void io_close_voice(); -int io_ls_read_fifo_num(float* data, int num); -void io_mic_write_fifo(float sample); -void write_sample_s16ne(char* ptr, double sample); -int io_ls_fifo_usedspace(); -void write_sample_float32ne(char* ptr, double sample); -void io_clear_voice_fifos(); - -*/ void io_setPBvolume(int v); void io_setCAPvolume(int v); @@ -175,13 +146,15 @@ void modulator(uint8_t sym_in); void init_dsp(); int demodulator(); -void sendToModulator(uint8_t* d, int len); +void _sendToModulator(uint8_t* d, int len); void resetModem(); void close_dsp(); void _init_fft(); void _exit_fft(); void showbytestringf(char* title, float* data, int totallen, int anz); uint16_t* make_waterfall(float fre, int* retlen); +void sendPSKdata(uint8_t* data, int len, int fifoID); +void modem_sendPSKData(uint8_t* data, int type, int status, int repeat, int fifoID); void toCodecDecoder(uint8_t* pdata, int len); @@ -212,26 +185,22 @@ void playIntro(); float do_tuning(int send); void init_tune(); float singleFrequency(); -int rtty_rx(); -void modifyRXfreq(float diff_Hz, int absolute); void showbytestring16(char* title, uint16_t* data, int anz); -void rtty_sendChar(int c); void init_rtty(); -int do_rtty(); void make_FFTdata(float f); void close_rtty(); void close_a(); void rtty_modifyRXfreq(int); void showbitstring(char* title, uint8_t* data, int totallen, int anz); -void rtty_tx_write_fifo(char c); -int rtty_tx_read_fifo(char* pc); -void rtty_rx_write_fifo(char c); -int rtty_rx_read_fifo(char* pc); -void clear_rtty_txfifo(); void fmtest(); -void rtty_init_pipes(); void initVoice(); void sendStationInfo(); +void ext_rxdata(uint8_t* pdata, int len, struct sockaddr_in* rxsock); +void init_distributor(); +void ext_modemRX(uint8_t* pdata); +int fifo_dataavail(int pipenum); +void showbytestring32(char* title, uint32_t* data, int anz); +void start_timer(int mSec, void(*timer_func_handler)(void)); extern int speedmode; @@ -262,7 +231,6 @@ extern int trigger_resetmodem; extern int rxlevel_deteced; extern int rx_in_sync; extern int restart_modems; -extern int safemode; extern char homepath[]; extern int sendIntro; extern int tuning; @@ -280,7 +248,7 @@ extern float pbvol; extern float capvol; extern float lsvol; extern float micvol; - +extern int extData_active; #ifdef _LINUX_ int isRunning(char* prgname); diff --git a/hsmodem/hsmodem.vcxproj b/hsmodem/hsmodem.vcxproj index fee7d53..1289f49 100755 --- a/hsmodem/hsmodem.vcxproj +++ b/hsmodem/hsmodem.vcxproj @@ -228,6 +228,7 @@ + @@ -239,17 +240,23 @@ + + + + + + @@ -271,6 +278,12 @@ + + + + + + diff --git a/hsmodem/hsmodem.vcxproj.filters b/hsmodem/hsmodem.vcxproj.filters index 9a00d2a..dd1095b 100755 --- a/hsmodem/hsmodem.vcxproj.filters +++ b/hsmodem/hsmodem.vcxproj.filters @@ -105,6 +105,33 @@ Source Files + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + @@ -155,5 +182,17 @@ Header Files + + Header Files + + + Header Files + + + Header Files + + + Header Files + \ No newline at end of file diff --git a/hsmodem/html/websample.html b/hsmodem/html/websample.html new file mode 100755 index 0000000..ddae0d8 --- /dev/null +++ b/hsmodem/html/websample.html @@ -0,0 +1,101 @@ + + + + +QO-100 Data + + + + + + +HSmodem Websocket Example + + + diff --git a/hsmodem/kmtimer.cpp b/hsmodem/kmtimer.cpp new file mode 100755 index 0000000..abed129 --- /dev/null +++ b/hsmodem/kmtimer.cpp @@ -0,0 +1,125 @@ +/* +* High Speed modem to transfer data in a 2,7kHz SSB channel +* ========================================================= +* Author: DJ0ABR +* +* (c) DJ0ABR +* www.dj0abr.de + +websocket server: based on the work by: Davidson Francis + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see +* +* Repeatable Timer for various needs +* ================================== +* +*/ + +#include "hsmodem.h" + +/* +usage: + +void timerhandler_function(void) +{ +// called every time_in_ms +} + +start_timer(time_in_ms, &timerhandler_function); + +*/ + +void(*timer_func_handler_pntr)(void); + +#ifdef _LINUX_ + +struct itimerval timervalue; +struct sigaction new_handler, old_handler; +void timer_sig_handler(int); + +void start_timer(int mSec, void(*timer_func_handler)(void)) +{ + timer_func_handler_pntr = timer_func_handler; + + timervalue.it_interval.tv_sec = mSec / 1000; + timervalue.it_interval.tv_usec = (mSec % 1000) * 1000; + timervalue.it_value.tv_sec = mSec / 1000; + timervalue.it_value.tv_usec = (mSec % 1000) * 1000; + if (setitimer(ITIMER_REAL, &timervalue, NULL)) + { + printf("start_timer() error\n"); + return; + } + + new_handler.sa_handler = &timer_sig_handler; + new_handler.sa_flags = SA_NOMASK; + if (sigaction(SIGALRM, &new_handler, &old_handler)) + { + printf("sigaction() error\n"); + return; + } + + return; +} + + +void timer_sig_handler(int arg) +{ + timer_func_handler_pntr(); +} + + +void stop_timer(void) +{ + timervalue.it_interval.tv_sec = 0; + timervalue.it_interval.tv_usec = 0; + timervalue.it_value.tv_sec = 0; + timervalue.it_value.tv_usec = 0; + setitimer(ITIMER_REAL, &timervalue, NULL); + + sigaction(SIGALRM, &old_handler, NULL); +} + +#endif + +#ifdef WIN32 + +int ms; +unsigned int timethreadID = 0; +unsigned int __stdcall TimerThread(void* p); + +void start_timer(int mSec, void(*timer_func_handler)(void)) +{ + timer_func_handler_pntr = timer_func_handler; + ms = mSec; + + _beginthreadex(NULL, 0, TimerThread, NULL, 0, &timethreadID); +} + +unsigned int __stdcall TimerThread(void* p) +{ + HANDLE event_handle = CreateEvent(NULL, FALSE, FALSE, "mytimerhandle"); + while (keeprunning) + { + switch (WaitForSingleObject(event_handle, ms)) + { + case WAIT_TIMEOUT: + timer_func_handler_pntr(); + break; + } + } + return 0; +} + +#endif diff --git a/hsmodem/libkmaudio/libkmaudio.h b/hsmodem/libkmaudio/libkmaudio.h index 333f6c8..48e7559 100755 --- a/hsmodem/libkmaudio/libkmaudio.h +++ b/hsmodem/libkmaudio/libkmaudio.h @@ -200,12 +200,13 @@ int io_fifo_freespace(int pipenum); // returns number of used elements (audio 16 bit short values) int io_fifo_usedspace(int pipenum); -// like before, but returns a number between 0 and 100 % -int io_fifo_usedpercent(int pipenum); // clear the fifo void io_fifo_clear(int pipenum); +// check if a playbackdevice is currently playing +int isPlaying(int id); + // -------- functions for internal use only -------- @@ -222,6 +223,7 @@ typedef struct _DEVLIST_ { int requested_samprate = 0; // sample rate requested by caller int real_samprate = 0; // real sample rate of the device int working = 0; // 0=not running, 1=initialized and working + int audio_playing = 0; // audio is currently playing, or not #ifdef WIN32 // Windows using portaudio int devnum = -1; // port audio device number PaStreamParameters inputParameters; @@ -262,7 +264,7 @@ void close_playback_stream(int idx); extern DEVLIST devlist[MAXDEVICES]; extern int devanz; -extern int keeprunning; +extern int keepcallbacksrunning; #ifndef WIN32 // Linux int kmaudio_init_linux(); diff --git a/hsmodem/libkmaudio/libkmaudio_capture.cpp b/hsmodem/libkmaudio/libkmaudio_capture.cpp index be26da7..eeccd23 100755 --- a/hsmodem/libkmaudio/libkmaudio_capture.cpp +++ b/hsmodem/libkmaudio/libkmaudio_capture.cpp @@ -150,7 +150,7 @@ int recordCallback( const void* inputBuffer, (void)timeInfo; (void)statusFlags; - if(keeprunning == 1) + if(keepcallbacksrunning == 1) return paContinue; return paComplete; diff --git a/hsmodem/libkmaudio/libkmaudio_capture_linux.cpp b/hsmodem/libkmaudio/libkmaudio_capture_linux.cpp index b586ddd..829c494 100755 --- a/hsmodem/libkmaudio/libkmaudio_capture_linux.cpp +++ b/hsmodem/libkmaudio/libkmaudio_capture_linux.cpp @@ -66,7 +66,7 @@ void read_callback(struct SoundIoInStream* instream, int frame_count_min, int fr struct SoundIoChannelArea* areas; // samples are in areas.ptr int frames_left = frame_count_max; // take all - while (keeprunning) + while (keepcallbacksrunning) { int frame_count = frames_left; if ((err = soundio_instream_begin_read(instream, &areas, &frame_count))) diff --git a/hsmodem/libkmaudio/libkmaudio_fifo.cpp b/hsmodem/libkmaudio/libkmaudio_fifo.cpp index aeaba6f..b38fe3c 100755 --- a/hsmodem/libkmaudio/libkmaudio_fifo.cpp +++ b/hsmodem/libkmaudio/libkmaudio_fifo.cpp @@ -233,7 +233,7 @@ int io_fifo_elems_avail(int pipenum) elems = (io_wridx[pipenum] + AUDIO_FIFOFLEN - io_rdidx[pipenum]) % AUDIO_FIFOFLEN; UNLOCK(pipenum); - elems -= 10; + elems -= 10; // give some reserve return elems; } @@ -241,12 +241,3 @@ int io_fifo_usedspace(int pipenum) { return AUDIO_FIFOFLEN - io_fifo_freespace(pipenum); } - -int io_fifo_usedpercent(int pipenum) -{ - int used = AUDIO_FIFOFLEN - io_fifo_freespace(pipenum); - int percent = (used * 100) / AUDIO_FIFOFLEN; - //printf("idx:%d used:%d size:%d percent:%d\n", pipenum, used, AUDIO_FIFOFLEN, percent); - return percent; -} - diff --git a/hsmodem/libkmaudio/libkmaudio_init.cpp b/hsmodem/libkmaudio/libkmaudio_init.cpp index 0e3ec8d..23e3281 100755 --- a/hsmodem/libkmaudio/libkmaudio_init.cpp +++ b/hsmodem/libkmaudio/libkmaudio_init.cpp @@ -34,7 +34,7 @@ void kmaudio_close(); -//int keeprunning = 1; // to stop callbacks at program end +int keepcallbacksrunning = 1; // to stop callbacks at program end int kmaudio_init() { @@ -43,7 +43,7 @@ int kmaudio_init() printf("libkmaudio_init\n"); - keeprunning = 1; + keepcallbacksrunning = 1; init_pipes(); // init fifo init_maxarray(); // init array for maxlevel measurement @@ -86,7 +86,7 @@ void kmaudio_close() #else kmaudio_close_linux(); #endif - keeprunning = 0; + keepcallbacksrunning = 0; } /* // diagonstic routines for development diff --git a/hsmodem/libkmaudio/libkmaudio_interface.cpp b/hsmodem/libkmaudio/libkmaudio_interface.cpp index 44116a3..31d4f00 100755 --- a/hsmodem/libkmaudio/libkmaudio_interface.cpp +++ b/hsmodem/libkmaudio/libkmaudio_interface.cpp @@ -123,6 +123,11 @@ void getMax(int id, float fv) farridx[id] = 0; } +int isPlaying(int id) +{ + return devlist[id].audio_playing; +} + /* * returns the max level (within 1 second) of this stream in % (0..100) * if the level >= 100 the signal will get clipped and distorted diff --git a/hsmodem/libkmaudio/libkmaudio_playback.cpp b/hsmodem/libkmaudio/libkmaudio_playback.cpp index 3d24d5f..3a40390 100755 --- a/hsmodem/libkmaudio/libkmaudio_playback.cpp +++ b/hsmodem/libkmaudio/libkmaudio_playback.cpp @@ -142,6 +142,7 @@ int playCallback( const void* inputBuffer, //measure_speed_bps(framesPerBuffer); + /* das hier ging int16_t f[FRAMES_PER_BUFFER]; memset(f, 0, sizeof(int16_t) * FRAMES_PER_BUFFER); unsigned int num = io_read_fifo_num_short(devidx, f, framesPerBuffer); @@ -150,6 +151,23 @@ int playCallback( const void* inputBuffer, //printf("got %d from fifo, requested %d\n", num, framesPerBuffer); } int av = io_fifo_elems_avail(devidx); + das nächste ist neu + */ + + int16_t f[FRAMES_PER_BUFFER]; + // if fifo does not have enough data, just send 0.. (silence) + // this gives the fifo a chance to fill up a bit + memset(f, 0, sizeof(int16_t) * FRAMES_PER_BUFFER); + if ((unsigned long)io_fifo_elems_avail(devidx) >= framesPerBuffer) + { + io_read_fifo_num_short(devidx, f, framesPerBuffer); + devlist[devidx].audio_playing = 1; + } + else + { + // nothing to send + devlist[devidx].audio_playing = 0; + } for (unsigned int i = 0; i < framesPerBuffer; i++) { @@ -166,7 +184,7 @@ int playCallback( const void* inputBuffer, (void)timeInfo; (void)statusFlags; - if (keeprunning == 1) + if (keepcallbacksrunning == 1) return paContinue; return paComplete; diff --git a/hsmodem/libkmaudio/libkmaudio_playback_linux.cpp b/hsmodem/libkmaudio/libkmaudio_playback_linux.cpp index e5af6ae..294ded2 100755 --- a/hsmodem/libkmaudio/libkmaudio_playback_linux.cpp +++ b/hsmodem/libkmaudio/libkmaudio_playback_linux.cpp @@ -85,12 +85,20 @@ static void write_callback(struct SoundIoOutStream* outstream, int frame_count_m } float f[10000]; + // if fifo does not have enough data, just send 0.. (silence) + // this gives the fifo a chance to fill up a bit memset(f, 0, sizeof(float) * frame_count); if (io_fifo_elems_avail(idx) >= frame_count) { - // if fifo does not have enough data, don't take any - // this gives the fifo a chance to fill up a bit io_read_fifo_num(idx, f, frame_count); + //if (devlist[idx].audio_playing == 0) printf("NOW PLAYING\n"); + devlist[idx].audio_playing = 1; + } + else + { + // nothing to send + //if (devlist[idx].audio_playing == 1) printf("STOPS playing\n"); + devlist[idx].audio_playing = 0; } //measure_speed_bps(frame_count); @@ -132,8 +140,6 @@ static void write_callback(struct SoundIoOutStream* outstream, int frame_count_m void underflow_callback(struct SoundIoOutStream* outstream) { - static int count = 0; - printf("underflow %d\n", count++); } void close_playback_stream(int idx) @@ -148,7 +154,7 @@ void close_playback_stream(int idx) int kmaudio_startPlayback(char* devname, int samprate) { printf("Start request for PB stream:%s\n", devname); - + if (devname == NULL || strlen(devname) < 3) // no devices defined yet { printf("no PB devices specified\n"); @@ -157,10 +163,11 @@ int kmaudio_startPlayback(char* devname, int samprate) int idx = 0; // index into devlist char* pbdevid = getDevID(devname, 1, &idx); + printf("idx:%d\n", idx); if (pbdevid == NULL) return -1; close_playback_stream(idx); - + printf("Starting PB stream:%s [%d]\n", devname, idx); io_fifo_clear(idx); @@ -199,7 +206,7 @@ int kmaudio_startPlayback(char* devname, int samprate) printf("soundio_outstream_create: out of memory\n"); return 0; } - + devlist[idx].requested_samprate = samprate; if (getRealSamprate(idx) == -1) { @@ -209,7 +216,7 @@ int kmaudio_startPlayback(char* devname, int samprate) if (devlist[idx].requested_samprate != devlist[idx].real_samprate) resampler_create(idx); - + devlist[idx].outstream->format = SoundIoFormatFloat32NE; devlist[idx].outstream->sample_rate = devlist[idx].real_samprate; devlist[idx].outstream->software_latency = 0.1f; @@ -227,12 +234,13 @@ int kmaudio_startPlayback(char* devname, int samprate) printf("unable to start output device: %s", soundio_strerror(err)); return -1; } - + printf("selected PLAYBACK device:\nname:%s\nid :%s\n", devname, pbdevid); printf("physical playback rate:%d, requested capture rate:%d\n", devlist[idx].real_samprate, devlist[idx].requested_samprate); printf("format: %s\n\n", soundio_format_string(devlist[idx].outstream->format)); - + devlist[idx].working = 1; + return idx; } diff --git a/hsmodem/libkmaudio/portaudio.h b/hsmodem/libkmaudio/portaudio.h index 8a94aaf..e68858b 100755 --- a/hsmodem/libkmaudio/portaudio.h +++ b/hsmodem/libkmaudio/portaudio.h @@ -124,9 +124,9 @@ typedef enum PaErrorCode paNoError = 0, paNotInitialized = -10000, - paUnanticipatedHostError, - paInvalidChannelCount, - paInvalidSampleRate, + paUnanticipatedHostError, // -9999 + paInvalidChannelCount, // -9998 + paInvalidSampleRate, // -9997 paInvalidDevice, paInvalidFlag, paSampleFormatNotSupported, diff --git a/hsmodem/liquid_if.cpp b/hsmodem/liquid_if.cpp index 064254c..4f75376 100755 --- a/hsmodem/liquid_if.cpp +++ b/hsmodem/liquid_if.cpp @@ -143,7 +143,7 @@ void close_modulator() // d ... symbols to send // len ... number of symbols in d -void sendToModulator(uint8_t *d, int len) +void _sendToModulator(uint8_t *d, int len) { if(upnco == NULL) return; @@ -304,15 +304,25 @@ void make_FFTdata(float f) if (speedmode < 10) { // Bytes in Fifo + /* int bus = io_fifo_usedspace(io_pbidx); // Payloads in fifo + if (bitsPerSymbol == 0 || txinterpolfactor == 0) return; // just for security, no useful function us = bus / (txinterpolfactor * UDPBLOCKLEN * 8 / bitsPerSymbol); + */ + + // checke PSK_GUI_TX + us = fifo_usedspace(PSK_GUI_TX); + + //printf("bytes:%d blocks:%d\n", bus, us); } if (speedmode == 10) { // RTTY us = io_fifo_usedspace(io_pbidx); + us = us * 20 / 48000; + //printf("bytes:%d\n", us); } if (us > 255 || ann_running == 1) us = 255; @@ -332,6 +342,8 @@ void make_FFTdata(float f) txpl[bidx++] = rtty_frequency >> 8; // rtty qrg by autosync txpl[bidx++] = rtty_frequency & 0xff; + txpl[bidx++] = rtty_txoff ? 0 : 1; // TX on/off + for (int i = 0; i < fftlen; i++) { txpl[bidx++] = fft[i] >> 8; diff --git a/hsmodem/main_helper.cpp b/hsmodem/main_helper.cpp index 666bebc..1cb8429 100755 --- a/hsmodem/main_helper.cpp +++ b/hsmodem/main_helper.cpp @@ -109,7 +109,7 @@ void showbitstring(char* title, uint8_t* data, int totallen, int anz) void showbytestring(char *title, uint8_t *data, int totallen, int anz) { - printf("%s. len %d: ",title, totallen); + printf("%s. len % 4d: ",title, totallen); for(int i=0; i 0) { - baudot_encoder(csend, bd, &anz); - //printf("read fifo: %d -> %02X\n", csend, bd[0]); + //printf("from fifo:%d <%s>\n", rlen, pcsend); + for (int ilen = 0; ilen < rlen; ilen++) + { + baudot_encoder(pcsend[ilen], bd, &anz); + for (int il = 0; il < anz; il++) + { + send_baudot(bd[il]); + //printf("send: %d -> %02X\n", pcsend[ilen], bd[il]); + } + } } else { - bd[0] = 0x1f; // idle - anz = 1; - if (rtty_txoff == 1) { sleep_ms(10); @@ -535,63 +542,7 @@ void rtty_tx_function(void* param) } if (rtty_txoff > 1) rtty_txoff--; - } - - //if(bd[0] != 0x1f) printf("send chars: %02X\n",bd[0]); - - for (int i = 0; i < anz; i++) - { - char c = bd[i]; - // c is the baudot code, fill into final byte cs - uint8_t cs = 0; - cs |= ((c & 1) ? 0x40 : 0); - cs |= ((c & 2) ? 0x20 : 0); - cs |= ((c & 4) ? 0x10 : 0); - cs |= ((c & 8) ? 0x08 : 0); - cs |= ((c & 16) ? 0x04 : 0); - cs &= ~0x80; // Start bit to 1 - cs |= 3; // 2 stop bits - - // send cs bit per bit - for (int bitidx = 7; bitidx >= 0; bitidx--) - { - if (run_rtty_threads == 0) break; - - //measure_speed_bps(1); - - unsigned int sym_in = (cs & (1 << bitidx)) ? 1 : 0; - - for (int twice = 0; twice < 4; twice++) - { - if (bitidx == 0 && twice == 2) break; //last bit only once - - fskmod_modulate(modi, sym_in, &(buf_tx[0])); - - // move sample to 1,5kHz carrier - for (int j = 0; j < k; j++) - { - nco_crcf_step(rtty_upnco); - liquid_float_complex outb; - nco_crcf_mix_up(rtty_upnco, buf_tx[j], &outb); - - float usbf = outb.real + outb.imag; - - // adapt to audio sample rate - int fs; - while (keeprunning && run_rtty_threads) - { - fs = io_fifo_usedspace(io_pbidx); - //printf("%d\n", fs); - // attention: if this number is too low, the audio write callback will not process it - if (fs < 24000) break; - sleep_ms(10); - } - - usbf *= 0.2f; - kmaudio_playsamples(io_pbidx, &usbf, 1, pbvol); - } - } - } + send_baudot(0); // idle } } #ifdef _LINUX_ @@ -600,6 +551,61 @@ void rtty_tx_function(void* param) #endif } +// send one baudot byte +void send_baudot(char c) +{ + // c is the baudot code, fill into final byte cs + uint8_t cs = 0; + cs |= ((c & 1) ? 0x40 : 0); + cs |= ((c & 2) ? 0x20 : 0); + cs |= ((c & 4) ? 0x10 : 0); + cs |= ((c & 8) ? 0x08 : 0); + cs |= ((c & 16) ? 0x04 : 0); + cs &= ~0x80; // Start bit to 1 + cs |= 3; // 2 stop bits + + // send cs bit per bit + for (int bitidx = 7; bitidx >= 0; bitidx--) + { + if (run_rtty_threads == 0) break; + + //measure_speed_bps(1); + + unsigned int sym_in = (cs & (1 << bitidx)) ? 1 : 0; + + for (int twice = 0; twice < 4; twice++) + { + if (bitidx == 0 && twice == 2) break; //last bit only once + + fskmod_modulate(modi, sym_in, &(buf_tx[0])); + + // move sample to 1,5kHz carrier + for (int j = 0; j < k; j++) + { + nco_crcf_step(rtty_upnco); + liquid_float_complex outb; + nco_crcf_mix_up(rtty_upnco, buf_tx[j], &outb); + + float usbf = outb.real + outb.imag; + + // adapt to audio sample rate + int fs; + while (keeprunning && run_rtty_threads) + { + fs = io_fifo_usedspace(io_pbidx); + //printf("%d\n", fs); + // attention: if this number is too low, the audio write callback will not process it + if (fs < 24000) break; + sleep_ms(10); + } + + usbf *= 0.015f; // make RTTY signal smaller then PSK + kmaudio_playsamples(io_pbidx, &usbf, 1, pbvol); + } + } + } +} + // RTTY RX thread #ifdef _LINUX_ void* rtty_rx_function(void* param) @@ -662,7 +668,7 @@ void rtty_rx_function(void* param) nco_crcf_mix_down(rtty_dnnco, rx1500, &dc_out); // sharp filter - firfilt_crcf_push(rtty_q, dc_out); // push input sample + firfilt_crcf_push(rtty_q, dc_out); // push input sample firfilt_crcf_execute(rtty_q, &(buf_rx[bridx])); // compute output bridx++; @@ -677,7 +683,7 @@ void rtty_rx_function(void* param) if (db != -1) { char lt = baudot_decoder((uint8_t)db); - //printf("rxbyte:%02X deoced:%02X\n", db, lt); + //printf("rxbyte:%02X decoded:%02X\n", db, lt); if (lt > 0) sendRttyToGUI(lt); } diff --git a/hsmodem/udp.cpp b/hsmodem/udp.cpp index a3a987b..301b001 100755 --- a/hsmodem/udp.cpp +++ b/hsmodem/udp.cpp @@ -114,7 +114,7 @@ void threadfunction(void* param) { RXCFG rxcfg; memcpy((uint8_t *)(&rxcfg), (uint8_t *)param, sizeof(RXCFG)); int recvlen; - const int maxUDPpacketsize = 1024; + const int maxUDPpacketsize = 2048; char rxbuf[maxUDPpacketsize]; struct sockaddr_in fromSock; fromlen = sizeof(struct sockaddr_in); diff --git a/hsmodem/voiceprocessor.cpp b/hsmodem/voiceprocessor.cpp index 5f6d844..98ecc6b 100755 --- a/hsmodem/voiceprocessor.cpp +++ b/hsmodem/voiceprocessor.cpp @@ -171,7 +171,8 @@ void sendCodecToModulator(uint8_t *pdata, int len) { // we have to check if the TX fifo has enough data. In case of an underrun the Q(8A)PSK signal will be distorted int us = io_fifo_usedspace(io_pbidx); - if (us < 20000) + if (us > 20000) break; // too many data in playback fifo, do nothing + if (us < 5000) { //printf("tx filler\n"); // not enough samples in the TX buffer diff --git a/hsmodem/websocket/base64.cpp b/hsmodem/websocket/base64.cpp new file mode 100755 index 0000000..0acda24 --- /dev/null +++ b/hsmodem/websocket/base64.cpp @@ -0,0 +1,155 @@ +/* + * Base64 encoding/decoding (RFC1341) + * Copyright (c) 2005-2011, Jouni Malinen + * + * This software may be distributed under the terms of the BSD license. + * See README for more details. + */ + +#include +#include +#include +#include "base64.h" + +static const unsigned char base64_table[65] = + "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; + +/** + * base64_encode - Base64 encode + * @src: Data to be encoded + * @len: Length of the data to be encoded + * @out_len: Pointer to output length variable, or %NULL if not used + * Returns: Allocated buffer of out_len bytes of encoded data, + * or %NULL on failure + * + * Caller is responsible for freeing the returned buffer. Returned buffer is + * nul terminated to make it easier to use as a C string. The nul terminator is + * not included in out_len. + */ +unsigned char * base64_encode(const unsigned char *src, size_t len, + size_t *out_len) +{ + unsigned char *out, *pos; + const unsigned char *end, *in; + size_t olen; + int line_len; + + olen = len * 4 / 3 + 4; /* 3-byte blocks to 4-byte */ + olen += olen / 72; /* line feeds */ + olen++; /* nul termination */ + if (olen < len) + return NULL; /* integer overflow */ + out = (unsigned char *)malloc(olen); + if (out == NULL) + return NULL; + + end = src + len; + in = src; + pos = out; + line_len = 0; + while (end - in >= 3) { + *pos++ = base64_table[in[0] >> 2]; + *pos++ = base64_table[((in[0] & 0x03) << 4) | (in[1] >> 4)]; + *pos++ = base64_table[((in[1] & 0x0f) << 2) | (in[2] >> 6)]; + *pos++ = base64_table[in[2] & 0x3f]; + in += 3; + line_len += 4; + if (line_len >= 72) { + *pos++ = '\n'; + line_len = 0; + } + } + + if (end - in) { + *pos++ = base64_table[in[0] >> 2]; + if (end - in == 1) { + *pos++ = base64_table[(in[0] & 0x03) << 4]; + *pos++ = '='; + } else { + *pos++ = base64_table[((in[0] & 0x03) << 4) | + (in[1] >> 4)]; + *pos++ = base64_table[(in[1] & 0x0f) << 2]; + } + *pos++ = '='; + line_len += 4; + } + + if (line_len) + *pos++ = '\n'; + + *pos = '\0'; + if (out_len) + *out_len = pos - out; + return out; +} + + +/** + * base64_decode - Base64 decode + * @src: Data to be decoded + * @len: Length of the data to be decoded + * @out_len: Pointer to output length variable + * Returns: Allocated buffer of out_len bytes of decoded data, + * or %NULL on failure + * + * Caller is responsible for freeing the returned buffer. + */ +unsigned char * base64_decode(const unsigned char *src, size_t len, + size_t *out_len) +{ + unsigned char dtable[256], *out, *pos, block[4], tmp; + size_t i, count, olen; + int pad = 0; + + memset(dtable, 0x80, 256); + for (i = 0; i < sizeof(base64_table) - 1; i++) + dtable[base64_table[i]] = (unsigned char) i; + dtable['='] = 0; + + count = 0; + for (i = 0; i < len; i++) { + if (dtable[src[i]] != 0x80) + count++; + } + + if (count == 0 || count % 4) + return NULL; + + olen = count / 4 * 3; + pos = out = (unsigned char*)malloc(olen); + if (out == NULL) + return NULL; + + count = 0; + for (i = 0; i < len; i++) { + tmp = dtable[src[i]]; + if (tmp == 0x80) + continue; + + if (src[i] == '=') + pad++; + block[count] = tmp; + count++; + if (count == 4) { + *pos++ = (block[0] << 2) | (block[1] >> 4); + *pos++ = (block[1] << 4) | (block[2] >> 2); + *pos++ = (block[2] << 6) | block[3]; + count = 0; + if (pad) { + if (pad == 1) + pos--; + else if (pad == 2) + pos -= 2; + else { + /* Invalid padding */ + free(out); + return NULL; + } + break; + } + } + } + + *out_len = pos - out; + return out; +} diff --git a/hsmodem/websocket/base64.h b/hsmodem/websocket/base64.h new file mode 100755 index 0000000..5ea7f13 --- /dev/null +++ b/hsmodem/websocket/base64.h @@ -0,0 +1,19 @@ +/* + * Base64 encoding/decoding (RFC1341) + * Copyright (c) 2005, Jouni Malinen + * + * This software may be distributed under the terms of the BSD license. + * See README for more details. + */ + +#ifndef BASE64_H +#define BASE64_H + +#include + +unsigned char * base64_encode(const unsigned char *src, size_t len, + size_t *out_len); +unsigned char * base64_decode(const unsigned char *src, size_t len, + size_t *out_len); + +#endif /* BASE64_H */ diff --git a/hsmodem/websocket/handshake.cpp b/hsmodem/websocket/handshake.cpp new file mode 100755 index 0000000..d9587e5 --- /dev/null +++ b/hsmodem/websocket/handshake.cpp @@ -0,0 +1,73 @@ +/* +Copyright (C) 2016 Davidson Francis + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see +*/ +#include "../hsmodem.h" +#include "sha1.h" +#include "base64.h" + +/** + * Gets the field Sec-WebSocket-Accept on response, by + * an previously informed key. + * @param wsKey Sec-WebSocket-Key + * @param dest source to be stored the value. + */ +int getHSaccept(char *wsKey, unsigned char **dest) +{ + SHA1Context ctx; + char *str = (char *)malloc( sizeof(char) * (WS_KEY_LEN + WS_MS_LEN + 1) ); + unsigned char hash[SHA1HashSize]; + + strcpy(str, wsKey); + strcat(str, MAGIC_STRING); + + SHA1Reset(&ctx); + SHA1Input(&ctx, (const uint8_t *)str, WS_KEYMS_LEN); + SHA1Result(&ctx, hash); + + *dest = base64_encode(hash, SHA1HashSize, NULL); + *(*dest + strlen((const char *)*dest) - 1) = '\0'; + free(str); + return (0); +} + +/** + * Gets the complete response to accomplish a succesfully + * handshake. + * @param hsrequest Client request. + * @param hsresponse Server response. + */ +int getHSresponse(char *hsrequest, char **hsresponse) +{ + char *s; + unsigned char *accept; + + for (s = strtok(hsrequest, "\r\n"); s != NULL; s = strtok(NULL, "\r\n") ) + if (strstr(s, WS_HS_REQ) != NULL) + break; + + s = strtok(s, " "); + s = strtok(NULL, " "); + + getHSaccept(s, &accept); + + *hsresponse = (char*)malloc(sizeof(char) * WS_HS_ACCLEN); + strcpy(*hsresponse, WS_HS_ACCEPT); + strcat(*hsresponse, (const char *)accept); + strcat(*hsresponse, "\r\n\r\n"); + + free(accept); + return (0); +} diff --git a/hsmodem/websocket/sha1.cpp b/hsmodem/websocket/sha1.cpp new file mode 100755 index 0000000..f0c95dc --- /dev/null +++ b/hsmodem/websocket/sha1.cpp @@ -0,0 +1,389 @@ +/* + * sha1.c + * + * Description: + * This file implements the Secure Hashing Algorithm 1 as + * defined in FIPS PUB 180-1 published April 17, 1995. + * + * The SHA-1, produces a 160-bit message digest for a given + * data stream. It should take about 2**n steps to find a + * message with the same digest as a given message and + * 2**(n/2) to find any two messages with the same digest, + * when n is the digest size in bits. Therefore, this + * algorithm can serve as a means of providing a + * "fingerprint" for a message. + * + * Portability Issues: + * SHA-1 is defined in terms of 32-bit "words". This code + * uses (included via "sha1.h" to define 32 and 8 + * bit unsigned integer types. If your C compiler does not + * support 32 bit unsigned integers, this code is not + * appropriate. + * + * Caveats: + * SHA-1 is designed to work with messages less than 2^64 bits + * long. Although SHA-1 allows a message digest to be generated + * for messages of any number of bits less than 2^64, this + * implementation only works with messages with a length that is + * a multiple of the size of an 8-bit character. + * + */ + +#include "sha1.h" + +/* + * Define the SHA1 circular left shift macro + */ +#define SHA1CircularShift(bits,word) \ + (((word) << (bits)) | ((word) >> (32-(bits)))) + +/* Local Function Prototyptes */ +void SHA1PadMessage(SHA1Context *); +void SHA1ProcessMessageBlock(SHA1Context *); + +/* + * SHA1Reset + * + * Description: + * This function will initialize the SHA1Context in preparation + * for computing a new SHA1 message digest. + * + * Parameters: + * context: [in/out] + * The context to reset. + * + * Returns: + * sha Error Code. + * + */ +int SHA1Reset(SHA1Context *context) +{ + if (!context) + { + return shaNull; + } + + context->Length_Low = 0; + context->Length_High = 0; + context->Message_Block_Index = 0; + + context->Intermediate_Hash[0] = 0x67452301; + context->Intermediate_Hash[1] = 0xEFCDAB89; + context->Intermediate_Hash[2] = 0x98BADCFE; + context->Intermediate_Hash[3] = 0x10325476; + context->Intermediate_Hash[4] = 0xC3D2E1F0; + + context->Computed = 0; + context->Corrupted = 0; + + return shaSuccess; +} + +/* + * SHA1Result + * + * Description: + * This function will return the 160-bit message digest into the + * Message_Digest array provided by the caller. + * NOTE: The first octet of hash is stored in the 0th element, + * the last octet of hash in the 19th element. + * + * Parameters: + * context: [in/out] + * The context to use to calculate the SHA-1 hash. + * Message_Digest: [out] + * Where the digest is returned. + * + * Returns: + * sha Error Code. + * + */ +int SHA1Result( SHA1Context *context, + uint8_t Message_Digest[SHA1HashSize]) +{ + int i; + + if (!context || !Message_Digest) + { + return shaNull; + } + + if (context->Corrupted) + { + return context->Corrupted; + } + + if (!context->Computed) + { + SHA1PadMessage(context); + for(i=0; i<64; ++i) + { + /* message may be sensitive, clear it out */ + context->Message_Block[i] = 0; + } + context->Length_Low = 0; /* and clear length */ + context->Length_High = 0; + context->Computed = 1; + + } + + for(i = 0; i < SHA1HashSize; ++i) + { + Message_Digest[i] = context->Intermediate_Hash[i>>2] + >> 8 * ( 3 - ( i & 0x03 ) ); + } + + return shaSuccess; +} + +/* + * SHA1Input + * + * Description: + * This function accepts an array of octets as the next portion + * of the message. + * + * Parameters: + * context: [in/out] + * The SHA context to update + * message_array: [in] + * An array of characters representing the next portion of + * the message. + * length: [in] + * The length of the message in message_array + * + * Returns: + * sha Error Code. + * + */ +int SHA1Input( SHA1Context *context, + const uint8_t *message_array, + unsigned length) +{ + if (!length) + { + return shaSuccess; + } + + if (!context || !message_array) + { + return shaNull; + } + + if (context->Computed) + { + context->Corrupted = shaStateError; + + return shaStateError; + } + + if (context->Corrupted) + { + return context->Corrupted; + } + while(length-- && !context->Corrupted) + { + context->Message_Block[context->Message_Block_Index++] = + (*message_array & 0xFF); + + context->Length_Low += 8; + if (context->Length_Low == 0) + { + context->Length_High++; + if (context->Length_High == 0) + { + /* Message is too long */ + context->Corrupted = 1; + } + } + + if (context->Message_Block_Index == 64) + { + SHA1ProcessMessageBlock(context); + } + + message_array++; + } + + return shaSuccess; +} + +/* + * SHA1ProcessMessageBlock + * + * Description: + * This function will process the next 512 bits of the message + * stored in the Message_Block array. + * + * Parameters: + * None. + * + * Returns: + * Nothing. + * + * Comments: + + * Many of the variable names in this code, especially the + * single character names, were used because those were the + * names used in the publication. + * + * + */ +void SHA1ProcessMessageBlock(SHA1Context *context) +{ + const uint32_t K[] = { /* Constants defined in SHA-1 */ + 0x5A827999, + 0x6ED9EBA1, + 0x8F1BBCDC, + 0xCA62C1D6 + }; + int t; /* Loop counter */ + uint32_t temp; /* Temporary word value */ + uint32_t W[80]; /* Word sequence */ + uint32_t A, B, C, D, E; /* Word buffers */ + + /* + * Initialize the first 16 words in the array W + */ + for(t = 0; t < 16; t++) + { + W[t] = context->Message_Block[t * 4] << 24; + W[t] |= context->Message_Block[t * 4 + 1] << 16; + W[t] |= context->Message_Block[t * 4 + 2] << 8; + W[t] |= context->Message_Block[t * 4 + 3]; + } + + for(t = 16; t < 80; t++) + { + W[t] = SHA1CircularShift(1,W[t-3] ^ W[t-8] ^ W[t-14] ^ W[t-16]); + } + + A = context->Intermediate_Hash[0]; + B = context->Intermediate_Hash[1]; + C = context->Intermediate_Hash[2]; + D = context->Intermediate_Hash[3]; + E = context->Intermediate_Hash[4]; + + for(t = 0; t < 20; t++) + { + temp = SHA1CircularShift(5,A) + + ((B & C) | ((~B) & D)) + E + W[t] + K[0]; + E = D; + D = C; + C = SHA1CircularShift(30,B); + + B = A; + A = temp; + } + + for(t = 20; t < 40; t++) + { + temp = SHA1CircularShift(5,A) + (B ^ C ^ D) + E + W[t] + K[1]; + E = D; + D = C; + C = SHA1CircularShift(30,B); + B = A; + A = temp; + } + + for(t = 40; t < 60; t++) + { + temp = SHA1CircularShift(5,A) + + ((B & C) | (B & D) | (C & D)) + E + W[t] + K[2]; + E = D; + D = C; + C = SHA1CircularShift(30,B); + B = A; + A = temp; + } + + for(t = 60; t < 80; t++) + { + temp = SHA1CircularShift(5,A) + (B ^ C ^ D) + E + W[t] + K[3]; + E = D; + D = C; + C = SHA1CircularShift(30,B); + B = A; + A = temp; + } + + context->Intermediate_Hash[0] += A; + context->Intermediate_Hash[1] += B; + context->Intermediate_Hash[2] += C; + context->Intermediate_Hash[3] += D; + context->Intermediate_Hash[4] += E; + + context->Message_Block_Index = 0; +} + +/* + * SHA1PadMessage + * + + * Description: + * According to the standard, the message must be padded to an even + * 512 bits. The first padding bit must be a '1'. The last 64 + * bits represent the length of the original message. All bits in + * between should be 0. This function will pad the message + * according to those rules by filling the Message_Block array + * accordingly. It will also call the ProcessMessageBlock function + * provided appropriately. When it returns, it can be assumed that + * the message digest has been computed. + * + * Parameters: + * context: [in/out] + * The context to pad + * ProcessMessageBlock: [in] + * The appropriate SHA*ProcessMessageBlock function + * Returns: + * Nothing. + * + */ + +void SHA1PadMessage(SHA1Context *context) +{ + /* + * Check to see if the current message block is too small to hold + * the initial padding bits and length. If so, we will pad the + * block, process it, and then continue padding into a second + * block. + */ + if (context->Message_Block_Index > 55) + { + context->Message_Block[context->Message_Block_Index++] = 0x80; + while(context->Message_Block_Index < 64) + { + context->Message_Block[context->Message_Block_Index++] = 0; + } + + SHA1ProcessMessageBlock(context); + + while(context->Message_Block_Index < 56) + { + context->Message_Block[context->Message_Block_Index++] = 0; + } + } + else + { + context->Message_Block[context->Message_Block_Index++] = 0x80; + while(context->Message_Block_Index < 56) + { + + context->Message_Block[context->Message_Block_Index++] = 0; + } + } + + /* + * Store the message length as the last 8 octets + */ + context->Message_Block[56] = context->Length_High >> 24; + context->Message_Block[57] = context->Length_High >> 16; + context->Message_Block[58] = context->Length_High >> 8; + context->Message_Block[59] = context->Length_High; + context->Message_Block[60] = context->Length_Low >> 24; + context->Message_Block[61] = context->Length_Low >> 16; + context->Message_Block[62] = context->Length_Low >> 8; + context->Message_Block[63] = context->Length_Low; + + SHA1ProcessMessageBlock(context); +} diff --git a/hsmodem/websocket/sha1.h b/hsmodem/websocket/sha1.h new file mode 100755 index 0000000..eb51ed5 --- /dev/null +++ b/hsmodem/websocket/sha1.h @@ -0,0 +1,73 @@ +/* + * sha1.h + * + * Description: + * This is the header file for code which implements the Secure + * Hashing Algorithm 1 as defined in FIPS PUB 180-1 published + * April 17, 1995. + * + * Many of the variable names in this code, especially the + * single character names, were used because those were the names + * used in the publication. + * + * Please read the file sha1.c for more information. + * + */ + +#ifndef _SHA1_H_ +#define _SHA1_H_ + +#include +/* + * If you do not have the ISO standard stdint.h header file, then you + * must typdef the following: + * name meaning + * uint32_t unsigned 32 bit integer + * uint8_t unsigned 8 bit integer (i.e., unsigned char) + * int_least16_t integer of >= 16 bits + * + */ + +#ifndef _SHA_enum_ +#define _SHA_enum_ +enum +{ + shaSuccess = 0, + shaNull, /* Null pointer parameter */ + shaInputTooLong, /* input data too long */ + shaStateError /* called Input after Result */ +}; +#endif +#define SHA1HashSize 20 + +/* + * This structure will hold context information for the SHA-1 + * hashing operation + */ +typedef struct SHA1Context +{ + uint32_t Intermediate_Hash[SHA1HashSize/4]; /* Message Digest */ + + uint32_t Length_Low; /* Message length in bits */ + uint32_t Length_High; /* Message length in bits */ + + /* Index into message block array */ + int_least16_t Message_Block_Index; + uint8_t Message_Block[64]; /* 512-bit message blocks */ + + int Computed; /* Is the digest computed? */ + int Corrupted; /* Is the message digest corrupted? */ +} SHA1Context; + +/* + * Function Prototypes + */ + +int SHA1Reset( SHA1Context *); +int SHA1Input( SHA1Context *, + const uint8_t *, + unsigned int); +int SHA1Result( SHA1Context *, + uint8_t Message_Digest[SHA1HashSize]); + +#endif diff --git a/hsmodem/websocket/websocketserver.cpp b/hsmodem/websocket/websocketserver.cpp new file mode 100755 index 0000000..618769e --- /dev/null +++ b/hsmodem/websocket/websocketserver.cpp @@ -0,0 +1,339 @@ +/* +* High Speed modem to transfer data in a 2,7kHz SSB channel +* ========================================================= +* Author: DJ0ABR +* +* (c) DJ0ABR +* www.dj0abr.de +* +* websocket server: based on the work by: Davidson Francis +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +* +* websocketserver.c ... sends data to a web browser +* +* if a web browser is logged into this WebSocketServer then +* we send the data to this browser. +* Its the job of the browser to make anything with these data. +* +* This WebSocketServer is a multi threaded implementation and +* opens a new thread for each client +* +* ! THIS implementation of a WebSocketServer DOES NOT require a Webserver (like Apache) +* because it handles all Websocket tasks by itself ! +* +* usage: +* ====== +* +* ws_init() ... call once after program start to initialize the websocket server +* +* ws_send(unsigned char *pdata, int len) ... +* send pdata (max. lenght MESSAGE_LENGTH) to all connected clients. +* this function is thread safe. It stores the data in a buffer. +* This buffer is sent to the clients in the websocket-thread in the background. +* +* +*/ + +#include "../hsmodem.h" + +void init_ws_locks(); +void ws_alive(); + +#ifdef _WIN32_ +void wsproc(void* param); +#else +void* wsproc(void* param); +#endif + +#define MAXIPLEN 16 + +WS_SOCK actsock[MAX_CLIENTS]; +char clilist[MAX_CLIENTS][MAXIPLEN]; + +/*void test_websocket() +{ + char* msg = "ABCD1234"; + + static int t = 0; + if (++t > 100) + { + t = 0; + printf("send ws: %s\n", msg); + ws_send((unsigned char *)msg, strlen(msg)); + } +}*/ + +// initialise the WebSocketServer +// run the WebSocketServer in a new thread +void ws_init() +{ + printf("starting websocket server\n"); + init_ws_locks(); + for(int i=0; i> 8; + txdata[idx++] = actsock[i].msglen & 0xff; + memcpy(txdata+idx,actsock[i].msg,actsock[i].msglen); + idx += actsock[i].msglen; + } + + *plength = idx; + + WS_UNLOCK(); + return txdata; +} + +// insert a socket into the socket-list +void insert_socket(int fd, char *cli) +{ + WS_LOCK; + + for(int i=0; i 0) + { + //printf("%d %d\n", i, actsock[i].alive); + actsock[i].alive--; + if (actsock[i].alive == 0) + { + // remove inactive client + remove_socket(actsock[i].socket); + } + } + } +} + +// remove a socket from the socket-list +int get_alive(int fd) +{ + int a = 0; + WS_LOCK; + for (int i = 0; i < MAX_CLIENTS; i++) + { + if (actsock[i].socket == fd) + { + a = actsock[i].alive; + WS_UNLOCK(); + return a; + } + } + WS_UNLOCK(); + return 0; +} diff --git a/hsmodem/websocket/websocketserver.h b/hsmodem/websocket/websocketserver.h new file mode 100755 index 0000000..d1433f7 --- /dev/null +++ b/hsmodem/websocket/websocketserver.h @@ -0,0 +1,87 @@ + +#define MESSAGE_LENGTH 30000 +#define MAX_CLIENTS 20 // if changed: change also fifo.h !!!!!!!!! + +#define WS_KEY_LEN 24 +#define WS_MS_LEN 36 +#define WS_KEYMS_LEN (WS_KEY_LEN + WS_MS_LEN) +#define MAGIC_STRING "258EAFA5-E914-47DA-95CA-C5AB0DC85B11" + +#define WS_HS_REQ "Sec-WebSocket-Key" + +#define WS_HS_ACCLEN 130 +#define WS_HS_ACCEPT \ +"HTTP/1.1 101 Switching Protocols\r\n" \ +"Upgrade: websocket\r\n" \ +"Connection: Upgrade\r\n" \ +"Sec-WebSocket-Accept: " \ + +/* Frame definitions. */ +#define WS_FIN 128 + +/* Frame types. */ +#define WS_FR_OP_TXT 1 +#define WS_FR_OP_BINARY 2 +#define WS_FR_OP_CLSE 8 + +#define WS_FR_OP_UNSUPPORTED 0xF + +extern int TcpDataPort_WebSocket; + +// list of sockets, -1=inactive +typedef struct { + int socket; // socket id + unsigned char msg[MESSAGE_LENGTH]; // message to send to the browser + int msglen; + int send; // 0=nothing to send, 1=send now + struct sockaddr_in fromSock; + int alive = 0; +} WS_SOCK; + +// Events +struct ws_events +{ + /* void onopen(int fd); */ + void (*onopen)(int); + + /* void onclose(int fd); */ + void (*onclose)(int); + + /* void onmessage(int fd, unsigned char *message); */ + void (*onmessage)(int, unsigned char *); + + /* int onwork(int fd); do something short, worker function, called by the thread's main loop */ + int (*onwork)(int fd, unsigned char *cnt0, unsigned char *cnt1); +}; + +typedef struct { + uint32_t command; + uint32_t para; + uint32_t client; + char spara[100]; +} USERMSG; + +int getHSaccept(char *wsKey, unsigned char **dest); +int getHSresponse(char *hsrequest, char **hsresponse); + +char* ws_getaddress(int fd); +int ws_sendframe_binary(int fd, unsigned char *msg, uint64_t length); +int ws_socket(struct ws_events *evs, int port); +void ws_send(unsigned char* pdata, int len); +void ws_init(); +int get_useranz(); +void onopen(int fd); +void onclose(int fd); +void onmessage(int fd, unsigned char *message); +int onwork(int fd, unsigned char *cnt0, unsigned char *cnt1); +void insert_socket(int fd, char *cli); +void remove_socket(int fd); +char *getSocketIP(int fd); +unsigned char *ws_build_txframe(int i, int *plength); +int get_socket_idx(int fd); +int isLocal(int idx); +void test_websocket(); +int get_alive(int fd); + +extern WS_SOCK actsock[MAX_CLIENTS]; +extern char myIP[20]; diff --git a/hsmodem/websocket/ws.cpp b/hsmodem/websocket/ws.cpp new file mode 100755 index 0000000..41621dd --- /dev/null +++ b/hsmodem/websocket/ws.cpp @@ -0,0 +1,434 @@ +/* +* High Speed modem to transfer data in a 2,7kHz SSB channel +* ========================================================= +* Author: DJ0ABR +* +* (c) DJ0ABR +* www.dj0abr.de + +websocket server: based on the work by: Davidson Francis + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see +*/ +#include "../hsmodem.h" + +/* Registered events. */ +struct ws_events events; + +/** + * Gets the IP address relative to a + * file descriptor opened by the server. + * @param fd File descriptor target. + * @return Pointer the ip address. + */ +char* ws_getaddress(int fd) +{ + struct sockaddr_in addr; +#ifdef WIN32 + int addr_size; +#else + socklen_t addr_size; +#endif + char *client; + + addr_size = sizeof(struct sockaddr_in); + if ( getpeername(fd, (struct sockaddr *)&addr, &addr_size) < 0 ) + return NULL; + + client = (char *)malloc(sizeof(char) * 20); + if(client == NULL) + return NULL; + + strcpy(client, inet_ntoa(addr.sin_addr)); + return (client); +} + +/** + * Creates and send a WebSocket frame + * with some binary message. + * @param fd Target to be send. + * @param msg Message to be send. + */ +int ws_sendframe_binary(int fd, unsigned char *msg, uint64_t length) +{ + unsigned char *response; /* Response data. */ + unsigned char frame[10]; /* Frame. */ + uint8_t idx_first_rData; /* Index data. */ + int idx_response; /* Index response. */ + int output; /* Bytes sent. */ + + /* Binary data. */ + frame[0] = (WS_FIN | WS_FR_OP_BINARY); + + /* Split the size between octects. */ + if (length <= 125) + { + frame[1] = length & 0x7F; + idx_first_rData = 2; + } + + /* Size between 126 and 65535 bytes. */ + else if (length >= 126 && length <= 65535) + { + frame[1] = 126; + frame[2] = (length >> 8) & 255; + frame[3] = length & 255; + idx_first_rData = 4; + } + + /* More than 65535 bytes. */ + else + { + frame[1] = 127; + frame[2] = (unsigned char) ((length >> 56) & 255); + frame[3] = (unsigned char) ((length >> 48) & 255); + frame[4] = (unsigned char) ((length >> 40) & 255); + frame[5] = (unsigned char) ((length >> 32) & 255); + frame[6] = (unsigned char) ((length >> 24) & 255); + frame[7] = (unsigned char) ((length >> 16) & 255); + frame[8] = (unsigned char) ((length >> 8) & 255); + frame[9] = (unsigned char) (length & 255); + idx_first_rData = 10; + } + + /* Add frame bytes. */ + idx_response = 0; + response = (unsigned char *)malloc((size_t)( sizeof(unsigned char) * (idx_first_rData + length + 1))); + if(response != NULL) + { + for (int i = 0; i < idx_first_rData; i++) + { + response[i] = frame[i]; + idx_response++; + } + + /* Add data bytes. */ + for (uint64_t i = 0; i < length; i++) + { + response[idx_response] = msg[i]; + idx_response++; + } + output = send(fd, (char *)response, idx_response,0); + free(response); + return (output); + } + return 0; +} + + +/** + * Receives a text frame, parse and decodes it. + * @param frame WebSocket frame to be parsed. + * @param length Frame length. + * @param type Frame type. + */ +static unsigned char* ws_receiveframe(unsigned char *frame, size_t length, int *type) +{ + unsigned char *msg; /* Decoded message. */ + uint8_t mask; /* Payload is masked? */ + uint8_t flength; /* Raw length. */ + uint8_t idx_first_mask; /* Index masking key. */ + uint8_t idx_first_data; /* Index data. */ + size_t data_length; /* Data length. */ + uint8_t masks[4]; /* Masking key. */ + int i,j; /* Loop indexes. */ + + msg = NULL; + + /* Checks the frame type and parse the frame. */ + if (frame[0] == (WS_FIN | WS_FR_OP_TXT) ) + { + *type = WS_FR_OP_TXT; + idx_first_mask = 2; + mask = frame[1]; + flength = mask & 0x7F; + + if (flength == 126) + idx_first_mask = 4; + else if (flength == 127) + idx_first_mask = 10; + + idx_first_data = idx_first_mask + 4; + data_length = length - idx_first_data; + + masks[0] = frame[idx_first_mask+0]; + masks[1] = frame[idx_first_mask+1]; + masks[2] = frame[idx_first_mask+2]; + masks[3] = frame[idx_first_mask+3]; + + msg = (unsigned char *)malloc(sizeof(unsigned char) * (data_length+1) ); + if(msg == NULL) + return NULL; + + for (i = idx_first_data, j = 0; i < (int)length; i++, j++) + msg[j] = frame[i] ^ masks[j % 4]; + + msg[j] = '\0'; + } + + /* Close frame. */ + else if (frame[0] == (WS_FIN | WS_FR_OP_CLSE) ) + *type = WS_FR_OP_CLSE; + + /* Not supported frame yet. */ + else + *type = frame[0] & 0x0F; + + return msg; +} + +// nonblocking read with a 10ms timeout +int readsocket(int sock, unsigned char* buf, int maxlen) +{ + int n; + // make the read unblocking + // but check with select if something is in the receive buffer + fd_set input; + FD_ZERO(&input); + FD_SET(sock, &input); + struct timeval timeout; + timeout.tv_sec = 0; + timeout.tv_usec = 10000; + n = select(sock + 1, &input, NULL, NULL, &timeout); // select will socket+1, blöd, aber ist so + if (n <= 0) + { + return n; // 0=no data, <0=error + } + + if (!FD_ISSET(sock, &input)) + { + return -1; // error + } + + sleep_ms(10); // wait a bit to give a message the chance to be rxed completely + n = recv(sock, (char*)buf, maxlen, 0); + return n; +} + +/** + * Establishes to connection with the client and trigger + * events when occurs one. + * @param vsock Client file descriptor. + * @note This will be run on a different thread. + */ + +#ifdef WIN32 +void ws_establishconnection(void* vsock) +{ +#else +void* ws_establishconnection(void* vsock) +{ + pthread_detach(pthread_self()); +#endif + + int sock; + size_t n; /* Number of bytes sent/received. */ + unsigned char frm[MESSAGE_LENGTH]; /* Frame. */ + unsigned char *msg; /* Message. */ + char *response; /* Response frame. */ + int handshaked; /* Handshake state. */ + int type; /* Frame type. */ + unsigned char cnt0=0,cnt1=0; + + handshaked = 0; + sock = (int)(intptr_t)vsock; + + while (keeprunning) + { + n = readsocket(sock, frm, sizeof(unsigned char) * MESSAGE_LENGTH); + /* Receives message until get some error. */ + if (n >= 0) + { + if (n > 0) + { + // data received + /* If not handshaked yet. */ + if (!handshaked) + { + getHSresponse((char*)frm, &response); + handshaked = 1; + /*printf("Handshaked, response: \n" + "------------------------------------\n" + "%s" + "------------------------------------\n" + ,response);*/ + n = send(sock, response, strlen(response),0); + events.onopen(sock); + free(response); + } + + /* Decode/check type of frame. */ + msg = ws_receiveframe(frm, n, &type); + + if (msg == NULL) + continue; + + /* Trigger events. */ + if (type == WS_FR_OP_TXT) + events.onmessage(sock, msg); + else if (type == WS_FR_OP_CLSE) + { + if (msg != NULL) free(msg); + events.onclose(sock); +#ifdef WIN32 + return; +#else + return vsock; +#endif + } + else + printf("type :%d\n", type); + + if (msg != NULL) free(msg); + } + if (n == 0) + { + if (get_alive(sock) == 0) + { + events.onclose(sock); +#ifdef WIN32 + return; +#else + return vsock; +#endif + } + + // no data received, normal processing loop + int ret = events.onwork(sock, &cnt0, &cnt1); + if (ret == -1) + { + // other side closed the connection (write error) + events.onclose(sock); +#ifdef WIN32 + return; +#else + return vsock; +#endif + } + sleep_ms(10); // do not eat up the CPU time + } + } + } + + +#ifdef WIN32 + _close(sock); + return; +#else + close(sock); + return vsock; +#endif +} + +/** + * Main loop for the server, runs in a thread + * @param evs Events structure. + * @param port Server port. + */ +int ws_socket(struct ws_events *evs, int port) +{ + int sock; /* Current socket. */ + int new_sock; /* New opened connection. */ + struct sockaddr_in server; /* Server. */ + struct sockaddr_in client; /* Client. */ + int len; /* Length of sockaddr. */ + + if (evs == NULL || port <= 0 || port > 65535) + { + printf("An error has ocurred, please review your events or the desired port!\n"); + return -1; + } + + /* Copy events. */ + memcpy(&events, evs, sizeof(struct ws_events)); + +#ifdef _WIN32_ + WSADATA wsaData = { 0 }; + int ires = WSAStartup(MAKEWORD(2, 2), &wsaData); + if (ires != 0) + printf("WSAStartup failed: %d\n", ires); +#endif + + /* Create socket. */ + sock = socket(AF_INET, SOCK_STREAM, 0); + if (sock < 0) { + printf("Could not create socket\n"); + return -1; + } + + /* Reuse previous address. */ + const char val = 1; + if (setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, &val, sizeof(int)) < 0) + { + perror("setsockopt(SO_REUSEADDR) failed"); + return -1; + } + + /* Prepare the sockaddr_in structure. */ + server.sin_family = AF_INET; + server.sin_addr.s_addr = INADDR_ANY; + printf("Websocket Server: listen to port:%d\n",port); + server.sin_port = htons(port); + + /* Bind. */ + if( bind(sock, (struct sockaddr *)&server, sizeof(server)) < 0 ) + { + perror("Bind failed"); + return -1; + } + + /* Listen. */ + listen(sock, MAX_CLIENTS); + + /* Wait for incoming connections. */ + printf("Waiting for incoming connections...\n"); + + len = sizeof(struct sockaddr_in); + + /* Accept connections. */ + while (keeprunning) + { + //if (extData_active) + { + /* Accept. */ +#ifdef WIN32 + new_sock = accept(sock, (struct sockaddr*)&client, &len); + printf("new socket: %d\n", new_sock); +#else + new_sock = accept(sock, (struct sockaddr*)&client, (socklen_t*)&len); +#endif + if (new_sock < 0) + { + perror("Error on accepting conections.."); + exit(-1); + } + +#ifdef WIN32 + printf("start Thread\n"); + _beginthread(ws_establishconnection, 0, (void*)(intptr_t)new_sock); +#else + pthread_t client_thread; + if (pthread_create(&client_thread, NULL, ws_establishconnection, (void*)(intptr_t)new_sock) < 0) + perror("Could not create the client thread!"); + + pthread_detach(client_thread); // automatically release all ressources as soon as the thread is done +#endif + } + /*else + { + sleep_ms(100); + }*/ + } + return 0; +} diff --git a/hsmodem/websocket/ws_callbacks.cpp b/hsmodem/websocket/ws_callbacks.cpp new file mode 100755 index 0000000..21fce53 --- /dev/null +++ b/hsmodem/websocket/ws_callbacks.cpp @@ -0,0 +1,101 @@ +/* +* High Speed modem to transfer data in a 2,7kHz SSB channel +* ========================================================= +* Author: DJ0ABR +* +* (c) DJ0ABR +* www.dj0abr.de + +websocket server: based on the work by: Davidson Francis + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see +*/ + +#include "../hsmodem.h" + +extern int useCAT; +int connections = 0; + +// a new browser connected +void onopen(int fd) +{ + char *cli; + cli = ws_getaddress(fd); + if(cli != NULL) + { + insert_socket(fd,cli); + printf("Connection opened, client: %d | addr: %s\n", fd, cli); + connections++; + printf("%d users logged in\n",connections); + free(cli); + } +} + +// a browser disconnected +void onclose(int fd) +{ + remove_socket(fd); +#ifdef WIN32 + _close(fd); +#else + close(fd); +#endif + printf("Connection closed, client: %d\n", fd); + connections--; + printf("%d users logged in\n",connections); +} + +// if avaiable, send data to a browser +int onwork(int fd, unsigned char *cnt0, unsigned char *cnt1) +{ +int ret = 0; + + for(int i=0; ihi{&;-KH;eg6FaJMm@f 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�u89T1EVC`Xs%@*mx# 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 XUW>gBA4)y{1phs#Gh7e2zN-HZMns5Y delta 67761 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 diff --git a/hsmodemLinux/oscardata.exe b/hsmodemLinux/oscardata.exe index ac7c65a0d8f0536cb25801d0ca151f1585832de6..eb9e11caf159f8e5bb4aa8ef04764aad0e4c46d3 100755 GIT binary patch delta 77159 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 3) return; Byte[] txarr = new byte[statics.PayloadLen]; @@ -153,7 +154,9 @@ namespace oscardata if (txlen <= statics.PayloadLen) { // we just need to send one frame - txudp(txdata, txtype, statics.SingleFrame); + for (int i = 0; i < txdata.Length; i++) + txarr[i] = txdata[i]; + txudp(txarr, txtype, statics.SingleFrame); setSending(false); // transmission complete } else diff --git a/oscardata/oscardata/Form1.Designer.cs b/oscardata/oscardata/Form1.Designer.cs index 0886a46..8244003 100755 --- a/oscardata/oscardata/Form1.Designer.cs +++ b/oscardata/oscardata/Form1.Designer.cs @@ -39,9 +39,7 @@ this.RXstatus = new System.Windows.Forms.ToolStripStatusLabel(); this.toolStrip_spacer = new System.Windows.Forms.ToolStripStatusLabel(); this.ts_userinfo = new System.Windows.Forms.ToolStripStatusLabel(); - this.panel_constel = new System.Windows.Forms.Panel(); this.timer_qpsk = new System.Windows.Forms.Timer(this.components); - this.panel_txspectrum = new System.Windows.Forms.Panel(); this.tabPage_ber = new System.Windows.Forms.TabPage(); this.button6 = new System.Windows.Forms.Button(); this.bt_allf = new System.Windows.Forms.Button(); @@ -51,13 +49,13 @@ this.imageList1 = new System.Windows.Forms.ImageList(this.components); this.button_startBERtest = new System.Windows.Forms.Button(); this.tabPage_image = new System.Windows.Forms.TabPage(); - this.groupBox1 = new System.Windows.Forms.Panel(); + this.groupBox1 = new oscardata.DoubleBufferedPanel(); + this.cb_picres = new System.Windows.Forms.ComboBox(); this.cb_loop = new System.Windows.Forms.CheckBox(); this.bt_rximages = new System.Windows.Forms.Button(); this.button_loadimage = new System.Windows.Forms.Button(); this.comboBox_quality = new System.Windows.Forms.ComboBox(); this.label2 = new System.Windows.Forms.Label(); - this.checkBox_big = new System.Windows.Forms.CheckBox(); this.button_cancelimg = new System.Windows.Forms.Button(); this.button_sendimage = new System.Windows.Forms.Button(); this.label_rximage = new System.Windows.Forms.Label(); @@ -66,6 +64,11 @@ this.pictureBox_tximage = new System.Windows.Forms.PictureBox(); this.tabControl1 = new System.Windows.Forms.TabControl(); this.tabPage_file = new System.Windows.Forms.TabPage(); + this.groupBox8 = new System.Windows.Forms.GroupBox(); + this.cb_file_pause = new System.Windows.Forms.ComboBox(); + this.label13 = new System.Windows.Forms.Label(); + this.cb_file_loop = new System.Windows.Forms.CheckBox(); + this.bt_open_html = new System.Windows.Forms.Button(); this.pictureBox1 = new System.Windows.Forms.PictureBox(); this.button2 = new System.Windows.Forms.Button(); this.bt_openrxfile = new System.Windows.Forms.Button(); @@ -105,7 +108,7 @@ this.label3 = new System.Windows.Forms.Label(); this.tb_rtty_TX = new System.Windows.Forms.TextBox(); this.tb_rtty_RX = new System.Windows.Forms.TextBox(); - this.panel1 = new System.Windows.Forms.Panel(); + this.panel1 = new oscardata.DoubleBufferedPanel(); this.textBox6 = new System.Windows.Forms.TextBox(); this.cb_rx_autosync = new System.Windows.Forms.CheckBox(); this.rb_rtty_real = new System.Windows.Forms.RadioButton(); @@ -143,9 +146,9 @@ this.label_cfgpath = new System.Windows.Forms.Label(); this.label_cfgpath_tit = new System.Windows.Forms.Label(); this.groupBox4 = new System.Windows.Forms.GroupBox(); - this.label13 = new System.Windows.Forms.Label(); + this.cb_extIF = new System.Windows.Forms.CheckBox(); + this.textBox7 = new System.Windows.Forms.TextBox(); 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_autostart = new System.Windows.Forms.CheckBox(); this.bt_shutdown = new System.Windows.Forms.Button(); @@ -191,18 +194,20 @@ this.cb_stampcall = new System.Windows.Forms.CheckBox(); this.tabPage_about = new System.Windows.Forms.TabPage(); this.richTextBox1 = new System.Windows.Forms.RichTextBox(); - this.cb_speed = new System.Windows.Forms.ComboBox(); - this.label_speed = new System.Windows.Forms.Label(); this.timer_searchmodem = new System.Windows.Forms.Timer(this.components); - this.label_fifo = new System.Windows.Forms.Label(); - this.label_capfifo = new System.Windows.Forms.Label(); - this.lb_rxsignal = new System.Windows.Forms.Label(); - this.lb_rxsync = new System.Windows.Forms.Label(); - this.pn1 = new System.Windows.Forms.Panel(); + this.pn1 = new oscardata.DoubleBufferedPanel(); this.progressBar_fifo = new oscardata.KmProgressBar(); + this.label_capfifo = new System.Windows.Forms.Label(); + this.label_speed = new System.Windows.Forms.Label(); this.pb_rxsignal = new System.Windows.Forms.PictureBox(); + this.lb_rxsync = new System.Windows.Forms.Label(); this.progressBar_capfifo = new oscardata.KmProgressBar(); + this.cb_speed = new System.Windows.Forms.ComboBox(); + this.lb_rxsignal = new System.Windows.Forms.Label(); this.pb_rxsync = new System.Windows.Forms.PictureBox(); + this.label_fifo = new System.Windows.Forms.Label(); + this.panel_txspectrum = new oscardata.DoubleBufferedPanel(); + this.panel_constel = new oscardata.DoubleBufferedPanel(); this.statusStrip1.SuspendLayout(); this.tabPage_ber.SuspendLayout(); this.tabPage_image.SuspendLayout(); @@ -211,6 +216,7 @@ ((System.ComponentModel.ISupportInitialize)(this.pictureBox_tximage)).BeginInit(); this.tabControl1.SuspendLayout(); this.tabPage_file.SuspendLayout(); + this.groupBox8.SuspendLayout(); ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit(); this.tabPage_audio.SuspendLayout(); this.groupBox7.SuspendLayout(); @@ -273,62 +279,46 @@ // // toolStripStatusLabel // + this.toolStripStatusLabel.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F); this.toolStripStatusLabel.Name = "toolStripStatusLabel"; - this.toolStripStatusLabel.Size = new System.Drawing.Size(39, 17); + this.toolStripStatusLabel.Size = new System.Drawing.Size(37, 17); this.toolStripStatusLabel.Text = "Status"; // // ts_ip // + this.ts_ip.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F); this.ts_ip.ForeColor = System.Drawing.Color.Red; this.ts_ip.Name = "ts_ip"; - this.ts_ip.Size = new System.Drawing.Size(12, 17); + this.ts_ip.Size = new System.Drawing.Size(13, 17); this.ts_ip.Text = "?"; // // RXstatus // + this.RXstatus.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F); this.RXstatus.Name = "RXstatus"; - this.RXstatus.Size = new System.Drawing.Size(58, 17); + this.RXstatus.Size = new System.Drawing.Size(55, 17); this.RXstatus.Text = "RX-Status"; // // toolStrip_spacer // this.toolStrip_spacer.Name = "toolStrip_spacer"; - this.toolStrip_spacer.Size = new System.Drawing.Size(1156, 17); + this.toolStrip_spacer.Size = new System.Drawing.Size(1160, 17); this.toolStrip_spacer.Spring = true; // // ts_userinfo // - this.ts_userinfo.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Bold); + this.ts_userinfo.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F); this.ts_userinfo.ForeColor = System.Drawing.Color.Blue; this.ts_userinfo.Name = "ts_userinfo"; this.ts_userinfo.Size = new System.Drawing.Size(16, 17); this.ts_userinfo.Text = "..."; // - // panel_constel - // - this.panel_constel.BackColor = System.Drawing.Color.AliceBlue; - this.panel_constel.Location = new System.Drawing.Point(11, 590); - this.panel_constel.Name = "panel_constel"; - this.panel_constel.Size = new System.Drawing.Size(75, 75); - this.panel_constel.TabIndex = 5; - this.panel_constel.Paint += new System.Windows.Forms.PaintEventHandler(this.panel_constel_Paint); - // // timer_qpsk // this.timer_qpsk.Enabled = true; this.timer_qpsk.Interval = 200; this.timer_qpsk.Tick += new System.EventHandler(this.timer_qpsk_Tick); // - // panel_txspectrum - // - this.panel_txspectrum.BackColor = System.Drawing.SystemColors.ControlLight; - this.panel_txspectrum.Location = new System.Drawing.Point(92, 590); - this.panel_txspectrum.Name = "panel_txspectrum"; - this.panel_txspectrum.Size = new System.Drawing.Size(442, 76); - this.panel_txspectrum.TabIndex = 6; - this.panel_txspectrum.Paint += new System.Windows.Forms.PaintEventHandler(this.panel_txspectrum_Paint); - this.panel_txspectrum.DoubleClick += new System.EventHandler(this.panel_txspectrum_DoubleClick); - // // tabPage_ber // this.tabPage_ber.BackColor = System.Drawing.Color.Transparent; @@ -459,12 +449,12 @@ // // groupBox1 // + this.groupBox1.Controls.Add(this.cb_picres); this.groupBox1.Controls.Add(this.cb_loop); this.groupBox1.Controls.Add(this.bt_rximages); this.groupBox1.Controls.Add(this.button_loadimage); this.groupBox1.Controls.Add(this.comboBox_quality); this.groupBox1.Controls.Add(this.label2); - this.groupBox1.Controls.Add(this.checkBox_big); this.groupBox1.Controls.Add(this.button_cancelimg); this.groupBox1.Controls.Add(this.button_sendimage); this.groupBox1.Location = new System.Drawing.Point(3, 508); @@ -472,6 +462,23 @@ this.groupBox1.Size = new System.Drawing.Size(1277, 42); this.groupBox1.TabIndex = 12; // + // cb_picres + // + this.cb_picres.FormattingEnabled = true; + this.cb_picres.Items.AddRange(new object[] { + "160x120", + "240x180", + "320x240", + "400x300", + "480x360", + "560x420", + "640x480"}); + this.cb_picres.Location = new System.Drawing.Point(174, 7); + this.cb_picres.Name = "cb_picres"; + this.cb_picres.Size = new System.Drawing.Size(85, 21); + this.cb_picres.TabIndex = 12; + this.cb_picres.Text = "640x480"; + // // cb_loop // this.cb_loop.AutoSize = true; @@ -519,7 +526,7 @@ "very high, 4min"}); this.comboBox_quality.Location = new System.Drawing.Point(57, 7); this.comboBox_quality.Name = "comboBox_quality"; - this.comboBox_quality.Size = new System.Drawing.Size(109, 21); + this.comboBox_quality.Size = new System.Drawing.Size(111, 21); this.comboBox_quality.TabIndex = 6; this.comboBox_quality.Text = "medium, 1min"; // @@ -532,19 +539,6 @@ this.label2.TabIndex = 7; this.label2.Text = "Quality:"; // - // checkBox_big - // - this.checkBox_big.AutoSize = true; - this.checkBox_big.Checked = true; - this.checkBox_big.CheckState = System.Windows.Forms.CheckState.Checked; - this.checkBox_big.Location = new System.Drawing.Point(187, 9); - this.checkBox_big.Name = "checkBox_big"; - this.checkBox_big.Size = new System.Drawing.Size(79, 17); - this.checkBox_big.TabIndex = 8; - this.checkBox_big.Text = "640(320)px"; - this.checkBox_big.UseVisualStyleBackColor = true; - this.checkBox_big.CheckedChanged += new System.EventHandler(this.checkBox_small_CheckedChanged); - // // button_cancelimg // this.button_cancelimg.ForeColor = System.Drawing.Color.Red; @@ -601,7 +595,6 @@ this.pictureBox_rximage.Location = new System.Drawing.Point(642, 27); this.pictureBox_rximage.Name = "pictureBox_rximage"; this.pictureBox_rximage.Size = new System.Drawing.Size(640, 480); - this.pictureBox_rximage.SizeMode = System.Windows.Forms.PictureBoxSizeMode.AutoSize; this.pictureBox_rximage.TabIndex = 3; this.pictureBox_rximage.TabStop = false; // @@ -634,6 +627,8 @@ // tabPage_file // this.tabPage_file.BackColor = System.Drawing.Color.Transparent; + this.tabPage_file.Controls.Add(this.groupBox8); + this.tabPage_file.Controls.Add(this.bt_open_html); this.tabPage_file.Controls.Add(this.pictureBox1); this.tabPage_file.Controls.Add(this.button2); this.tabPage_file.Controls.Add(this.bt_openrxfile); @@ -652,11 +647,76 @@ this.tabPage_file.TabIndex = 2; this.tabPage_file.Text = "File"; // + // groupBox8 + // + this.groupBox8.Controls.Add(this.cb_file_pause); + this.groupBox8.Controls.Add(this.label13); + this.groupBox8.Controls.Add(this.cb_file_loop); + this.groupBox8.Location = new System.Drawing.Point(17, 192); + this.groupBox8.Name = "groupBox8"; + this.groupBox8.Size = new System.Drawing.Size(137, 103); + this.groupBox8.TabIndex = 16; + this.groupBox8.TabStop = false; + this.groupBox8.Text = "Send all files in folder"; + // + // cb_file_pause + // + this.cb_file_pause.FormattingEnabled = true; + this.cb_file_pause.Items.AddRange(new object[] { + "0 s", + "10s", + "20s", + "30s", + "40s", + "50s", + "1min", + "2min", + "5min", + "10min"}); + this.cb_file_pause.Location = new System.Drawing.Point(14, 71); + this.cb_file_pause.Name = "cb_file_pause"; + this.cb_file_pause.Size = new System.Drawing.Size(92, 21); + this.cb_file_pause.TabIndex = 16; + this.cb_file_pause.Text = "1min"; + // + // label13 + // + this.label13.AutoSize = true; + this.label13.Location = new System.Drawing.Point(11, 53); + this.label13.Name = "label13"; + this.label13.Size = new System.Drawing.Size(105, 13); + this.label13.TabIndex = 15; + this.label13.Text = "Pause between files:"; + // + // cb_file_loop + // + this.cb_file_loop.AutoSize = true; + this.cb_file_loop.Location = new System.Drawing.Point(16, 25); + this.cb_file_loop.Name = "cb_file_loop"; + this.cb_file_loop.Size = new System.Drawing.Size(65, 17); + this.cb_file_loop.TabIndex = 14; + this.cb_file_loop.Text = "ON / off"; + this.cb_file_loop.UseVisualStyleBackColor = true; + // + // bt_open_html + // + this.bt_open_html.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft; + this.bt_open_html.ImageIndex = 2; + this.bt_open_html.ImageList = this.imageList1; + this.bt_open_html.Location = new System.Drawing.Point(17, 337); + this.bt_open_html.Name = "bt_open_html"; + this.bt_open_html.Size = new System.Drawing.Size(137, 51); + this.bt_open_html.TabIndex = 15; + this.bt_open_html.Text = "Open received \r\nHTML file"; + this.bt_open_html.UseVisualStyleBackColor = true; + this.bt_open_html.Visible = false; + this.bt_open_html.Click += new System.EventHandler(this.bt_open_html_Click); + // // pictureBox1 // this.pictureBox1.BackgroundImage = ((System.Drawing.Image)(resources.GetObject("pictureBox1.BackgroundImage"))); this.pictureBox1.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Center; - this.pictureBox1.Location = new System.Drawing.Point(17, 371); + this.pictureBox1.Location = new System.Drawing.Point(17, 394); this.pictureBox1.Name = "pictureBox1"; this.pictureBox1.Size = new System.Drawing.Size(127, 134); this.pictureBox1.TabIndex = 13; @@ -668,7 +728,7 @@ this.button2.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft; this.button2.ImageIndex = 8; this.button2.ImageList = this.imageList1; - this.button2.Location = new System.Drawing.Point(17, 218); + this.button2.Location = new System.Drawing.Point(17, 163); this.button2.Name = "button2"; this.button2.Size = new System.Drawing.Size(137, 23); this.button2.TabIndex = 12; @@ -681,7 +741,7 @@ this.bt_openrxfile.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft; this.bt_openrxfile.ImageIndex = 5; this.bt_openrxfile.ImageList = this.imageList1; - this.bt_openrxfile.Location = new System.Drawing.Point(17, 306); + this.bt_openrxfile.Location = new System.Drawing.Point(17, 301); this.bt_openrxfile.Name = "bt_openrxfile"; this.bt_openrxfile.Size = new System.Drawing.Size(137, 30); this.bt_openrxfile.TabIndex = 11; @@ -734,7 +794,7 @@ this.bt_file_send.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft; this.bt_file_send.ImageIndex = 10; this.bt_file_send.ImageList = this.imageList1; - this.bt_file_send.Location = new System.Drawing.Point(17, 157); + this.bt_file_send.Location = new System.Drawing.Point(17, 124); this.bt_file_send.Name = "bt_file_send"; this.bt_file_send.Size = new System.Drawing.Size(137, 30); this.bt_file_send.TabIndex = 3; @@ -1576,9 +1636,9 @@ // // groupBox4 // - this.groupBox4.Controls.Add(this.label13); + this.groupBox4.Controls.Add(this.cb_extIF); + this.groupBox4.Controls.Add(this.textBox7); 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_autostart); this.groupBox4.Controls.Add(this.bt_shutdown); @@ -1592,44 +1652,46 @@ this.groupBox4.TabStop = false; this.groupBox4.Text = "Maintenance"; // - // label13 + // cb_extIF // - 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:"; + this.cb_extIF.AutoSize = true; + this.cb_extIF.Location = new System.Drawing.Point(213, 22); + this.cb_extIF.Name = "cb_extIF"; + this.cb_extIF.Size = new System.Drawing.Size(135, 17); + this.cb_extIF.TabIndex = 27; + this.cb_extIF.Text = "External Data Interface"; + this.cb_extIF.UseVisualStyleBackColor = true; + this.cb_extIF.CheckedChanged += new System.EventHandler(this.cb_extIF_CheckedChanged); + // + // textBox7 + // + this.textBox7.BackColor = System.Drawing.SystemColors.Control; + this.textBox7.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.textBox7.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.textBox7.ForeColor = System.Drawing.Color.Black; + this.textBox7.Location = new System.Drawing.Point(211, 45); + this.textBox7.Multiline = true; + this.textBox7.Name = "textBox7"; + this.textBox7.Size = new System.Drawing.Size(151, 39); + this.textBox7.TabIndex = 28; + this.textBox7.Text = "for advanced users only, see developers manual"; // // label12 // this.label12.AutoSize = true; - this.label12.Location = new System.Drawing.Point(221, 23); + this.label12.Location = new System.Drawing.Point(428, 23); this.label12.Name = "label12"; this.label12.Size = new System.Drawing.Size(103, 13); this.label12.TabIndex = 26; this.label12.Text = "Language/Sprache:"; // - // 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 // this.cb_language.FormattingEnabled = true; this.cb_language.Items.AddRange(new object[] { "English", "German/Deutsch"}); - this.cb_language.Location = new System.Drawing.Point(326, 19); + this.cb_language.Location = new System.Drawing.Point(428, 42); this.cb_language.Name = "cb_language"; this.cb_language.Size = new System.Drawing.Size(110, 21); this.cb_language.TabIndex = 24; @@ -1643,15 +1705,15 @@ this.cb_autostart.CheckState = System.Windows.Forms.CheckState.Checked; this.cb_autostart.Location = new System.Drawing.Point(17, 23); this.cb_autostart.Name = "cb_autostart"; - this.cb_autostart.Size = new System.Drawing.Size(156, 17); + this.cb_autostart.Size = new System.Drawing.Size(155, 17); this.cb_autostart.TabIndex = 4; - this.cb_autostart.Text = "AUTO start/stop HSmodem"; + this.cb_autostart.Text = "LOCAL/(remote) HSmodem"; this.cb_autostart.UseVisualStyleBackColor = true; this.cb_autostart.CheckedChanged += new System.EventHandler(this.cb_autostart_CheckedChanged); // // bt_shutdown // - this.bt_shutdown.Location = new System.Drawing.Point(491, 19); + this.bt_shutdown.Location = new System.Drawing.Point(564, 18); this.bt_shutdown.Name = "bt_shutdown"; this.bt_shutdown.Size = new System.Drawing.Size(155, 23); this.bt_shutdown.TabIndex = 4; @@ -1665,7 +1727,7 @@ this.tb_shutdown.BorderStyle = System.Windows.Forms.BorderStyle.None; this.tb_shutdown.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); this.tb_shutdown.ForeColor = System.Drawing.Color.Red; - this.tb_shutdown.Location = new System.Drawing.Point(491, 48); + this.tb_shutdown.Location = new System.Drawing.Point(564, 47); this.tb_shutdown.Multiline = true; this.tb_shutdown.Name = "tb_shutdown"; this.tb_shutdown.Size = new System.Drawing.Size(155, 50); @@ -1674,7 +1736,7 @@ // // bt_resetmodem // - this.bt_resetmodem.Location = new System.Drawing.Point(529, 92); + this.bt_resetmodem.Location = new System.Drawing.Point(602, 91); this.bt_resetmodem.Name = "bt_resetmodem"; this.bt_resetmodem.Size = new System.Drawing.Size(117, 23); this.bt_resetmodem.TabIndex = 6; @@ -1692,7 +1754,7 @@ this.textBox3.Location = new System.Drawing.Point(15, 46); this.textBox3.Multiline = true; this.textBox3.Name = "textBox3"; - this.textBox3.Size = new System.Drawing.Size(151, 50); + this.textBox3.Size = new System.Drawing.Size(151, 39); this.textBox3.TabIndex = 12; this.textBox3.Text = "only uncheck if modem runs on a separate PC"; // @@ -2142,78 +2204,11 @@ this.richTextBox1.TabIndex = 0; this.richTextBox1.Text = resources.GetString("richTextBox1.Text"); // - // cb_speed - // - this.cb_speed.FormattingEnabled = true; - this.cb_speed.Items.AddRange(new object[] { - "1200 BPSK BW: 1300 Hz", - "2400 BPSK BW: 2500 Hz", - "3000 QPSK BW: 1700 Hz ", - "4000 QPSK BW: 2400 Hz ", - "4410 QPSK BW: 2500 Hz (QO-100 Standard)", - "4800 QPSK BW: 2700 Hz", - "5500 8APSK BW: 2300 Hz", - "6000 8APSK BW: 2500 Hz (QO-100 Transceiver)", - "6600 8APSK BW: 2600 Hz", - "7200 8APSK BW: 2700 Hz (QO-100 SDR)", - "45.45 Baud RTTY"}); - this.cb_speed.Location = new System.Drawing.Point(122, 2); - this.cb_speed.Name = "cb_speed"; - this.cb_speed.Size = new System.Drawing.Size(304, 21); - this.cb_speed.TabIndex = 11; - this.cb_speed.Text = "4410 QPSK BW: 2500 Hz (QO-100)"; - this.cb_speed.SelectedIndexChanged += new System.EventHandler(this.comboBox1_SelectedIndexChanged); - // - // label_speed - // - this.label_speed.AutoSize = true; - this.label_speed.Location = new System.Drawing.Point(31, 5); - this.label_speed.Name = "label_speed"; - this.label_speed.Size = new System.Drawing.Size(71, 13); - this.label_speed.TabIndex = 12; - this.label_speed.Text = "Speed [bit/s]:"; - // // timer_searchmodem // this.timer_searchmodem.Interval = 1000; this.timer_searchmodem.Tick += new System.EventHandler(this.timer_searchmodem_Tick); // - // label_fifo - // - this.label_fifo.AutoSize = true; - this.label_fifo.Location = new System.Drawing.Point(31, 31); - this.label_fifo.Name = "label_fifo"; - this.label_fifo.Size = new System.Drawing.Size(55, 13); - this.label_fifo.TabIndex = 14; - this.label_fifo.Text = "TX Buffer:"; - // - // label_capfifo - // - this.label_capfifo.AutoSize = true; - this.label_capfifo.Location = new System.Drawing.Point(31, 54); - this.label_capfifo.Name = "label_capfifo"; - this.label_capfifo.Size = new System.Drawing.Size(56, 13); - this.label_capfifo.TabIndex = 16; - this.label_capfifo.Text = "RX Buffer:"; - // - // lb_rxsignal - // - this.lb_rxsignal.AutoSize = true; - this.lb_rxsignal.Location = new System.Drawing.Point(448, 54); - this.lb_rxsignal.Name = "lb_rxsignal"; - this.lb_rxsignal.Size = new System.Drawing.Size(57, 13); - this.lb_rxsignal.TabIndex = 18; - this.lb_rxsignal.Text = "RX Signal:"; - // - // lb_rxsync - // - this.lb_rxsync.AutoSize = true; - this.lb_rxsync.Location = new System.Drawing.Point(448, 7); - this.lb_rxsync.Name = "lb_rxsync"; - this.lb_rxsync.Size = new System.Drawing.Size(52, 13); - this.lb_rxsync.TabIndex = 20; - this.lb_rxsync.Text = "RX Sync:"; - // // pn1 // this.pn1.Controls.Add(this.progressBar_fifo); @@ -2242,6 +2237,24 @@ this.progressBar_fifo.Style = System.Windows.Forms.ProgressBarStyle.Continuous; this.progressBar_fifo.TabIndex = 13; // + // label_capfifo + // + this.label_capfifo.AutoSize = true; + this.label_capfifo.Location = new System.Drawing.Point(31, 54); + this.label_capfifo.Name = "label_capfifo"; + this.label_capfifo.Size = new System.Drawing.Size(56, 13); + this.label_capfifo.TabIndex = 16; + this.label_capfifo.Text = "RX Buffer:"; + // + // label_speed + // + this.label_speed.AutoSize = true; + this.label_speed.Location = new System.Drawing.Point(31, 5); + this.label_speed.Name = "label_speed"; + this.label_speed.Size = new System.Drawing.Size(71, 13); + this.label_speed.TabIndex = 12; + this.label_speed.Text = "Speed [bit/s]:"; + // // pb_rxsignal // this.pb_rxsignal.BackgroundImage = ((System.Drawing.Image)(resources.GetObject("pb_rxsignal.BackgroundImage"))); @@ -2252,6 +2265,15 @@ this.pb_rxsignal.TabIndex = 17; this.pb_rxsignal.TabStop = false; // + // lb_rxsync + // + this.lb_rxsync.AutoSize = true; + this.lb_rxsync.Location = new System.Drawing.Point(448, 7); + this.lb_rxsync.Name = "lb_rxsync"; + this.lb_rxsync.Size = new System.Drawing.Size(52, 13); + this.lb_rxsync.TabIndex = 20; + this.lb_rxsync.Text = "RX Sync:"; + // // progressBar_capfifo // this.progressBar_capfifo.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(192)))), ((int)(((byte)(128))))); @@ -2262,6 +2284,37 @@ this.progressBar_capfifo.Style = System.Windows.Forms.ProgressBarStyle.Continuous; this.progressBar_capfifo.TabIndex = 15; // + // cb_speed + // + this.cb_speed.FormattingEnabled = true; + this.cb_speed.Items.AddRange(new object[] { + "1200 BPSK BW: 1300 Hz", + "2400 BPSK BW: 2500 Hz", + "3000 QPSK BW: 1700 Hz ", + "4000 QPSK BW: 2400 Hz ", + "4410 QPSK BW: 2500 Hz (QO-100 Standard)", + "4800 QPSK BW: 2700 Hz", + "5500 8APSK BW: 2300 Hz", + "6000 8APSK BW: 2500 Hz (QO-100 Transceiver)", + "6600 8APSK BW: 2600 Hz", + "7200 8APSK BW: 2700 Hz (QO-100 SDR)", + "45.45 Baud RTTY"}); + this.cb_speed.Location = new System.Drawing.Point(122, 2); + this.cb_speed.Name = "cb_speed"; + this.cb_speed.Size = new System.Drawing.Size(304, 21); + this.cb_speed.TabIndex = 11; + this.cb_speed.Text = "4410 QPSK BW: 2500 Hz (QO-100)"; + this.cb_speed.SelectedIndexChanged += new System.EventHandler(this.comboBox1_SelectedIndexChanged); + // + // lb_rxsignal + // + this.lb_rxsignal.AutoSize = true; + this.lb_rxsignal.Location = new System.Drawing.Point(448, 54); + this.lb_rxsignal.Name = "lb_rxsignal"; + this.lb_rxsignal.Size = new System.Drawing.Size(57, 13); + this.lb_rxsignal.TabIndex = 18; + this.lb_rxsignal.Text = "RX Signal:"; + // // pb_rxsync // this.pb_rxsync.BackgroundImage = ((System.Drawing.Image)(resources.GetObject("pb_rxsync.BackgroundImage"))); @@ -2272,6 +2325,34 @@ this.pb_rxsync.TabIndex = 19; this.pb_rxsync.TabStop = false; // + // label_fifo + // + this.label_fifo.AutoSize = true; + this.label_fifo.Location = new System.Drawing.Point(31, 31); + this.label_fifo.Name = "label_fifo"; + this.label_fifo.Size = new System.Drawing.Size(55, 13); + this.label_fifo.TabIndex = 14; + this.label_fifo.Text = "TX Buffer:"; + // + // panel_txspectrum + // + this.panel_txspectrum.BackColor = System.Drawing.SystemColors.ControlLight; + this.panel_txspectrum.Location = new System.Drawing.Point(92, 590); + this.panel_txspectrum.Name = "panel_txspectrum"; + this.panel_txspectrum.Size = new System.Drawing.Size(442, 76); + this.panel_txspectrum.TabIndex = 6; + this.panel_txspectrum.Paint += new System.Windows.Forms.PaintEventHandler(this.panel_txspectrum_Paint); + this.panel_txspectrum.DoubleClick += new System.EventHandler(this.panel_txspectrum_DoubleClick); + // + // panel_constel + // + this.panel_constel.BackColor = System.Drawing.Color.AliceBlue; + this.panel_constel.Location = new System.Drawing.Point(11, 590); + this.panel_constel.Name = "panel_constel"; + this.panel_constel.Size = new System.Drawing.Size(75, 75); + this.panel_constel.TabIndex = 5; + this.panel_constel.Paint += new System.Windows.Forms.PaintEventHandler(this.panel_constel_Paint); + // // Form1 // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); @@ -2286,7 +2367,7 @@ this.ForeColor = System.Drawing.SystemColors.ControlText; this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); this.Name = "Form1"; - this.Text = "AMSAT-DL Multimedia HS Modem V0.72 by DJ0ABR"; + this.Text = "AMSAT-DL Multimedia HS Modem V0.84 by DJ0ABR"; this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.Form1_FormClosing); this.statusStrip1.ResumeLayout(false); this.statusStrip1.PerformLayout(); @@ -2301,6 +2382,8 @@ this.tabControl1.ResumeLayout(false); this.tabPage_file.ResumeLayout(false); this.tabPage_file.PerformLayout(); + this.groupBox8.ResumeLayout(false); + this.groupBox8.PerformLayout(); ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit(); this.tabPage_audio.ResumeLayout(false); this.groupBox7.ResumeLayout(false); @@ -2349,9 +2432,9 @@ private System.Windows.Forms.Timer timer_udprx; private System.Windows.Forms.StatusStrip statusStrip1; private System.Windows.Forms.ToolStripStatusLabel toolStripStatusLabel; - private System.Windows.Forms.Panel panel_constel; + private DoubleBufferedPanel panel_constel; private System.Windows.Forms.Timer timer_qpsk; - private System.Windows.Forms.Panel panel_txspectrum; + private DoubleBufferedPanel panel_txspectrum; private System.Windows.Forms.TabPage tabPage_ber; private System.Windows.Forms.Button button_stopBERtest; private System.Windows.Forms.Button button_startBERtest; @@ -2361,7 +2444,6 @@ private System.Windows.Forms.Button button_loadimage; private System.Windows.Forms.Button button_cancelimg; private System.Windows.Forms.Button button_sendimage; - private System.Windows.Forms.CheckBox checkBox_big; private System.Windows.Forms.Label label2; private System.Windows.Forms.Label label_rximage; private System.Windows.Forms.Label label_tximage; @@ -2369,7 +2451,7 @@ private System.Windows.Forms.PictureBox pictureBox_tximage; private System.Windows.Forms.TabControl tabControl1; private System.Windows.Forms.ToolStripStatusLabel ts_ip; - private System.Windows.Forms.Panel groupBox1; + private DoubleBufferedPanel groupBox1; private System.Windows.Forms.TabPage tabPage_file; private System.Windows.Forms.RichTextBox rtb_TXfile; private System.Windows.Forms.Button bt_file_send; @@ -2449,9 +2531,7 @@ private System.Windows.Forms.Label lb_rxsync; private System.Windows.Forms.PictureBox pb_rxsync; 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; private System.Windows.Forms.ToolStripStatusLabel toolStrip_Type; @@ -2501,8 +2581,8 @@ private System.Windows.Forms.Button bt_rxfont; private System.Windows.Forms.Button button4; private System.Windows.Forms.Button bt_rtty_RY; - private System.Windows.Forms.Panel pn1; - private System.Windows.Forms.Panel panel1; + private DoubleBufferedPanel pn1; + private DoubleBufferedPanel panel1; private System.Windows.Forms.Label label4; private System.Windows.Forms.Label label3; private System.Windows.Forms.Button button5; @@ -2518,6 +2598,14 @@ private System.Windows.Forms.Button button6; private System.Windows.Forms.ToolStripStatusLabel toolStrip_spacer; private System.Windows.Forms.ToolStripStatusLabel ts_userinfo; + private System.Windows.Forms.CheckBox cb_file_loop; + private System.Windows.Forms.ComboBox cb_picres; + private System.Windows.Forms.CheckBox cb_extIF; + private System.Windows.Forms.TextBox textBox7; + private System.Windows.Forms.Button bt_open_html; + private System.Windows.Forms.GroupBox groupBox8; + private System.Windows.Forms.ComboBox cb_file_pause; + private System.Windows.Forms.Label label13; } } diff --git a/oscardata/oscardata/Form1.cs b/oscardata/oscardata/Form1.cs index 83c4bf8..63b0fe2 100755 --- a/oscardata/oscardata/Form1.cs +++ b/oscardata/oscardata/Form1.cs @@ -31,6 +31,8 @@ using System.Diagnostics; using System.Threading; using oscardata.Properties; using System.Reflection; +using System.Globalization; +using System.Text.RegularExpressions; namespace oscardata { @@ -50,7 +52,7 @@ namespace oscardata int recPhase = 0; const int Rtty_deftext_anz = 20; String[] Rtty_deftext = new string[Rtty_deftext_anz]; - + DateTime dtfile = DateTime.UtcNow; public Form1() { @@ -167,10 +169,10 @@ namespace oscardata button_sendimage.Enabled = false; } - if (TXfoldername == "" || lastFullName == "") + /*if (TXfoldername == "" || lastFullName == "") cb_loop.Enabled = false; else - cb_loop.Enabled = true; + cb_loop.Enabled = true;*/ ShowTXstatus(); @@ -183,7 +185,7 @@ namespace oscardata if (ArraySend.getSending() == false) { // transmission is finished, wait until data in TXfifo have been sent - if (statics.PBfifousage < 2) + if (statics.PBfifousage < 4) { // start sending a new picture startNextImage(); @@ -192,6 +194,29 @@ namespace oscardata } } + if (txcommand == statics.AsciiFile || txcommand == statics.HTMLFile || txcommand == statics.BinaryFile) + { + // if "loop" is selected send the next image in folder + if (cb_file_loop.Checked) + { + // check pause time + if(retransmitPause() == false) + { + // check if we are ready with any transmission + if (ArraySend.getSending() == false) + { + // transmission is finished, wait until data in TXfifo have been sent + if (statics.PBfifousage < 4) + { + // start sending a new picture + startNextFile(); + dtfile = DateTime.UtcNow; + } + } + } + } + } + if (ts_ip.Text.Contains("?") || ts_ip.Text.Contains("1.2.3.4") || old_tsip != statics.ModemIP) { if (statics.ModemIP == "1.2.3.4") @@ -251,7 +276,7 @@ namespace oscardata if (setPBvolume >= 0) { Byte[] txdata = new byte[2]; - txdata[0] = (Byte)statics.SetPBvolume; + txdata[0] = statics.SetPBvolume; txdata[1] = (Byte)setPBvolume; Udp.UdpSendCtrl(txdata); setPBvolume = -1; @@ -260,7 +285,7 @@ namespace oscardata if (setCAPvolume != -1) { Byte[] txdata = new byte[2]; - txdata[0] = (Byte)statics.SetCAPvolume; + txdata[0] = statics.SetCAPvolume; txdata[1] = (Byte)setCAPvolume; Udp.UdpSendCtrl(txdata); setCAPvolume = -1; @@ -269,7 +294,7 @@ namespace oscardata if (setLSvolume >= 0) { Byte[] txdata = new byte[2]; - txdata[0] = (Byte)statics.SetLSvolume; + txdata[0] = statics.SetLSvolume; txdata[1] = (Byte)setLSvolume; Udp.UdpSendCtrl(txdata); setLSvolume = -1; @@ -278,7 +303,7 @@ namespace oscardata if (setMICvolume != -1) { Byte[] txdata = new byte[2]; - txdata[0] = (Byte)statics.SetMICvolume; + txdata[0] = statics.SetMICvolume; txdata[1] = (Byte)setMICvolume; Udp.UdpSendCtrl(txdata); setMICvolume = -1; @@ -315,6 +340,35 @@ namespace oscardata } } + bool sendInProgress = false; + bool retransmitPause() + { + // check if file send is in progress + bool fstat = statics.PBfifousage > 1; + if (fstat == true) + { + // file send in progress + sendInProgress = true; + return true; + } + + if(fstat == false && sendInProgress == true) + { + // just finished sending + sendInProgress = false; + dtfile = DateTime.UtcNow; + return true; + } + + // not sending, wait until pause time elapsed + String s = cb_file_pause.Text; + int dur = int.Parse(Regex.Match(s, @"\d+").Value, NumberFormatInfo.InvariantInfo); + if (s.Contains("min")) dur *= 60; + TimeSpan ts = DateTime.UtcNow - dtfile; + if (ts.TotalSeconds >= dur) return false; + return true; + } + // correct entries in the Audio Device Comboboxes if devices have changed void findDevice(ComboBox cb) { @@ -362,7 +416,7 @@ namespace oscardata { // tell hsmodem to terminate itself Byte[] txdata = new byte[1]; - txdata[0] = (Byte)statics.terminate; + txdata[0] = statics.terminate; Udp.UdpSendCtrl(txdata); Thread.Sleep(250); @@ -456,8 +510,15 @@ namespace oscardata { // reception complete, show stored file Console.WriteLine("load " + recfile.filename); - pictureBox_rximage.BackgroundImage = Image.FromFile(recfile.filename); - pictureBox_rximage.Invalidate(); + try + { + pictureBox_rximage.BackgroundImage = Image.FromFile(recfile.filename); + pictureBox_rximage.Invalidate(); + } + catch + { + // invalid picture + } } if (recfile.pbmp != null) { @@ -474,7 +535,7 @@ namespace oscardata if (rxtype == statics.AsciiFile) { int fret = recfile.receive(rxd); - if (fret == 1) + if (fret >= 1) { // ASCII file received, show in window String serg = File.ReadAllText(recfile.filename); @@ -487,13 +548,15 @@ namespace oscardata if (rxtype == statics.HTMLFile) { int fret = recfile.receive(rxd); - if (fret == 1) + if (fret >= 1) { // HTML file received, show in window String serg = File.ReadAllText(recfile.filename); printText(rtb_RXfile, serg); - // and show in browser - OpenUrl(recfile.filename); + // save filename + statics.lastRXedHTMLfile = recfile.filename; + // show the HTML-Show Button + bt_open_html.Visible = true; } if (fret == -5) printBadBlocks(); @@ -502,7 +565,7 @@ namespace oscardata if (rxtype == statics.BinaryFile) { int fret = recfile.receive(rxd); - if (fret == 1) + if (fret >= 1) { // Binary file received, show statistics in window try @@ -661,7 +724,6 @@ namespace oscardata if (ba != null) { int rtty_val = ba[0]; - rtty_txon = ba[1]; rtty_sync = ba[2]; if (rtty_val != 0) { @@ -683,7 +745,7 @@ namespace oscardata } } } - if (rtty_txon == 1) + if (statics.rtty_txon == 1) { bt_rtty_tx.BackColor = Color.Red; tb_rtty_TX.Enabled = true; @@ -702,6 +764,7 @@ namespace oscardata RTTYmousepos.X = e.X; RTTYmousepos.Y = e.Y; int cidx = tb_rtty_RX.GetCharIndexFromPosition(RTTYmousepos); + Console.WriteLine("cidx: " + cidx.ToString()); // get the word under this position // text after pos @@ -853,6 +916,7 @@ namespace oscardata long TXRealFileSize = 0; String TXfoldername = ""; String lastFullName = ""; + String TXfullfilename = ""; // prepare an image file for transmission void prepareImage(String fullfn) @@ -860,10 +924,10 @@ namespace oscardata if (statics.checkImage(fullfn) == false) return; // all images are converted to jpg, make the new filename + TXfullfilename = fullfn; TXfoldername = statics.purePath(fullfn); TXRealFilename = statics.pureFilename(fullfn); TXRealFilename = statics.AddReplaceFileExtension(TXRealFilename,"jpg"); - lastFullName = fullfn; // random filename for picturebox control (picturebox cannot reload image from actual filename) try { @@ -888,11 +952,13 @@ namespace oscardata if (cb_stampcall.Checked == false) cs = ""; String inf = tb_info.Text; if (cb_stampinfo.Checked == false) inf = ""; - if (!checkBox_big.Checked) + Size picsize = getResolution(); + if(picsize.Width != 0 && picsize.Height != 0) { - img = ih.ResizeImage(img, 320, 240, cs, inf); - // set quality by reducing the file size and save under default name - ih.SaveJpgAtFileSize(img, TXimagefilename, max_size / 2); + int reduc = 640 / picsize.Width; + if (reduc < 1) reduc = 1; + img = ih.ResizeImage(img, picsize.Width, picsize.Height, cs, inf); + ih.SaveJpgAtFileSize(img, TXimagefilename, max_size/ reduc); } else { @@ -901,12 +967,31 @@ namespace oscardata ih.SaveJpgAtFileSize(img, TXimagefilename, max_size); } - //pictureBox_tximage.Load(TXimagefilename); this does not work under ARM mono + //pictureBox_tximage.Load(TXimagefilename); // this does not work under ARM mono pictureBox_tximage.BackgroundImage = Image.FromFile(TXimagefilename); TXRealFileSize = statics.GetFileSize(TXimagefilename); ShowTXstatus(); txcommand = statics.Image; } + + Size getResolution() + { + Size sz = new Size(0,0); + + String r = cb_picres.Text; + String[] ra = r.Split(new char[] { 'x' }); + try + { + int w = Convert.ToInt32(ra[0]); + int h = Convert.ToInt32(ra[1]); + sz.Width = w; + sz.Height = h; + } + catch { } + + + return sz; + } void ShowTXstatus() { @@ -952,8 +1037,51 @@ namespace oscardata button_sendimage_Click(null, null); } + // in loop mode only: send the next picture in current image folder + void startNextFile() + { + if (lastFullName == "") return; + + // read all file from folder + String folder = Path.GetDirectoryName(lastFullName); + String[] files = Directory.GetFiles(folder); + Array.Sort(files); + int i; + bool found = false; + for (i = 0; i < files.Length; i++) + { + // look for the last transmitted file + if (files[i] == lastFullName) + { + // choose the next file + if (++i == files.Length) i = 0; + // check if the file is valid + try + { + long sz = statics.GetFileSize(files[i]); + if (sz < 1000000) + { + // do not try to send a file > 1MB + found = true; + break; + } + } + catch + { + lastFullName = files[i]; + } + } + } + if (!found) return; + + // files[i] is the filename to be sent + bt_prepareAndSendFile(files[i], Path.GetFileName(files[i]), statics.BinaryFile); + bt_file_send_Click(null, null); + } + private void button_loadimage_Click(object sender, EventArgs e) { + lastFullName = ""; OpenFileDialog open = new OpenFileDialog(); open.Filter = statics.langstr[13]; if (open.ShowDialog() == DialogResult.OK) @@ -964,6 +1092,7 @@ namespace oscardata private void button_sendimage_Click(object sender, EventArgs e) { + lastFullName = TXfullfilename; txcommand = statics.Image; rxbytecounter = 0; pictureBox_rximage.Image = null; @@ -1207,9 +1336,22 @@ namespace oscardata //Console.WriteLine("BCip: " + ip); } }*/ + + // if hsmodem is local, use local IP instead of broadcast + if (cb_autostart.Checked) + { + String[] myips = statics.getOwnIPs(); + if (myips.Length >= 1) + { + statics.MyIP = myips[0]; + } + return statics.MyIP; + } + + return ip; } - + /* * search for the modem IP: * send a search message via UDP to port UdpBCport @@ -1226,69 +1368,84 @@ namespace oscardata * 4 ... DV loudspeaker volume * 5 ... DV mic volume * 6 ... safe mode - * 7..9 ... unused - * 10 .. 109 ... PB device name - * 110 .. 209 ... CAP device name + * 7 ... send introduction voice record + * 8 ... rtty autosync on/off + * 9 ... hsmodem speed mode + * 10 .. external data IF on/off + * 11-19 ... unused + * 20 .. 119 ... PB device name + * 120 .. 219 ... CAP device name + * 220 .. 239 ... Callsign + * 230 .. 249 ... qthloc + * 250 .. 269 ... Name * */ 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[270]; + int idx = 0; + txb[idx++] = 0x3c; // ID of this message + txb[idx++] = (Byte)tb_PBvol.Value; + txb[idx++] = (Byte)tb_CAPvol.Value; + txb[idx++] = (Byte)cb_announcement.Items.IndexOf(cb_announcement.Text); + txb[idx++] = (Byte)tb_loadspeaker.Value; + txb[idx++] = (Byte)tb_mic.Value; + txb[idx++] = 0; // unused + txb[idx++] = (Byte)(cb_sendIntro.Checked?1:0); + txb[idx++] = (Byte)(cb_rx_autosync.Checked ? 1 : 0); + if(cb_speed.DroppedDown == false) + txb[idx++] = (Byte)cb_speed.SelectedIndex; + else + txb[idx++] = (Byte)255; // invalid, hsmodem does not use this value + txb[idx++] = (Byte)(cb_extIF.Checked ? 1 : 0); - Byte[] txb = new byte[260]; - txb[0] = 0x3c; // ID of this message - txb[1] = (Byte)tb_PBvol.Value; - txb[2] = (Byte)tb_CAPvol.Value; - txb[3] = (Byte)cb_announcement.Items.IndexOf(cb_announcement.Text); - txb[4] = (Byte)tb_loadspeaker.Value; - txb[5] = (Byte)tb_mic.Value; - txb[6] = safemode; - txb[7] = (Byte)(cb_sendIntro.Checked?1:0); - txb[8] = (Byte)(cb_rx_autosync.Checked ? 1 : 0); - txb[9] = (Byte)0; // unused Byte[] bpb = statics.StringToByteArrayUtf8(cb_audioPB.Text); Byte[] bcap = statics.StringToByteArrayUtf8(cb_audioCAP.Text); //Byte[] bpb = statics.StringToByteArray(cb_audioPB.Text); //Byte[] bcap = statics.StringToByteArray(cb_audioCAP.Text); - // 200 Bytes (from 10..209) name of selected sound device + // 200 Bytes (from 20..219) name of selected sound device for (int i=0; i<100; i++) { if (i >= bpb.Length) - txb[i + 10] = 0; + txb[i + 20] = 0; else - txb[i+10] = bpb[i]; + txb[i + 20] = bpb[i]; if (i >= bcap.Length) - txb[i + 110] = 0; + txb[i + 120] = 0; else - txb[i + 110] = bcap[i]; + txb[i + 120] = bcap[i]; } - // 210 .. 229 = Callsign + // 220 .. 239 = Callsign Byte[] callarr = statics.StringToByteArray(tb_callsign.Text); for (int i = 0; i < 20; i++) { - if (i >= callarr.Length) txb[i+210] = 0; - else txb[i + 210] = callarr[i]; + if (i >= callarr.Length) + txb[i + 220] = 0; + else + txb[i + 220] = callarr[i]; } - // 230 .. 239 = qthloc + // 240 .. 249 = qthloc Byte[] qtharr = statics.StringToByteArray(tb_myqthloc.Text); for (int i = 0; i < 10; i++) { - if (i >= qtharr.Length) txb[i + 230] = 0; - else txb[i+230] = qtharr[i]; + if (i >= qtharr.Length) + txb[i + 240] = 0; + else + txb[i + 240] = qtharr[i]; } - // 240 .. 259 = Name + // 250 .. 269 = Name Byte[] namearr = statics.StringToByteArray(tb_myname.Text); for (int i = 0; i < 20; i++) { - if (i >= namearr.Length) txb[i+240] = 0; - else txb[i + 240] = namearr[i]; + if (i >= namearr.Length) + txb[i + 250] = 0; + else + txb[i + 250] = namearr[i]; } if (statics.ModemIP == "1.2.3.4") @@ -1316,6 +1473,7 @@ namespace oscardata Byte[] textarr = File.ReadAllBytes(statics.zip_TXtempfilename); ArraySend.Send(textarr, (Byte)txcommand, TXfilename, TXRealFilename); + lastFullName = TXfilename; } private void bt_file_ascii_Click(object sender, EventArgs e) @@ -1335,38 +1493,32 @@ namespace oscardata private void bt_sendFile(String filter, int cmd) { + lastFullName = ""; OpenFileDialog open = new OpenFileDialog(); open.Filter = filter; if (open.ShowDialog() == DialogResult.OK) { - txcommand = cmd; - TXfilename = open.FileName; - TXRealFilename = open.SafeFileName; - if (txcommand == statics.BinaryFile) - rtb_TXfile.Text = statics.langstr[20] + TXfilename + statics.langstr[21]; - else - rtb_TXfile.Text = File.ReadAllText(TXfilename); - - // compress file - ZipStorer zs = new ZipStorer(); - zs.zipFile(statics.zip_TXtempfilename, open.SafeFileName, open.FileName); - - TXRealFileSize = statics.GetFileSize(statics.zip_TXtempfilename); - ShowTXstatus(); + bt_prepareAndSendFile(open.FileName, open.SafeFileName, cmd); } } - /*void removeTab(TabPage tb) + private void bt_prepareAndSendFile(String FilenameAndPath, String Filename, int txcmd) { - if (tabControl1.TabPages.IndexOf(tb) != -1) - tabControl1.TabPages.Remove(tb); - } + txcommand = txcmd; + TXfilename = FilenameAndPath; + TXRealFilename = Filename; + if (txcommand == statics.BinaryFile) + rtb_TXfile.Text = statics.langstr[20] + TXfilename + statics.langstr[21]; + else + rtb_TXfile.Text = File.ReadAllText(TXfilename); - void addTab(int idx, TabPage tb) - { - if (tabControl1.TabPages.IndexOf(tb) == -1) - tabControl1.TabPages.Insert(idx,tb); - }*/ + // compress file + ZipStorer zs = new ZipStorer(); + zs.zipFile(statics.zip_TXtempfilename, Filename, FilenameAndPath); + + TXRealFileSize = statics.GetFileSize(statics.zip_TXtempfilename); + ShowTXstatus(); + } private void comboBox1_SelectedIndexChanged(object sender, EventArgs e) { @@ -1395,6 +1547,8 @@ namespace oscardata removeTab(tabPage_rtty);*/ } + if (cb_speed.Text.Contains("1200")) statics.real_datarate = 1200; + if (cb_speed.Text.Contains("2400")) statics.real_datarate = 2400; if (cb_speed.Text.Contains("3000")) statics.real_datarate = 3000; if (cb_speed.Text.Contains("4000")) statics.real_datarate = 4000; if (cb_speed.Text.Contains("4410")) statics.real_datarate = 4410; @@ -1404,13 +1558,17 @@ namespace oscardata if (cb_speed.Text.Contains("6600")) statics.real_datarate = 6600; if (cb_speed.Text.Contains("7200")) statics.real_datarate = 7200; - Byte[] txdata = new byte[statics.PayloadLen + 2]; + /*Byte[] txdata = new byte[statics.PayloadLen + 2]; int idx = cb_speed.SelectedIndex; txdata[0] = (Byte)statics.ResamplingRate; // BER Test Marker txdata[1] = (Byte)idx; + + // and send info to modem - Udp.UdpSendCtrl(txdata); + Udp.UdpSendCtrl(txdata);*/ + + String s = cb_speed.Text; txcommand = statics.noTX; // stop any ongoing transmission @@ -1689,10 +1847,10 @@ namespace oscardata switch(i) { case 0: - Rtty_deftext[0] = "\r\n\r\nCQ CQ CQ de %m CQ CQ CQ de %m pse k k k\r\n%r"; // CQ call + Rtty_deftext[0] = "\r\n\r\nRYRYRYRYRYRYRYRYRYRY\r\nCQ CQ CQ de %m CQ CQ CQ de %m pse k k k\r\n%r"; // CQ call break; case 1: - Rtty_deftext[1] = "\r\n\r\n%c de %m pse k k k\r\n%r"; // answer CQ call + Rtty_deftext[1] = "\r\n\r\n%c %c de %m %m %m pse k k k\r\n%r"; // answer CQ call break; case 2: Rtty_deftext[2] = "\r\n\r\n%c de %m\r\n"; // start TX @@ -1724,7 +1882,7 @@ namespace oscardata if (dr == DialogResult.Yes) { Byte[] txdata = new byte[1]; - txdata[0] = (Byte)statics.Modem_shutdown; + txdata[0] = statics.Modem_shutdown; Udp.UdpSendCtrl(txdata); MessageBox.Show(statics.langstr[24], statics.langstr[22], MessageBoxButtons.OK); @@ -1736,7 +1894,7 @@ namespace oscardata private void button1_Click(object sender, EventArgs e) { Byte[] txdata = new byte[1]; - txdata[0] = (Byte)statics.AutosendFile; + txdata[0] = statics.AutosendFile; // and transmit it Udp.UdpSendCtrl(txdata); @@ -1745,7 +1903,7 @@ namespace oscardata private void bt_resetmodem_Click(object sender, EventArgs e) { Byte[] txdata = new byte[1]; - txdata[0] = (Byte)statics.ResetModem; + txdata[0] = statics.ResetModem; // and transmit it Udp.UdpSendCtrl(txdata); @@ -2019,7 +2177,6 @@ namespace oscardata cb_sendIntro.Text = "send introduction before TX"; tb_recintro.Text = "record introduction"; lb_tuningqrgs.Text = "Send Marker Frequency:"; - label13.Text = "Data Security:"; textBox5.Text = "Click on Callsign or Name in RX window"; textBox2.Text = @"Special Markers: %m... my call @@ -2043,6 +2200,11 @@ namespace oscardata bt_rtty_myinfo.Text = "My Info"; bt_rtty_station.Text = "My Station"; textBox6.Text = "or double click in spectrum"; + textBox7.Text = "for advanced users only, see developers manual"; + bt_open_html.Text = "Open received " + Environment.NewLine + "HTML file"; + groupBox8.Text = "Send all files in folder"; + cb_file_loop.Text = "ON / off"; + label13.Text = "Pause between files"; } if (language == 1) @@ -2098,7 +2260,6 @@ namespace oscardata cb_sendIntro.Text = "sende Vorstellung vor TX"; tb_recintro.Text = "Vorstellung aufnehmen"; lb_tuningqrgs.Text = "Sende Frequenzmarkierung:"; - label13.Text = "Datensicherheit:"; textBox5.Text = "Klicke auf Rufzeichen und Namen im RX Fenster"; textBox2.Text = @"Spezialzeichen: %m... mein Rufzeichen @@ -2122,6 +2283,11 @@ namespace oscardata bt_rtty_myinfo.Text = "Meine Info"; bt_rtty_station.Text = "Meine Station"; textBox6.Text = "oder Doppelklick in Spektrum"; + textBox7.Text = "nur für spezielle Nutzer, siehe Entwickler - Dokumentation"; + bt_open_html.Text = "Öffne empfangene" + Environment.NewLine + "HTML Datei"; + groupBox8.Text = "TX alle Dateien im Verz."; + cb_file_loop.Text = "EIN / aus"; + label13.Text = "Pause zwischen Dateien"; } } @@ -2488,13 +2654,12 @@ namespace oscardata ShowRTTYtext(selected_rtty_deftext, 0); } - int rtty_txon = 0; int rtty_sync = 0; private void bt_rtty_tx_Click(object sender, EventArgs e) { Byte[] txdata = new byte[2]; txdata[0] = statics.txonoff; - txdata[1] = (Byte)((rtty_txon==1)?0:1); + txdata[1] = (Byte)((statics.rtty_txon==1)?0:1); Udp.UdpSendCtrl(txdata); } @@ -2592,5 +2757,18 @@ namespace oscardata { ShowRTTYtext(13); } + + private void cb_extIF_CheckedChanged(object sender, EventArgs e) + { + statics.extData = (Byte)(cb_extIF.Checked?1:0); + } + + private void bt_open_html_Click(object sender, EventArgs e) + { + if(statics.lastRXedHTMLfile.Length > 4) + OpenUrl(statics.lastRXedHTMLfile); + } } + + class DoubleBufferedPanel : Panel { public DoubleBufferedPanel() : base() { DoubleBuffered = true; } } } diff --git a/oscardata/oscardata/Form1.resx b/oscardata/oscardata/Form1.resx index 2bf716c..0646b8e 100755 --- a/oscardata/oscardata/Form1.resx +++ b/oscardata/oscardata/Form1.resx @@ -137,7 +137,7 @@ AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0 ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAAA+ - JQAAAk1TRnQBSQFMAgEBFwEAAdgBDAHYAQwBEAEAARABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo + JQAAAk1TRnQBSQFMAgEBFwEAAcgBDQHIAQ0BEAEAARABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo AwABQAMAAWADAAEBAQABCAYAARgYAAGAAgABgAMAAoABAAGAAwABgAEAAYABAAKAAgADwAEAAcAB3AHA AQAB8AHKAaYBAAEzBQABMwEAATMBAAEzAQACMwIAAxYBAAMcAQADIgEAAykBAANVAQADTQEAA0IBAAM5 AQABgAF8Af8BAAJQAf8BAAGTAQAB1gEAAf8B7AHMAQABxgHWAe8BAAHWAucBAAGQAakBrQIAAf8BMwMA @@ -5297,10 +5297,14 @@ GNU General Public License FreeDV: https://github.com/drowe67/codec2 GNU Lesser General Public License v2.1 -Sound Library: libsoundio +Sound Library Linux: libsoundio https://github.com/andrewrk/libsoundio MIT License +Sound Library Windows: Portaudio +https://github.com/PortAudio/portaudio +https://github.com/PortAudio/portaudio/blob/master/LICENSE.txt + Reed Solomon error correction: https://www.schifra.com/ License: Schifra User Group 1, GPL V2 diff --git a/oscardata/oscardata/bin/Release/oscardata.exe b/oscardata/oscardata/bin/Release/oscardata.exe index ac7c65a0d8f0536cb25801d0ca151f1585832de6..eb9e11caf159f8e5bb4aa8ef04764aad0e4c46d3 100755 GIT binary patch delta 77159 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