From 2ca0ed14a5b1be1a885f60e4837307faf6f8d5ef Mon Sep 17 00:00:00 2001 From: F5OEO Date: Fri, 23 Nov 2018 11:24:21 +0000 Subject: [PATCH] Add gpio destructor --- src/gpio.cpp | 16 +++++++++------- src/gpio.h | 7 ++++--- src/mailbox.c | 2 +- 3 files changed, 14 insertions(+), 11 deletions(-) diff --git a/src/gpio.cpp b/src/gpio.cpp index 00160d6..ceee873 100644 --- a/src/gpio.cpp +++ b/src/gpio.cpp @@ -29,13 +29,15 @@ gpio::gpio(uint32_t base, uint32_t len) { gpioreg = (uint32_t *)mapmem(base, len); - - /*int mhandle=mbox_open(); - get_clocks(mhandle); - mbox_close(mhandle); - */ + gpiolen=len; } +gpio::~gpio() +{ + if(gpioreg!=NULL) + unmapmem((void*)gpioreg,gpiolen); + +} uint32_t gpio::GetPeripheralBase() { RASPBERRY_PI_INFO_T info; @@ -70,7 +72,7 @@ clkgpio::clkgpio() : gpio(GetPeripheralBase() + CLK_BASE, CLK_LEN) clkgpio::~clkgpio() { gpioreg[GPCLK_CNTL] = 0x5A000000 | (Mash << 9) | pllnumber | (0 << 4); //4 is START CLK - gpioreg[GPCLK_CNTL_2] = 0x5A000000 | (Mash << 9) | pllnumber | (0 << 4); //4 is START CLK + //gpioreg[GPCLK_CNTL_2] = 0x5A000000 | (Mash << 9) | pllnumber | (0 << 4); //4 is START CLK usleep(100); } @@ -116,7 +118,7 @@ uint64_t clkgpio::GetPllFrequency(int PllNo) Freq = XOSC_FREQUENCY * ((uint64_t)gpioreg[PLLH_CTRL] & 0x3ff) + XOSC_FREQUENCY * (uint64_t)gpioreg[PLLH_FRAC] / (1 << 20); break; } - fprintf(stderr, "Freq = %lu\n", Freq); + fprintf(stderr, "Freq = %llu\n", Freq); return Freq; } diff --git a/src/gpio.h b/src/gpio.h index fe9ed82..e724b06 100644 --- a/src/gpio.h +++ b/src/gpio.h @@ -1,7 +1,7 @@ #ifndef DEF_GPIO #define DEF_GPIO #include "stdint.h" - +#include @@ -9,9 +9,10 @@ class gpio { public: - volatile uint32_t *gpioreg; + volatile uint32_t *gpioreg=NULL; + uint32_t gpiolen; gpio(uint32_t base, uint32_t len); - + ~gpio(); uint32_t GetPeripheralBase(); }; diff --git a/src/mailbox.c b/src/mailbox.c index e172615..7ea4534 100644 --- a/src/mailbox.c +++ b/src/mailbox.c @@ -74,7 +74,7 @@ void *unmapmem(void *addr, unsigned size) { int s = munmap(addr, size); if (s != 0) { - printf("munmap error %d\n", s); + fprintf(stderr,"munmap error %d\n", s); exit (-1); }