examples/tty/tty.c
changeset 2589 2b9c78543663
parent 2024 96e2ae6cce95
equal deleted inserted replaced
2415:af21f0bdc7c9 2589:2b9c78543663
   139     run_serial_devices(domain1_pd);
   139     run_serial_devices(domain1_pd);
   140 
   140 
   141     // send process data
   141     // send process data
   142     down(&master_sem);
   142     down(&master_sem);
   143     ecrt_domain_queue(domain1);
   143     ecrt_domain_queue(domain1);
   144     up(&master_sem);
       
   145     ecrt_master_send(master);
   144     ecrt_master_send(master);
       
   145     up(&master_sem);
   146 
   146 
   147     // restart timer
   147     // restart timer
   148     timer.expires += HZ / FREQUENCY;
   148     timer.expires += HZ / FREQUENCY;
   149     add_timer(&timer);
   149     add_timer(&timer);
   150 }
   150 }
   151 
   151 
   152 /*****************************************************************************/
   152 /*****************************************************************************/
   153 
   153 
   154 void request_lock_callback(void *cb_data)
   154 void send_callback(void *cb_data)
   155 {
   155 {
   156     ec_master_t *m = (ec_master_t *) cb_data;
   156     ec_master_t *m = (ec_master_t *) cb_data;
   157     down(&master_sem);
   157     down(&master_sem);
   158 }
   158     ecrt_master_send_ext(m);
   159 
   159     up(&master_sem);
   160 /*****************************************************************************/
   160 }
   161 
   161 
   162 void release_lock_callback(void *cb_data)
   162 /*****************************************************************************/
       
   163 
       
   164 void receive_callback(void *cb_data)
   163 {
   165 {
   164     ec_master_t *m = (ec_master_t *) cb_data;
   166     ec_master_t *m = (ec_master_t *) cb_data;
       
   167     down(&master_sem);
       
   168     ecrt_master_receive(m);
   165     up(&master_sem);
   169     up(&master_sem);
   166 }
   170 }
   167 
   171 
   168 /*****************************************************************************/
   172 /*****************************************************************************/
   169 
   173 
   170 int __init init_mini_module(void)
   174 int __init init_mini_module(void)
   171 {
   175 {
   172     int ret = -1;
   176     int ret = -1;
   173     ec_slave_config_t *sc;
   177     ec_slave_config_t *sc;
   174     
   178 
   175     printk(KERN_INFO PFX "Starting...\n");
   179     printk(KERN_INFO PFX "Starting...\n");
   176 
   180 
   177     master = ecrt_request_master(0);
   181     master = ecrt_request_master(0);
   178     if (!master) {
   182     if (!master) {
   179         printk(KERN_ERR PFX "Requesting master 0 failed.\n");
   183         printk(KERN_ERR PFX "Requesting master 0 failed.\n");
   180         ret = -EBUSY; 
   184         ret = -EBUSY;
   181         goto out_return;
   185         goto out_return;
   182     }
   186     }
   183 
   187 
   184     sema_init(&master_sem, 1);
   188     sema_init(&master_sem, 1);
   185     ecrt_master_callbacks(master, request_lock_callback, release_lock_callback, master);
   189     ecrt_master_callbacks(master, send_callback, receive_callback, master);
   186 
   190 
   187     printk(KERN_INFO PFX "Registering domain...\n");
   191     printk(KERN_INFO PFX "Registering domain...\n");
   188     if (!(domain1 = ecrt_master_create_domain(master))) {
   192     if (!(domain1 = ecrt_master_create_domain(master))) {
   189         printk(KERN_ERR PFX "Domain creation failed!\n");
   193         printk(KERN_ERR PFX "Domain creation failed!\n");
   190         goto out_release_master;
   194         goto out_release_master;