static void * bthidev_int_newconn(void *arg, struct sockaddr_bt *laddr, struct sockaddr_bt *raddr) { struct bthidev_softc *sc = arg; if (bdaddr_same(&raddr->bt_bdaddr, &sc->sc_raddr) == 0) return NULL; if ((sc->sc_flags & BTHID_CONNECTING) || sc->sc_state != BTHID_WAIT_INT || sc->sc_ctl == NULL || sc->sc_int != NULL) { aprint_verbose_dev(sc->sc_dev, "reject int newconn %s%s%s%s\n", (sc->sc_flags & BTHID_CONNECTING) ? " (CONNECTING)" : "", (sc->sc_state == BTHID_WAIT_INT) ? " (WAITING)": "", (sc->sc_ctl == NULL) ? " (NO CONTROL)" : "", (sc->sc_int != NULL) ? " (GOT INTERRUPT)" : ""); return NULL; } l2cap_attach_pcb(&sc->sc_int, &bthidev_int_proto, sc); return sc->sc_int; }
static int bt_devaddr_match(int s, struct bt_devinfo const *di, void *arg) { struct bt_devaddr_match_arg *m = (struct bt_devaddr_match_arg *)arg; if (!bdaddr_same(&di->bdaddr, m->bdaddr)) return (0); strlcpy(m->devname, di->devname, sizeof(m->devname)); return (1); }
static void * bthidev_int_newconn(void *arg, struct sockaddr_bt *laddr, struct sockaddr_bt *raddr) { struct bthidev_softc *sc = arg; if (bdaddr_same(&raddr->bt_bdaddr, &sc->sc_raddr) == 0 || (sc->sc_flags & BTHID_CONNECTING) || sc->sc_state != BTHID_WAIT_INT || sc->sc_ctl == NULL || sc->sc_int != NULL) return NULL; l2cap_attach(&sc->sc_int, &bthidev_int_proto, sc); return sc->sc_int; }
static void * btsco_sco_newconn(void *arg, struct sockaddr_bt *laddr, struct sockaddr_bt *raddr) { struct btsco_softc *sc = arg; DPRINTF("%s\n", sc->sc_name); if (bdaddr_same(&raddr->bt_bdaddr, &sc->sc_raddr) == 0 || sc->sc_state != BTSCO_WAIT_CONNECT || sc->sc_sco != NULL) return NULL; sco_attach_pcb(&sc->sc_sco, &btsco_sco_proto, sc); return sc->sc_sco; }