コード例 #1
0
ファイル: slurmd.c プロジェクト: mrhaoji/slurm
static void
_msg_engine(void)
{
	slurm_addr_t *cli;
	slurm_fd_t sock;

	msg_pthread = pthread_self();
	slurmd_req(NULL);	/* initialize timer */
	while (!_shutdown) {
		if (_reconfig) {
			verbose("got reconfigure request");
			_wait_for_all_threads(5); /* Wait for RPCs to finish */
			_reconfigure();
		}

		cli = xmalloc (sizeof (slurm_addr_t));
		if ((sock = slurm_accept_msg_conn(conf->lfd, cli)) >= 0) {
			_handle_connection(sock, cli);
			continue;
		}
		/*
		 *  Otherwise, accept() failed.
		 */
		xfree (cli);
		if (errno == EINTR)
			continue;
		error("accept: %m");
	}
	verbose("got shutdown request");
	slurm_shutdown_msg_engine(conf->lfd);
	return;
}
コード例 #2
0
ファイル: bu_hci.cpp プロジェクト: comarius/bunget
bool bu_hci::check_dev_state()
{
    if(_chekingdev){
        return true;
    }
    static int everysec=0;

    _chekingdev=true;
    if(everysec==0)
    {
        bool is_up = _socket->is_up();
        if (_isDevUp != is_up)
        {
            if (is_up)
            {
                try{
                    reset();
                    ::usleep(512000);
                    _reconfigure();
                }catch(...)
                {
                    is_up=false;
                }
            }
            _pev->on_dev_status(is_up);
            _isDevUp = is_up;
        }

        if(_isDevUp==false)
        {
            if(!_recreate_sock())
            {
                _THROW("");
            }
        }
    }
    if(++everysec>400)everysec=0;
    _chekingdev=false;
    return _isDevUp;
}
コード例 #3
0
ファイル: bu_hci.cpp プロジェクト: comarius/bunget
void bu_hci::_oncmd_complette(const no_evt_cmd_complete* nevcc)
{
    uint16_t    handle;

    switch(nevcc->cmd)
    {
        case RESET_CMD:
             _TRACE("    RESET_CMD");
             reset();
             ::usleep(512000);
            _reconfigure();
            break;
        case WRITE_LE_HOST_SUPPORTED_CMD:
            {
                _TRACE("    cc WRITE_LE_HOST_SUPPORTED_CMD");
                uint8_t le = nevcc->data[0];
                uint8_t simul = nevcc->data[1];
            }
            break;
        case READ_LE_HOST_SUPPORTED_CMD:
            {
                _TRACE("    cc READ_LE_HOST_SUPPORTED_CMD");
                uint8_t le = nevcc->data[0];
                uint8_t simul = nevcc->data[1];
            }
            break;
        case READ_LOCAL_VERSION_CMD:
            {
                _TRACE("    cc READ_LOCAL_VERSION_CMD");
                uint8_t  hciVer = nevcc->data[0];
                if (hciVer < 0x06)
                {
                    this->_onhci_state_chnaged(STATE_UNSUPORTED);
                }
                uint16_t hciRev = oa2t<uint16_t>(nevcc->data,1);
                uint8_t lmpVer = nevcc->data[3];
                uint16_t m1 = oa2t<uint16_t>(nevcc->data,4);
                uint16_t lmpSubVer = oa2t<uint16_t>(nevcc->data,6);

                _pev->on_read_version(hciVer, hciRev, lmpVer, m1, lmpSubVer);
                if (_state != STATE_POWEREDON)
                {
                    enable_adv(0);
                    int interval=160;
                    _pev->le_get_adv_interval(interval);
                    _set_adv_params(interval);
                }
            }
            break;
        case READ_BD_ADDR_CMD:
            {
                _TRACE("    cc READ_BD_ADDR_CMD");
                memcpy(&_address, nevcc->data, sizeof(bdaddr_t));
                _addrtype = ADDR_PUBLIC;
                _pev->on_mac_change(_address);
                char out[32];
                ba2str(&_address, out);
                _TRACE("    BADDR: " << out);
            }
            break;
        case LE_SET_ADVERTISING_PARAMETERS_CMD:
            _TRACE("    cc LE_SET_ADVERTISING_PARAMETERS_CMD");
            _onhci_state_chnaged(STATE_POWEREDON);
            _pev->on_adv_status(_state);
            break;
        case LE_SET_ADVERTISING_DATA_CMD:
            _TRACE("    cc LE_SET_ADVERTISING_DATA_CMD");
            _pev->on_adv_data_status(nevcc->status);
            _TRACE("======= READY TO ACCEPT CONNECTIONS ======");
            break;
        case LE_SET_SCAN_RESPONSE_DATA_CMD:
            _TRACE("    cc LE_SET_SCAN_RESPONSE_DATA_CMD");
            _pev->on_scan_resp_datat_status(nevcc->status);
            break;
        case LE_SET_ADVERTISE_ENABLE_CMD:
            _TRACE("    cc LE_SET_ADVERTISE_ENABLE_CMD");
            _pev->on_adv_enable(nevcc->status);
            _TRACE("======= READY TO ACCEPT CONNECTIONS ======");
            break;
        case READ_RSSI_CMD:
            {
                _TRACE("    cc READ_RSSI_CMD");
                handle =  oa2t<uint16_t>(nevcc->data,0); //result.readUInt16LE(0);
                uint8_t rssi = nevcc->data[2];
                _pev->on_rssi(handle, rssi);
            }
            break;
        case LE_LTK_NEG_REPLY_CMD:
            _TRACE("    cc LE_LTK_NEG_REPLY_CMD");
            handle =  oa2t<uint16_t>(nevcc->data,0);
            _pev->le_ltk_neg_reply(handle);
            break;
        case CMD_OPCODE_PACK(OCF_HOLD_MODE,OGF_LINK_POLICY):
            {
                _TRACE("    cc CMD_OPCODE_PACK(OCF_HOLD_MODE,OGF_LINK_POLICY)");
                hold_mode_cp* hmcp = (hold_mode_cp*)nevcc->data;
            }
            break;
        case CMD_OPCODE_PACK(OCF_INQUIRY,OGF_LINK_CTL):
            {
                _TRACE("    cc CMD_OPCODE_PACK(OCF_INQUIRY,OGF_LINK_CTL)");
            }
            break;
        case CMD_OPCODE_PACK(OCF_LE_READ_BUFFER_SIZE,OGF_LE_CTL):
            {
                _TRACE("    cc CMD_OPCODE_PACK(OCF_LE_READ_BUFFER_SIZE,OGF_LE_CTL)");

                uint16_t mtu = oa2t<uint16_t>(nevcc->data, 0);
                uint16_t maxmtu = oa2t<uint8_t>(nevcc->data, 2);
                if(mtu == 0){
                    _read_buffer_size(); //force a BT buffer because this sucks
                } else {
                    _aclMtu=mtu;
                    _aclPendingMax=maxmtu;
                    TRACE("OCF_LE_READ_BUFFER_SIZE: mtu=" << int(_aclMtu) << ", pendingMax=" << int(maxmtu));
                }
            }
            break;
        case CMD_OPCODE_PACK(OCF_READ_BUFFER_SIZE,OGF_INFO_PARAM):
            {
                 _TRACE("    cc CMD_OPCODE_PACK(OCF_READ_BUFFER_SIZE,OGF_INFO_PARAM)");
                if (nevcc->status==0) {
                    uint16_t mtu = oa2t<uint16_t>(nevcc->data, 0);
                    uint16_t maxmtu = oa2t<uint16_t>(nevcc->data, 3);
                    if(mtu && maxmtu){
                        _aclMtu=mtu;
                        _aclPendingMax=maxmtu;
                        TRACE("OCF_READ_BUFFER_SIZE: mtu=" << int(_aclMtu) << ", pendingMax=" << int(maxmtu));
                    }
                }
            }
            break;
            case CMD_OPCODE_PACK(OCF_SET_EVENT_MASK,OGF_HOST_CTL):
                {
                    bybuff trace;
                    _TRACE("    cc CMD_OPCODE_PACK(OCF_SET_EVENT_MASK,OGF_HOST_CTL)");
                    set_event_mask_cp* p = (set_event_mask_cp*)nevcc->data;
                    trace.append(p->mask, 8);
                    _TRACE("BT-Mask:" << trace.to_string());

                }
            break;
            case CMD_OPCODE_PACK(OCF_SET_EVENT_MASK,OGF_LE_CTL):
                {
                    bybuff trace;
                    _TRACE("    cc CMD_OPCODE_PACK(OCF_SET_EVENT_MASK,OGF_LE_CTL)");
                    set_event_mask_cp* p = (set_event_mask_cp*)nevcc->data;
                    trace.append(p->mask, 8);
                    _TRACE("LE-Mask:" << trace.to_string());

                }
            break;
        default:
            {
                uint16_t ogf = CMD_OPCODE_OGF(nevcc->cmd);
                uint16_t ocf = CMD_OPCODE_OCF(nevcc->cmd);
                _TRACE("    cc UNK command: OCF=" << std::hex <<
                                                int(ocf) <<
                                                ", OGF=" << int(ogf) << std::dec);
            }
            break;
    }
}