kopia lustrzana https://github.com/markondej/fm_transmitter
speed fix
rodzic
62ec58f95a
commit
9dce3df73a
|
@ -8,7 +8,7 @@
|
|||
1427846733 /home/pi/Projects/fm_transmitter/transmitter.h
|
||||
<vector>
|
||||
|
||||
1427975885 source:/home/pi/Projects/fm_transmitter/transmitter.cpp
|
||||
1428062757 source:/home/pi/Projects/fm_transmitter/transmitter.cpp
|
||||
"transmitter.h"
|
||||
<sys/mman.h>
|
||||
<fcntl.h>
|
||||
|
@ -34,7 +34,7 @@
|
|||
<vector>
|
||||
"pcm_wave_header.h"
|
||||
|
||||
1427988996 source:/home/pi/Projects/fm_transmitter/wave_reader.cpp
|
||||
1427992484 source:/home/pi/Projects/fm_transmitter/wave_reader.cpp
|
||||
"wave_reader.h"
|
||||
<string.h>
|
||||
<exception>
|
||||
|
|
|
@ -4,7 +4,8 @@
|
|||
#include <exception>
|
||||
#include <iostream>
|
||||
|
||||
#define ACCESS(base, offset) *(volatile int*)((int)base + offset)
|
||||
#define ACCESS(base, offset) *(volatile unsigned int*)((int)base + offset)
|
||||
#define ACCESS64(base, offset) *(volatile unsigned long long*)((int)base + offset)
|
||||
|
||||
Transmitter::Transmitter(double frequency)
|
||||
{
|
||||
|
@ -14,7 +15,7 @@ Transmitter::Transmitter(double frequency)
|
|||
throw std::exception();
|
||||
}
|
||||
|
||||
void *peripheralsMap = mmap(NULL, 0x002FFFFF, PROT_READ | PROT_WRITE, MAP_SHARED, memFd, 0x3F000000);
|
||||
void *peripheralsMap = mmap(NULL, 0x002FFFFF, PROT_READ | PROT_WRITE, MAP_SHARED, memFd, 0x20000000);
|
||||
close(memFd);
|
||||
if (peripheralsMap == MAP_FAILED) {
|
||||
std::cout << "Error: cannot obtain access to peripherals (mmap error)" << std::endl;
|
||||
|
@ -32,7 +33,7 @@ void Transmitter::transmit(std::vector<unsigned int> *freqDivs, unsigned int sam
|
|||
unsigned int *data = &(*freqDivs)[0];
|
||||
|
||||
unsigned long long current = 0;
|
||||
unsigned long long start = ((unsigned long long)ACCESS(peripherals, 0x00003008) << 32) | ACCESS(peripherals, 0x00003004);
|
||||
unsigned long long start = ACCESS64(peripherals, 0x00003004);
|
||||
|
||||
while (true) {
|
||||
temp = offset;
|
||||
|
@ -43,8 +44,8 @@ void Transmitter::transmit(std::vector<unsigned int> *freqDivs, unsigned int sam
|
|||
while (temp == offset) {
|
||||
usleep(1);
|
||||
|
||||
current = ((unsigned long long)ACCESS(peripherals, 0x00003008) << 32) | ACCESS(peripherals, 0x00003004);
|
||||
offset = (unsigned int)((current - start) * (unsigned long long)sampleRate / 1000000);
|
||||
current = ACCESS64(peripherals, 0x00003004);
|
||||
offset = (unsigned int)((current - start) * sampleRate / 1000000);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -37,6 +37,8 @@ WaveReader::WaveReader(std::string filename)
|
|||
throw std::exception();
|
||||
}
|
||||
|
||||
header.subchunk2Size = length - sizeof(PCMWaveHeader);
|
||||
|
||||
if (length < sizeof(PCMWaveHeader) + header.subchunk2Size) {
|
||||
std::cout << "Error: data corrupted" << std::endl;
|
||||
throw std::exception();
|
||||
|
@ -79,9 +81,9 @@ int WaveReader::checkDataFormat(PCMWaveHeader *header)
|
|||
if (((header->bitsPerSample >> 3) != 1) && ((header->bitsPerSample >> 3) != 2)) {
|
||||
error |= (0x01 << 7);
|
||||
}
|
||||
if (std::string(header->subchunk2ID, 4) != std::string("data")) {
|
||||
/*if (std::string(header->subchunk2ID, 4) != std::string("data")) {
|
||||
error |= (0x01 << 8);
|
||||
}
|
||||
}*/
|
||||
|
||||
return error;
|
||||
}
|
||||
|
@ -105,10 +107,10 @@ std::vector<unsigned int> *WaveReader::generateFreqDivs(double frequency)
|
|||
} else {
|
||||
if (header.bitsPerSample != 8) {
|
||||
base = (int)((short)(((unsigned char)data[dataOffset + 1] << 8) | (unsigned char)data[dataOffset]));
|
||||
freqDiv = (unsigned int)((double)(500 << 12) / (frequency + (double)base / (double)0x8000 * bandwidth * 0.5) + 0.5);
|
||||
freqDiv = (unsigned int)((double)(500 << 12) / (frequency - (double)base / (double)0x8000 * bandwidth * 0.5) + 0.5);
|
||||
} else {
|
||||
base = (int)((unsigned char)data[dataOffset]) - 0x7F;
|
||||
freqDiv = (unsigned int)((double)(500 << 12) / (frequency + (double)base / (double)0x80 * bandwidth * 0.5) + 0.5);
|
||||
freqDiv = (unsigned int)((double)(500 << 12) / (frequency - (double)base / (double)0x80 * bandwidth * 0.5) + 0.5);
|
||||
}
|
||||
}
|
||||
freqDivs->push_back(freqDiv);
|
||||
|
|
Ładowanie…
Reference in New Issue