]> rtime.felk.cvut.cz Git - mf6xx.git/blobdiff - src/uio/mf624/userspace/test_application/main.c
Added DIO_read() function & Simple fix in mf624_read32(), mf624_read16().
[mf6xx.git] / src / uio / mf624 / userspace / test_application / main.c
old mode 100644 (file)
new mode 100755 (executable)
index 8c74f8b..2265286
@@ -29,13 +29,23 @@ int BAR0_phys_addr;
 int BAR2_phys_addr;
 int BAR4_phys_addr;
 
+void print_8bin(int nr)
+{
+       int i;
+       for (i = 7; i >= 0; i--) {
+               printf("%d" , ((nr & (1 << i)) > 0));
+       }
+
+       printf("\n");
+}
+
 static inline int16_t mf624_read16(uint16_t *ptr)
 {
-       return *ptr;
+       return (volatile uint16_t) *ptr;
 }
 static inline int32_t mf624_read32(uint32_t *ptr)
 {
-       return *ptr;
+       return (volatile uint32_t) *ptr;
 }
 
 static inline void mf624_write16(uint16_t val, uint16_t *ptr)
@@ -53,6 +63,10 @@ void DIO_set(int16_t val)
        mf624_write16(val, ((uint16_t*) mf624_BAR2) + (DOUT_reg/2)); 
 }
 
+uint16_t DIO_read()
+{
+       return mf624_read16(((uint16_t*) mf624_BAR2) + (DOUT_reg/2)) & 0xF; 
+}
 
 int open_device(char* path) {
        status = open(path, O_RDWR);
@@ -205,20 +219,23 @@ void run_simple_tests(char* dev_name)
        list_available_io_ports(dev_name);
 }
 
-void mmap_regions(int device_fd)
+void mmap_regions(int device_fd, char* uio_dev)
 {
-       char buff[BUFF_SMALL];
+       char path[BUFF_MID];
        FILE *file;
 
-       file = fopen("/sys/class/uio/uio0/maps/map0/addr", "rb");
+       sprintf(path, "/sys/class/uio/%s/maps/map0/addr", uio_dev);
+       file = fopen(path, "rb");
        fscanf(file, "%llx", &BAR0_phys_addr);
        fclose(file);
 
-       file = fopen("/sys/class/uio/uio0/maps/map1/addr", "rb");
+       sprintf(path, "/sys/class/uio/%s/maps/map1/addr", uio_dev);
+       file = fopen(path, "rb");
        fscanf(file, "%llx", &BAR2_phys_addr);
        fclose(file);
 
-       file = fopen("/sys/class/uio/uio0/maps/map2/addr", "rb");
+       sprintf(path, "/sys/class/uio/%s/maps/map2/addr", uio_dev);
+       file = fopen(path, "rb");
        fscanf(file, "%llx", &BAR4_phys_addr);
        fclose(file);
 
@@ -272,11 +289,14 @@ int main(int argc, char* argv[])
        strncat(buff, argv[1], min(strlen(argv[1]), 8));
 
        device_fd = open_device(buff);
-       mmap_regions(device_fd);
+       mmap_regions(device_fd, argv[1]);
 
        if (device_fd != -1) {
 
                while (1){
+                       printf("Reading DIO = ");
+                       print_8bin(DIO_read());
+                       
                        printf("Setting DIO to 0xff\n");
                        DIO_set(0xff);
                        sleep(1);