examples/tty/tty.c
changeset 1575 17598f2332b6
parent 1573 74bf584564b8
child 1577 fa3f66b783c1
equal deleted inserted replaced
1574:be344b8ca0e8 1575:17598f2332b6
   114 
   114 
   115     uint16_t control;
   115     uint16_t control;
   116 } serial_device_t;
   116 } serial_device_t;
   117 
   117 
   118 static serial_device_t *ser = NULL;
   118 static serial_device_t *ser = NULL;
   119 static char tx_data[] = "ATZ\r\n";
       
   120 static off_t tx_off = 0;
       
   121 static ec_tty_t *tty = NULL;
   119 static ec_tty_t *tty = NULL;
   122         
   120         
   123 /*****************************************************************************/
   121 /*****************************************************************************/
   124 
   122 
   125 /* Slave 1, "EL6002"
   123 /* Slave 1, "EL6002"
   281 
   279 
   282             /* Send data */
   280             /* Send data */
   283             
   281             
   284             tx_accepted_toggle = status & 0x0001;
   282             tx_accepted_toggle = status & 0x0001;
   285             if (tx_accepted_toggle != ser->tx_accepted_toggle) { // ready
   283             if (tx_accepted_toggle != ser->tx_accepted_toggle) { // ready
   286                 // send new data
   284                 ser->tx_data_size =
   287                 size_t rem = sizeof(tx_data) - tx_off;
   285                     ectty_tx_data(tty, ser->tx_data, ser->max_tx_data_size);
   288                 if (rem > 0) {
   286                 if (ser->tx_data_size) {
   289                     if (rem < ser->max_tx_data_size) {
       
   290                         ser->tx_data_size = rem;
       
   291                     } else {
       
   292                         ser->tx_data_size = ser->max_tx_data_size;
       
   293                     }
       
   294                     printk(KERN_INFO PFX "Sending %u bytes.\n", ser->tx_data_size);
   287                     printk(KERN_INFO PFX "Sending %u bytes.\n", ser->tx_data_size);
   295                     memcpy(ser->tx_data, tx_data, ser->tx_data_size);
       
   296                     tx_off += ser->tx_data_size;
       
   297                     ser->tx_request_toggle = !ser->tx_request_toggle;
   288                     ser->tx_request_toggle = !ser->tx_request_toggle;
   298                     ser->tx_accepted_toggle = tx_accepted_toggle;
   289                     ser->tx_accepted_toggle = tx_accepted_toggle;
   299                 }
   290                 }
   300             }
   291             }
   301 
   292 
   395     } else { // do this at 1 Hz
   386     } else { // do this at 1 Hz
   396         counter = FREQUENCY;
   387         counter = FREQUENCY;
   397 
   388 
   398         // check for master state (optional)
   389         // check for master state (optional)
   399         check_master_state();
   390         check_master_state();
   400 
       
   401         tx_off = 0;
       
   402     }
   391     }
   403 
   392 
   404     serial_run(ser, EC_READ_U16(domain1_pd + off_status), domain1_pd + off_rx);
   393     serial_run(ser, EC_READ_U16(domain1_pd + off_status), domain1_pd + off_rx);
   405     EC_WRITE_U16(domain1_pd + off_ctrl, ser->control);
   394     EC_WRITE_U16(domain1_pd + off_ctrl, ser->control);
   406     memcpy(domain1_pd + off_tx, ser->tx_data, 22);
   395     memcpy(domain1_pd + off_tx, ser->tx_data, 22);