/* MPO8.H - TCtask-интерфейс с MPO8 */ #define P_0 0x00 /* нет контроля */ #define P_1 0x18 /* котроль по нечетности */ #define P_2 0x08 /* котроль по четности */ typedef struct irq_data *irqptr; typedef struct chn_data *chnptr; struct irq_data { chnptr pchn; /* указат. на начало списка каналов для даного IRQ */ nearptr savvect; /* адрес старого обработчика прерываний */ word_s base0; /* базовый адрес платы */ byte irqbit; /* IRQ-бит для манипуляций с маской */ byte save_irq; /* старое значение бита маски */ }; struct chn_data { chnptr next; /* указатель на следующий канал */ word_s port; /* адрес порта канала */ pipe r_pipe; /* канал приема канала связи */ byte * xmit_buf; /* адрес буфера пердачи */ word len_xmit; /* длина передаваемых данных */ byte flags; /* различные признаки (на всякий случай) */ byte resv; /* резерв (для выравнивания на границу слова */ }; chnptr mpo8_install(word_s base0, byte irq, byte chn, nearptr rbuf, word rsize); void mpo8_change_mode(chnptr pchn, word_s baud, byte len, byte par, byte stp); void mpo8_send(chnptr pchn, char *buf, word len); word_s mpo8_receive(chnptr pchn, long timeout); word_s mpo8_check(chnptr pchn); void mpo8_remove_all();