2 * transmissions to clients
9 #include "auproto-pic.h"
11 #define FOR_OOS(s) do{ \
12 Client *cl, *next_cl; \
13 for (cl= clients.head; \
16 OutBufferChain *ch= &cl->ch; \
18 if (!(sel & cl->sel)) continue; \
23 void oovprintf(Selector sel, const char *fmt, va_list al) {
24 FOR_OOS( ovprintf(ch, fmt, al) );
27 void ooprintf(Selector sel, const char *fmt, ...)
28 { va_list al; va_start(al,fmt); oovprintf(sel,fmt,al); va_end(al); }
30 void oowrite(Selector sel, const char *data, int l) {
31 FOR_OOS( owrite(ch, data, l) );
34 void output_hex(Selector sel, const char *word,
35 const Byte *command, int length) {
36 ooprintf(sel, "%s", word);
38 ooprintf(sel, " %02x", *command++);
44 void serial_transmit(const PicInsn *pi) {
45 const PicInsnInfo *pii;
48 pii= pi->l > 0 ? lookup_byopcode(pi->d[0], pic_command_infos) : 0;
52 if (pii->argbits <= 6) {
53 if (pi->l != 1) pii= 0;
55 if (pi->l == 2) { val <<= 8; val |= pi->d[1]; }
61 ooprintf(sel_picio, "picio out unknown\n");
62 else if (!pii->argbits)
63 ooprintf(sel_picio, "picio out %s\n", pii->name);
65 ooprintf(sel_picio, "picio out %s %u\n", pii->name,
66 val & ((1u << pii->argbits) - 1));
68 output_hex(sel_picioh, "picioh out", pi->d, pi->l);
69 serial_transmit_now(pi->d, pi->l);