Use values instead of strings in devmem2 functions
authorDaniel Giritzer <daniel@giritzer.eu>
Fri, 2 Jun 2017 19:55:09 +0000 (21:55 +0200)
committerDaniel Giritzer <daniel@giritzer.eu>
Fri, 2 Jun 2017 19:55:09 +0000 (21:55 +0200)
src/devmem2.c
src/devmem2.h
src/main.c
src/tests/devmem2_test.c [new file with mode: 0644]
src/tvout.h [new file with mode: 0644]

index b29a299..ea96828 100644 (file)
@@ -47,21 +47,20 @@ static void ERROR(char* custom)
 /// \brief This function allows writing to memory
 ///        on the specified address.
 ///
-/// \param char* Address to write to
-/// \param char* Value to write
+/// \param unsigned long Address to write to
+/// \param unsigned long Value to write
 /// \param int Access type, should be 'w' (word),
 ///        'h' (halfword), 'b'(byte)
 /////////////////////////////////////////////////
-int writemem(char* address, char* value, int access_type)
+int writemem(unsigned long address, unsigned long writeval, int access_type)
 {
     int fd;
     void *map_base = 0;
     void *virt_addr = 0;
-    unsigned long writeval = 0;
-
-    off_t target = strtoul(address, 0, 0);
 
+    off_t target = address;
 
+    // Try to open /dev/mem
     if((fd = open("/dev/mem", O_RDWR | O_SYNC)) == -1)
     {
         ERROR("Opening /dev/mem/ failed!");
@@ -71,15 +70,18 @@ int writemem(char* address, char* value, int access_type)
     // Map one page
     map_base = mmap(0, MAP_SIZE, PROT_READ | PROT_WRITE, MAP_SHARED, fd, target & ~MAP_MASK);
 
+    // Check if mapping was successful
     if(map_base == (void *) -1)
     {
+        //Print error on failure
         ERROR("Mapping Memory Page Failed!");
         return EXIT_FAILURE;
     }
 
-
+    //calculate virtual address
     virt_addr = map_base + (target & MAP_MASK);
-    writeval = strtoul(value, 0, 0);
+
+    //write value to memory
     switch(access_type)
     {
     case 'b':
@@ -96,7 +98,7 @@ int writemem(char* address, char* value, int access_type)
         break;
     }
 
-
+    //unmap memory
     if(munmap(map_base, MAP_SIZE) == -1)
     {
         ERROR("Unmapping Memory Page Failed!");
@@ -116,15 +118,15 @@ int writemem(char* address, char* value, int access_type)
 ///        'h' (halfword), 'b'(byte)
 /// \param unsigned long* pointer result variable
 /////////////////////////////////////////////////
-int readmem(char* address, int access_type, unsigned long *result)
+int readmem(unsigned long address, int access_type, unsigned long *result)
 {
     int fd;
     void *map_base, *virt_addr;
-    off_t target;
     unsigned long read_result = 0;
 
-    target = strtoul(address, 0, 0);
+    off_t target = address;
 
+    //check if result variable is a nullpointer
     if(result == NULL)
     {
         //Print error on failure
@@ -151,7 +153,10 @@ int readmem(char* address, int access_type, unsigned long *result)
         return EXIT_FAILURE;
     }
 
+    //calculate virtual address
     virt_addr = map_base + (target & MAP_MASK);
+
+    //read value
     switch(access_type)
     {
     case 'b':
@@ -168,12 +173,14 @@ int readmem(char* address, int access_type, unsigned long *result)
         break;
     }
 
+    // unmap memory
     if(munmap(map_base, MAP_SIZE) == -1)
     {
         ERROR("Unmapping Memory Page Failed!");
         return EXIT_FAILURE;
     }
 
+    // return result
     *result = read_result;
 
     close(fd);
index c688786..3b304ab 100644 (file)
 /// \brief This function allows writing to memory
 ///        on the specified address.
 ///
-/// \param char* Address to write to
-/// \param char* Value to write
+/// \param unsigned long Address to write to
+/// \param unsigned long  Value to write
 /// \param int Access type, should be 'w' (word),
 ///        'h' (halfword), 'b'(byte)
 /////////////////////////////////////////////////
-int writemem(char* address, char* value, int access_type);
+int writemem(unsigned long address, unsigned long  writeval, int access_type);
 
 /////////////////////////////////////////////////
 /// \brief This function allows reading the memory
 ///        on the specified address.
 ///
-/// \param char* Address to read from
+/// \param unsigned long Address to read from
 /// \param int Access type, should be 'w' (word),
 ///        'h' (halfword), 'b'(byte)
 /// \param unsigned long* pointer result variable
 /////////////////////////////////////////////////
-int readmem(char* address, int access_type, unsigned long *result);
+int readmem(unsigned long address, int access_type, unsigned long *result);
 
 #endif // DEVMEM2_H_INCLUDED
index b6c0626..e48c397 100644 (file)
@@ -1,8 +1,8 @@
 ///////////////////////////////////////////////////////////////////////////
-// Workfile: devmem2_test.c (Implementation)
+// Workfile: tvout.c (Implementation)
 // Author: Daniel Giritzer
 // Date: 2017-06-02
-// Description: Simple Testdriver for the devmem2 module
+// Description: Simple Program to move the
 // Remarks: -
 // Revision: 1
 // Copyright (C) 2017, Daniel Giritzer (giri@nwrk.biz)
 #include <stdio.h>
 #include <stdlib.h>
 #include "devmem2.h"
+#include "tvout.h"
 
 int main()
 {
     unsigned long readfrommemory = 0;
 
     //Testing writemem
-    writemem("0x01E00130", "0x10140025", 'w');
+    writemem(0x01E00130, 0x10140025, 'w');
 
     //Testing readmem
-    readmem("0x01E00130", 'w', &readfrommemory);
+    readmem(0x01E00130, 'w', &readfrommemory);
 
     //Print read value to stdout
     printf("Value: 0x%X \n", (unsigned int)readfrommemory);
diff --git a/src/tests/devmem2_test.c b/src/tests/devmem2_test.c
new file mode 100644 (file)
index 0000000..b6c0626
--- /dev/null
@@ -0,0 +1,27 @@
+///////////////////////////////////////////////////////////////////////////
+// Workfile: devmem2_test.c (Implementation)
+// Author: Daniel Giritzer
+// Date: 2017-06-02
+// Description: Simple Testdriver for the devmem2 module
+// Remarks: -
+// Revision: 1
+// Copyright (C) 2017, Daniel Giritzer (giri@nwrk.biz)
+///////////////////////////////////////////////////////////////////////////
+#include <stdio.h>
+#include <stdlib.h>
+#include "devmem2.h"
+
+int main()
+{
+    unsigned long readfrommemory = 0;
+
+    //Testing writemem
+    writemem("0x01E00130", "0x10140025", 'w');
+
+    //Testing readmem
+    readmem("0x01E00130", 'w', &readfrommemory);
+
+    //Print read value to stdout
+    printf("Value: 0x%X \n", (unsigned int)readfrommemory);
+    return 0;
+}
diff --git a/src/tvout.h b/src/tvout.h
new file mode 100644 (file)
index 0000000..4fdfe9a
--- /dev/null
@@ -0,0 +1,16 @@
+///////////////////////////////////////////////////////////////////////////
+// Workfile: tvout.h (Header)
+// Author: Daniel Giritzer
+// Date: 2017-06-02
+// Description:
+// Remarks: -
+// Revision: 1
+// Copyright (C) 2017, Daniel Giritzer (giri@nwrk.biz)
+///////////////////////////////////////////////////////////////////////////
+#ifndef TVOUT_H_INCLUDED
+#define TVOUT_H_INCLUDED
+
+#define TV_BASE 0x01E00000
+
+
+#endif // TVOUT_H_INCLUDED