int main (int argc, char *argv[]) { int remaining; /* Set locale. */ (void) setlocale (LC_ALL, ""); Dwfl *dwfl = NULL; (void) argp_parse (dwfl_standard_argp (), argc, argv, 0, &remaining, &dwfl); assert (dwfl != NULL); int result = 0; /* Now handle the addresses. In case none are given on the command line, read from stdin. */ if (remaining == argc) { /* We use no threads here which can interfere with handling a stream. */ (void) __fsetlocking (stdin, FSETLOCKING_BYCALLER); char *buf = NULL; size_t len = 0; while (!feof_unlocked (stdin)) { if (getline (&buf, &len, stdin) < 0) break; char *endp; uintmax_t addr = strtoumax (buf, &endp, 0); if (endp != buf) result |= handle_address (addr, dwfl); else result = 1; } free (buf); } else { do { char *endp; uintmax_t addr = strtoumax (argv[remaining], &endp, 0); if (endp != argv[remaining]) result |= handle_address (addr, dwfl); else result = 1; } while (++remaining < argc); } dwfl_end (dwfl); return result; }
static int tc58128_cb(uint16_t porta, uint16_t portb, uint16_t * periph_pdtra, uint16_t * periph_portadir, uint16_t * periph_pdtrb, uint16_t * periph_portbdir) { int dev; if ((porta & CE1) == 0) dev = 0; else if ((porta & CE2) == 0) dev = 1; else return 0; /* No device selected */ if ((porta & RE) && (porta & WE)) { /* Nothing to do, assert ready and return to input state */ *periph_portadir &= 0xff00; *periph_portadir |= RDY(dev); *periph_pdtra |= RDY(dev); return 1; } if (porta & CLE) { /* Command */ assert((porta & WE) == 0); handle_command(&tc58128_devs[dev], porta & 0x00ff); } else if (porta & ALE) { assert((porta & WE) == 0); handle_address(&tc58128_devs[dev], porta & 0x00ff); } else if ((porta & RE) == 0) { *periph_portadir |= 0x00ff; *periph_pdtra &= 0xff00; *periph_pdtra |= handle_read(&tc58128_devs[dev]); } else { abort(); } return 1; }
void handle_cc(struct session_info *s, struct gsm48_hdr *dtap, unsigned len, uint8_t ul) { struct tlv_parsed tp; s->call = 1; s->call_presence = 1; switch (dtap->msg_type & 0x3f) { case 0x01: SET_MSG_INFO(s, "CALL ALERTING"); break; case 0x02: SET_MSG_INFO(s, "CALL PROCEEDING"); if (s->cipher && !s->fc.enc_rand && !ul) s->fc.predict++; if (!ul) s->mo = 1; break; case 0x03: SET_MSG_INFO(s, "CALL PROGRESS"); break; case 0x05: SET_MSG_INFO(s, "CALL SETUP"); if (!ul) s->mt = 1; else s->mo = 1; /* get MSISDN */ tlv_parse(&tp, &gsm48_att_tlvdef, dtap->data, len-2, 0, 0); if (TLVP_PRESENT(&tp, GSM48_IE_CALLING_BCD)) { uint8_t *v = (uint8_t *) TLVP_VAL(&tp, GSM48_IE_CALLING_BCD); uint8_t v_len = TLVP_LEN(&tp, GSM48_IE_CALLING_BCD); handle_address(v, v_len, s->msisdn, 0); } if (TLVP_PRESENT(&tp, GSM48_IE_CALLED_BCD)) { uint8_t *v = (uint8_t *) TLVP_VAL(&tp, GSM48_IE_CALLED_BCD); uint8_t v_len = TLVP_LEN(&tp, GSM48_IE_CALLED_BCD); handle_address(v, v_len, s->msisdn, 0); } break; case 0x07: SET_MSG_INFO(s, "CALL CONNECT"); break; case 0x08: SET_MSG_INFO(s, "CALL CONFIRMED"); if (ul) s->mt = 1; else s->mo = 1; break; case 0x0f: SET_MSG_INFO(s, "CALL CONNECT ACK"); break; case 0x25: SET_MSG_INFO(s, "CALL DISCONNECT"); break; case 0x2a: SET_MSG_INFO(s, "CALL RELEASE COMPLETE"); break; case 0x2d: SET_MSG_INFO(s, "CALL RELEASE"); break; case 0x3a: SET_MSG_INFO(s, "CALL FACILITY"); break; case 0x3d: SET_MSG_INFO(s, "CALL STATUS"); break; default: SET_MSG_INFO(s, "UNKNOWN CC (%02x)", dtap->msg_type & 0x3f); s->unknown = 1; } }
/* * The main handler for an artnet packet. calls * the appropriate handler function */ int handle(node n, artnet_packet p) { if (check_callback(n, p, n->callbacks.recv)) return 0; switch (p->type) { case ARTNET_POLL: handle_poll(n, p); break; case ARTNET_REPLY: handle_reply(n,p); break; case ARTNET_DMX: handle_dmx(n, p); break; case ARTNET_ADDRESS: handle_address(n, p); break; case ARTNET_INPUT: _artnet_handle_input(n, p); break; case ARTNET_TODREQUEST: handle_tod_request(n, p); break; case ARTNET_TODDATA: handle_tod_data(n, p); break; case ARTNET_TODCONTROL: handle_tod_control(n, p); break; case ARTNET_RDM: handle_rdm(n, p); break; case ARTNET_VIDEOSTEUP: printf("vid setup\n"); break; case ARTNET_VIDEOPALETTE: printf("video palette\n"); break; case ARTNET_VIDEODATA: printf("video data\n"); break; case ARTNET_MACMASTER: printf("mac master\n"); break; case ARTNET_MACSLAVE: printf("mac slave\n"); break; case ARTNET_FIRMWAREMASTER: handle_firmware(n, p); break; case ARTNET_FIRMWAREREPLY: handle_firmware_reply(n, p); break; case ARTNET_IPPROG : handle_ipprog(n, p); break; case ARTNET_IPREPLY: printf("ip reply\n"); break; case ARTNET_MEDIA: printf("media \n"); break; case ARTNET_MEDIAPATCH: printf("media patch\n"); break; case ARTNET_MEDIACONTROLREPLY: printf("media control reply\n"); break; default: n->state.report_code = ARTNET_RCPARSEFAIL; printf("artnet but not yet implemented!, op was %hx\n", p->type); } return 0; }
int main (int argc, char *argv[]) { int remaining; int result = 0; /* We use no threads here which can interfere with handling a stream. */ (void) __fsetlocking (stdout, FSETLOCKING_BYCALLER); /* Set locale. */ (void) setlocale (LC_ALL, ""); /* Make sure the message catalog can be found. */ (void) bindtextdomain (PACKAGE_TARNAME, LOCALEDIR); /* Initialize the message catalog. */ (void) textdomain (PACKAGE_TARNAME); /* Parse and process arguments. This includes opening the modules. */ argp_children[0].argp = dwfl_standard_argp (); argp_children[0].group = 1; Dwfl *dwfl = NULL; (void) argp_parse (&argp, argc, argv, 0, &remaining, &dwfl); assert (dwfl != NULL); /* Now handle the addresses. In case none are given on the command line, read from stdin. */ if (remaining == argc) { /* We use no threads here which can interfere with handling a stream. */ (void) __fsetlocking (stdin, FSETLOCKING_BYCALLER); char *buf = NULL; size_t len = 0; ssize_t chars; while (!feof_unlocked (stdin)) { if ((chars = getline (&buf, &len, stdin)) < 0) break; if (buf[chars - 1] == '\n') buf[chars - 1] = '\0'; result = handle_address (buf, dwfl); } free (buf); } else { do result = handle_address (argv[remaining], dwfl); while (++remaining < argc); } dwfl_end (dwfl); #ifdef USE_DEMANGLE free (demangle_buffer); #endif return result; }