#include "api.h" #include #include #include #include #include #include #include #include #include /*************************************************************************************************/ UltraSoundDevice::UltraSoundDevice() { files[0] = open("/proc/usd_reg_0", O_RDWR, 0); bars[0]= mmap(NULL, 64 * 1024, PROT_READ | PROT_WRITE, MAP_SHARED, files[0], 0); files[1] = open("/proc/usd_reg_1", O_RDWR, 0); bars[1]= mmap(NULL, 128 * 1024 * 1024, PROT_READ | PROT_WRITE, MAP_SHARED, files[1], 0); files[2] = open("/proc/usd_reg_2", O_RDWR, 0); bars[2]= mmap(NULL, 8 * 1024, PROT_READ | PROT_WRITE, MAP_SHARED, files[2], 0); } /*************************************************************************************************/ UltraSoundDevice::~UltraSoundDevice() { munmap(bars[0], 64 * 1024); munmap(bars[1], 128 * 1024 * 1024); munmap(bars[2], 8 * 1024); for(int i = 0; i < BAR_NUM; i++) { close(files[i]); } } /*************************************************************************************************/ uint8_t UltraSoundDevice::readByte(uint32_t address, uint32_t bar) { uint8_t* ptr = (uint8_t*)bars[bar]; return ptr[address]; } /*************************************************************************************************/ uint32_t UltraSoundDevice::readWord(uint32_t address, uint32_t bar) { uint32_t* ptr = (uint32_t*)bars[bar]; return ptr[address / 4]; } /*************************************************************************************************/ void UltraSoundDevice::writeByte(uint32_t address, uint32_t bar, uint8_t data) { uint8_t* ptr = (uint8_t*)bars[bar]; ptr[address] = data; } /*************************************************************************************************/ void UltraSoundDevice::writeWord(uint32_t address, uint32_t bar, uint32_t data) { uint32_t* ptr = (uint32_t*)bars[bar]; ptr[address / 4] = data; }