pull/4/head
Marcin Kondej 2015-04-03 15:34:53 +02:00
rodzic 62ec58f95a
commit 9dce3df73a
3 zmienionych plików z 14 dodań i 11 usunięć

Wyświetl plik

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

Wyświetl plik

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

Wyświetl plik

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