X-Git-Url: http://rtime.felk.cvut.cz/gitweb/lincan.git/blobdiff_plain/7440c5c6ece06cdf6ea19270047cca22b324d73a..aa97a7ac78dbe529888662e3ffdc207b172c5a2c:/lincan/src/open.c diff --git a/lincan/src/open.c b/lincan/src/open.c index 45406fc..76fb9ee 100644 --- a/lincan/src/open.c +++ b/lincan/src/open.c @@ -24,6 +24,7 @@ int can_open(struct inode *inode, struct file *file) struct canque_ends_t *qends; struct canque_edge_t *edge; can_spin_irqflags_t iflags; + char openflag; // Martin Petera: Object already opened if ( ((obj=objects_p[MINOR_NR]) == NULL) || ((chip=objects_p[MINOR_NR]->hostchip) == NULL) ) { @@ -33,6 +34,7 @@ int can_open(struct inode *inode, struct file *file) atomic_inc(&obj->obj_used); DEBUGMSG("Device %d opened %d times.\n", MINOR_NR, atomic_read(&obj->obj_used)); + openflag = can_msgobj_test_fl(obj,OPENED); // Martin Petera: store previous status can_msgobj_set_fl(obj,OPENED); if (chip->flags & CHIP_CONFIGURED) @@ -42,11 +44,19 @@ int can_open(struct inode *inode, struct file *file) CANMSG("Error configuring chip.\n"); else chip->flags |= CHIP_CONFIGURED; + } /* End of chip configuration */ + + /* Martin Petera: Fix for HCAN2 + * pre_read was called only once -> Opening second MSG object from userspace + * didn't call function to configure MSG object for receive. + * FIX: Call pre_read once for each MSG object + **/ + if (!openflag) { if (chip->chipspecops->pre_read_config(chip,obj)<0) CANMSG("Error initializing chip for receiving\n"); + } - } /* End of chip configuration */ canuser = (struct canuser_t *)kmalloc(sizeof(struct canuser_t), GFP_KERNEL); if(canuser == NULL) goto no_canuser;