void add_char232(struct tty_struct* tp, char c,int port) //tohle jenom prida znak c do outqueue (proste jen pomocna funkce) { if (tp->tty_outcount >= (TTY_OUT_BYTES-1)) //je to kam dat? { //co ted? nemam to kam dat! zeby message? //NE! v klidu staci jenom udelat flush! (aspon doufam =) send_rs232(tp,port); } //ted uz by nemel byt zadny problem - jdeme na to //proste prida pismenko do outqueue (jo! i s atributem!) *(tp->tty_outhead)=char_att(c,tp->tty_attribute); tp->tty_outhead++; if (tp->tty_outhead==tp->tty_outqueue+TTY_OUT_BYTES) //pokud je treba zacit zase od zacatku buferu tp->tty_outhead=tp->tty_outqueue; tp->tty_outcount++; //zvednu pocitadlo } PRIVATE void out_char232(struct tty_struct* tp, char c,int port) //tohle je hlavni vetviste pro specialni znaky { add_char232(tp,c,port); } void send_rs232_com1(struct tty_struct * tp) { /* // na tuto rutinu je inicializovan pointer tty_devstart() polozky // tty_struct[] odpovidajici klavesnici - resi tedy vystup znaku na monitor // --- // VC: console dostane pointer (v promennych v *tp) na // data nekde v pameti a ma za ukol je vsechny vyOUT_CHARovat, // a tak to pekne po jednom znaku kopiruje z pameti do bufferu // (totiz posila to do funkce out_char() ) */ char khar; //pracovni promenna pro kopirovani z pameti do bufferu // Dokud tty_outleft>0 and tty_inhibited=RUNNING while (tp->tty_outleft>0 && tp->tty_inhibited==FALSE) { // vezmi bajt z adresy tty_struct[].tty_outphys (tty_outphys++) //do_copy!!! neco jako: khar=*(tp->tty_out_vir); sys_copy(tp->tty_outproc, D, tp->tty_out_vir, TTY, D, (vir_bytes) &khar, 1); tp->tty_out_vir++; // posle to dal do vystupni fronty out_char232(tp,khar,1); tp->tty_outleft--; tp->tty_outcum++; } //protoze se tty_dev prubezne vola, nemelo by se pri zakazu vypisu // uz nic dalsiho delat (proste to odtud vypadne ven) if (tp->tty_inhibited) return; send_rs232(tp,1); // vyflaka vystupni frontu na port //VC: zrejme by se tady nekde melo shodit tty_waiting tp->tty_waiting=FALSE; // Odpovez zpravou s poctem prenesenych byte // task_reply(tp->tty_outcum, tp->tty_outcaller, tp->tty_outproc); } void send_rs232_com2(struct tty_struct * tp) { /* // na tuto rutinu je inicializovan pointer tty_devstart() polozky // tty_struct[] odpovidajici klavesnici - resi tedy vystup znaku na monitor // --- // VC: console dostane pointer (v promennych v *tp) na // data nekde v pameti a ma za ukol je vsechny vyOUT_CHARovat, // a tak to pekne po jednom znaku kopiruje z pameti do bufferu // (totiz posila to do funkce out_char() ) */ char khar; //pracovni promenna pro kopirovani z pameti do bufferu // Dokud tty_outleft>0 and tty_inhibited=RUNNING while (tp->tty_outleft>0 && tp->tty_inhibited==FALSE) { // vezmi bajt z adresy tty_struct[].tty_outphys (tty_outphys++) //do_copy!!! neco jako: khar=*(tp->tty_out_vir); sys_copy(tp->tty_outproc, D, tp->tty_out_vir, TTY, D, (vir_bytes) &khar, 1); tp->tty_out_vir++; // posle to dal do vystupni fronty out_char232(tp,khar,2); tp->tty_outleft--; tp->tty_outcum++; } //protoze se tty_dev prubezne vola, nemelo by se pri zakazu vypisu // uz nic dalsiho delat (proste to odtud vypadne ven) if (tp->tty_inhibited) return; send_rs232(tp,2); // vyflaka vystupni frontu na port //VC: zrejme by se tady nekde melo shodit tty_waiting tp->tty_waiting=FALSE; // Odpovez zpravou s poctem prenesenych byte // task_reply(tp->tty_outcum, tp->tty_outcaller, tp->tty_outproc); }