fm_transmitter/transmitter.cpp

45 wiersze
1.1 KiB
C++
Czysty Zwykły widok Historia

2015-03-30 23:20:45 +00:00
#include "transmitter.h"
#include <sys/mman.h>
#include <fcntl.h>
#include <exception>
#include <iostream>
2015-03-31 09:54:10 +00:00
#define REGISTER(base, offset) *(volatile int*)((int)base + offset);
2015-03-30 23:20:45 +00:00
2015-03-31 09:54:10 +00:00
Transmitter::Transmitter(float frequency)
2015-03-30 23:20:45 +00:00
{
int memFd;
if ((memFd = open("/dev/mem", O_RDWR | O_SYNC)) < 0) {
std::cout << "Sudo privileges are required!" << std::endl;
throw std::exception();
}
void *gpioMap = mmap(NULL, 0xB1, PROT_READ | PROT_WRITE, MAP_SHARED, memFd, 0x20200000);
if (gpioMap == MAP_FAILED) {
close(memFd);
std::cout << "MMAP error - " << (int)gpioMap << std::endl;
throw std::exception();
}
gpio = (volatile unsigned*)gpioMap;
void *clockMap = mmap(NULL, 0x12, PROT_READ | PROT_WRITE, MAP_SHARED, memFd, 0x20101070);
close(memFd);
if (clockMap == MAP_FAILED) {
std::cout << "MMAP error - " << (int)clockMap << std::endl;
throw std::exception();
}
clock = (volatile unsigned*)clockMap;
2015-03-31 09:54:10 +00:00
this->frequency = frequency;
REGISTER(gpio, 0x00) = (REGISTER(gpio, 0x00) & 0xFFF1FFFF) | 0xFFF3FFFF;
2015-03-30 23:20:45 +00:00
}
Transmitter::~Transmitter()
{
//dtor
}