mirror of https://github.com/F5OEO/rpitx
First blind implementation of DCF77
This commit is contained in:
parent
c70d7c4a3f
commit
d20e9d6676
|
|
@ -0,0 +1,268 @@
|
|||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <unistd.h>
|
||||
#include <string.h>
|
||||
#include <errno.h>
|
||||
#include <stdarg.h>
|
||||
#include <stdint.h>
|
||||
#include <math.h>
|
||||
#include <time.h>
|
||||
#include <signal.h>
|
||||
#include <sys/types.h>
|
||||
#include <sys/stat.h>
|
||||
#include <fcntl.h>
|
||||
#include <sys/mman.h>
|
||||
|
||||
// Get main process from arduino project : CodingGhost/DCF77-Transmitter
|
||||
// Generator for 77,5 kHz (DCF-77) by Jonas woerner (c)
|
||||
// Thanks to Jonas
|
||||
// Evariste F5OEO 2015
|
||||
|
||||
//!!!!ONLY FOR TESTING PURPOSES!
|
||||
#define byte char
|
||||
#define false 0
|
||||
#define true 1
|
||||
|
||||
byte dcfBits[60] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0 };
|
||||
|
||||
#define anzahlMinutenBits 7
|
||||
#define anzahlStundenBits 6
|
||||
#define offsetMinutenBits 21
|
||||
#define offsetStundenBits 29
|
||||
byte MinutenBits[anzahlMinutenBits] = { 0 };
|
||||
byte StundenBits[anzahlStundenBits] = { 0 };
|
||||
int parity = 0;
|
||||
int FileFreqTiming;
|
||||
|
||||
void modulate(byte b);
|
||||
void playtone(double Amplitude,uint32_t Timing);
|
||||
|
||||
void loop()
|
||||
{
|
||||
int i;
|
||||
for ( i = 0;i<58;++i)
|
||||
{
|
||||
modulate(dcfBits[i]);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
void DCF_BITS(int Minuten, int Stunden)
|
||||
{
|
||||
int i;
|
||||
//MINUTE
|
||||
|
||||
if (Minuten > 39)
|
||||
{
|
||||
MinutenBits[6] = 1;
|
||||
Minuten -= 40;
|
||||
}
|
||||
if (Minuten > 19)
|
||||
{
|
||||
MinutenBits[5] = 1;
|
||||
Minuten -= 20;
|
||||
}
|
||||
|
||||
if (Minuten > 9)
|
||||
{
|
||||
MinutenBits[4] = 1;
|
||||
Minuten -= 10;
|
||||
}
|
||||
|
||||
for ( i = 0; i < 4; ++i)
|
||||
{
|
||||
//MinutenBits[i] = (Minuten & (1 << i)) ? true : false;
|
||||
|
||||
if ((Minuten & (1 << i)) > 0)
|
||||
{
|
||||
MinutenBits[i] = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
MinutenBits[i] = false;
|
||||
}
|
||||
}
|
||||
for ( i = 0; i < anzahlMinutenBits; ++i)
|
||||
{
|
||||
dcfBits[offsetMinutenBits + i] = MinutenBits[i];
|
||||
}
|
||||
//Stunde
|
||||
|
||||
if (Stunden > 19)
|
||||
{
|
||||
StundenBits[5] = 1;
|
||||
Stunden -= 20;
|
||||
}
|
||||
if (Stunden > 9)
|
||||
{
|
||||
StundenBits[4] = 1;
|
||||
Stunden -= 10;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
for ( i = 0; i < 4; ++i)
|
||||
{
|
||||
//MinutenBits[i] = (Minuten & (1 << i)) ? true : false;
|
||||
|
||||
if ((Stunden & (1 << i)) > 0)
|
||||
{
|
||||
StundenBits[i] = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
StundenBits[i] = false;
|
||||
}
|
||||
}
|
||||
|
||||
for ( i = 0; i < anzahlStundenBits; ++i)
|
||||
{
|
||||
dcfBits[offsetStundenBits + i] = StundenBits[i];
|
||||
}
|
||||
|
||||
/*for (int n = 0; n < 6; ++n)
|
||||
{
|
||||
|
||||
}*/
|
||||
////////////////////////////
|
||||
{
|
||||
parity += dcfBits[21];
|
||||
parity += dcfBits[22];
|
||||
parity += dcfBits[23];
|
||||
parity += dcfBits[24];
|
||||
parity += dcfBits[25];
|
||||
parity += dcfBits[26];
|
||||
parity += dcfBits[27];
|
||||
if (parity % 2 == 0)
|
||||
{
|
||||
dcfBits[28] = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
dcfBits[28] = 1;
|
||||
}
|
||||
parity = 0;
|
||||
}
|
||||
////////////////////////////
|
||||
{
|
||||
parity += dcfBits[29];
|
||||
parity += dcfBits[30];
|
||||
parity += dcfBits[31];
|
||||
parity += dcfBits[32];
|
||||
parity += dcfBits[33];
|
||||
parity += dcfBits[34];
|
||||
if (parity % 2 == 0)
|
||||
{
|
||||
dcfBits[35] = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
dcfBits[35] = 1;
|
||||
}
|
||||
parity = 0;
|
||||
}
|
||||
/////////////////////////////
|
||||
{
|
||||
parity += dcfBits[36];
|
||||
parity += dcfBits[37];
|
||||
parity += dcfBits[38];
|
||||
parity += dcfBits[39];
|
||||
parity += dcfBits[40];
|
||||
parity += dcfBits[41];
|
||||
parity += dcfBits[42];
|
||||
parity += dcfBits[43];
|
||||
parity += dcfBits[44];
|
||||
parity += dcfBits[45];
|
||||
parity += dcfBits[46];
|
||||
parity += dcfBits[47];
|
||||
parity += dcfBits[48];
|
||||
parity += dcfBits[49];
|
||||
parity += dcfBits[50];
|
||||
parity += dcfBits[51];
|
||||
parity += dcfBits[52];
|
||||
parity += dcfBits[53];
|
||||
parity += dcfBits[54];
|
||||
parity += dcfBits[55];
|
||||
parity += dcfBits[56];
|
||||
parity += dcfBits[57];
|
||||
if (parity % 2 == 0)
|
||||
{
|
||||
dcfBits[58] = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
dcfBits[58] = 1;
|
||||
}
|
||||
parity = 0;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void modulate(byte b)
|
||||
{
|
||||
|
||||
if (b == 0)
|
||||
{
|
||||
playtone(32767,100000000);
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
playtone(32767/4,200000000);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
void playtone(double Amplitude,uint32_t Timing)
|
||||
{
|
||||
|
||||
typedef struct {
|
||||
double Amplitude;
|
||||
uint32_t WaitForThisSample;
|
||||
} samplerf_t;
|
||||
samplerf_t RfSample;
|
||||
|
||||
|
||||
RfSample.Amplitude=Amplitude;
|
||||
RfSample.WaitForThisSample=Timing; //en 100 de nanosecond
|
||||
printf("%f %ld\n",Amplitude,Timing);
|
||||
write(FileFreqTiming,&RfSample,sizeof(samplerf_t));
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
int
|
||||
main(int argc, char **argv)
|
||||
{
|
||||
|
||||
if (argc > 1) {
|
||||
|
||||
|
||||
char *sFileFreqTiming=(char *)argv[1];
|
||||
FileFreqTiming = open(argv[1],O_WRONLY|O_CREAT);
|
||||
|
||||
DCF_BITS(7,59);
|
||||
loop();
|
||||
close(FileFreqTiming);
|
||||
}
|
||||
else
|
||||
{
|
||||
printf("usage : pidfc77 dcfpatern.bin\n");
|
||||
exit(0);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
all: ../rpitx ../pissb ../pisstv ../pifsq ../pifm ../piam
|
||||
all: ../rpitx ../pissb ../pisstv ../pifsq ../pifm ../piam ../pidcf77
|
||||
|
||||
#CFLAGS = -Wall -g -O2 -D DIGITHIN
|
||||
CFLAGS = -Wall -g -O2 -Wno-unused-variable
|
||||
|
|
@ -33,6 +33,11 @@ CFLAGS_Piam = -Wall -g -O2 -Wno-unused-variable
|
|||
LDFLAGS_Piam = -lm -lrt -lpthread -lsndfile
|
||||
../piam : ../am/piam.c
|
||||
$(CC) $(CFLAGS_Piam) -o ../piam ../am/piam.c $(LDFLAGS_Piam)
|
||||
|
||||
CFLAGS_Pidcf77 = -Wall -g -O2 -Wno-unused-variable
|
||||
LDFLAGS_Pidcf77 = -lm -lrt -lpthread
|
||||
../pidcf77 : ../dcf77/pidcf77.c
|
||||
$(CC) $(CFLAGS_Piam) -o ../pidcf77 ../dcf77/pidcf77.c $(LDFLAGS_Piam)
|
||||
clean:
|
||||
|
||||
rm -f ../rpitx ../pissb ../pisstv ../pifsq ../pifm ../piam RpiTx.o mailbox.o RpiGpio.o RpiDma.o
|
||||
|
|
@ -44,3 +49,4 @@ install: all
|
|||
install -m 0755 ../pissb /usr/bin
|
||||
install -m 0755 ../pifsq /usr/bin
|
||||
install -m 0755 ../rpitx /usr/bin
|
||||
install -m 0755 ../pidcf77 /usr/bin
|
||||
|
|
|
|||
Loading…
Reference in New Issue