]> rtime.felk.cvut.cz Git - mf6xx.git/commitdiff
Userspace application now really waits for interrupts from card.
authorRostislav Lisovy <lisovy@gmail.com>
Tue, 15 Feb 2011 21:47:02 +0000 (22:47 +0100)
committerRostislav Lisovy <lisovy@gmail.com>
Tue, 15 Feb 2011 21:47:02 +0000 (22:47 +0100)
src/uio/userspace/test_application/main.c

index ecb1213035035a29d926b68873fdcf3c2b088ec7..5ad4093a63bdc7c27a84127fa4410dcd59c27c35 100644 (file)
 int status;
 void* mf614_mem = NULL;
 
-void delay()
-{
-       for (int i = 0; i < 65000; i++) {}
-}
 
 void mf614_adc_init(int channel)
 {
@@ -51,10 +47,9 @@ void wait_for_interrupts(int device_fd)
 
 int disable_interrupts(int device_fd)
 {
-       char buff[4]; // we have to write 32 bit number
-       strncpy(buff, "0", 4);  
+       uint32_t control_value = 0;
 
-       status = write(device_fd, buff, 4);
+       status = write(device_fd, &control_value, sizeof(uint32_t));
        if (status == -1) {
                perror("write()");
                return -1;
@@ -65,10 +60,9 @@ int disable_interrupts(int device_fd)
 
 int enable_interrupts(int device_fd)
 {
-       char buff[4]; // we have to write 32 bit number
-       strncpy(buff, "1", 4);  
+       uint32_t control_value = 1;
 
-       status = write(device_fd, buff, 4);
+       status = write(device_fd, &control_value, sizeof(uint32_t));
        if (status == -1) {
                perror("write()");
                return -1;
@@ -215,22 +209,19 @@ int main(int argc, char* argv[])
                }
        
 
-               while(1) {
-                       
+               while (1){
                        
                        for (int i = 0; i <= 7; i++) {
+                               enable_interrupts(device_fd);
                                mf614_adc_init(i);
-                               //enable_interrupts(device_fd);
-                               //read(device_fd, read_buff, 1); // should block until interrupt erceived
-
+                               status = read(device_fd, read_buff, sizeof(uint32_t)); // should block until interrupt received
+               
                                // ... got interrupt -- handle it
-                               //disable_interrupts(device_fd);
-                               
-                               delay();
                                adc_value = *(((uint8_t *) mf614_mem) + AD_LO) | (*(((uint8_t *) mf614_mem) + AD_HI) << 8);
                                printf("[CH %d] ADC = %f V\n", i, adc_value/819);
                        }
                        printf("\n");
+                       sleep(1);
                }
        }