Пример #1
0
static void zg_read_cb(EV_P_ ev_io *w, int revents)
{
//	printf("zg_read_cb start\n");
//	int rc;
	EV_ALL *cev = (EV_ALL *)(((char *)w) - offsetof (EV_ALL, zg_readw));

	int recvlen;
	unsigned char tempbuf[ZIGBEE_BUF_MAXLEN];

	recvlen = ev_read(cev->zigbee_client.my_socket, tempbuf, ZIGBEE_BUF_MAXLEN);

	if(recvlen>0)
	{
//		memset(cev->zigbee_client.readbuf, 0, sizeof(cev->zigbee_client.readbuf));
		snprintf((char *)cev->zigbee_client.readbuf, ZIGBEE_BUF_MAXLEN, "%s", (char *)tempbuf);
		zigbee_msg_handle((void *)cev, tempbuf, recvlen);
	}
	else
	{
		//TODO: ERROR HANDLE
		log_printf(LOG_ERROR, "zg_read_cb failed\n");
		zigbee_reconnect();
	}
//	printf("zg_read_cb over\n");
}
Пример #2
0
 inline void FileClient::on_write(int fd, short ev, void *arg) {
   auto download = static_cast<FileDownload *>(arg);
   auto buf = download->buf();
   // Write the buffer.  A portion of the buffer may have been
   // written in a previous write, so only write the remaining
   // bytes.
   auto len = write(fd, buf->head(), buf->nbytes_rem());
   if (len == -1) {
     if (errno == EINTR || errno == EAGAIN) {
       // The write was interrupted by a signal or we
       // were not able to write any data to it,
       // reschedule and return.
       event_add(download->ev_write(), nullptr);
       return;
     } else {
       // Some other socket error occurred, exit.
       LOG_ERR("write error in file client");
       LOG_ERR("Unknown socket write error occurred");
       exit(EXIT_FAILURE);
     }
   } else if (len < buf->nbytes_rem()) {
     // Not all the data was written, update the offset and
     //reschedule the write event.
     buf->decr_nbytes_rem(len);
     event_add(download->ev_write(), nullptr);
     return;
   }
   // The data was completely written, add a read event.
   download->RequestSent();
   event_add(download->ev_read(), nullptr);
 }
Пример #3
0
int
kbdread(dev_t dev, struct uio *uio, int flags)
{
	struct kbd_softc *k = device_lookup_private(&kbd_cd, minor(dev));

	return ev_read(&k->sc_events, uio, flags);
}
Пример #4
0
int
msread(dev_t dev, struct uio *uio, int flags)
{
	struct ms_softc *ms;

	ms = device_lookup_private(&ms_cd, minor(dev));
	return ev_read(&ms->ms_events, uio, flags);
}
Пример #5
0
int
msread(dev_t dev, struct uio *uio, int flags)
{
	struct ms_softc *ms;

	ms = &ms_softc[minor(dev)];
	return(ev_read(&ms->ms_events, uio, flags));
}
Пример #6
0
int
msread(dev_t dev, struct uio *uio, int flags)
{
	struct ms_port *ms;

	ms = MS_DEV2MSPORT(dev);

	return(ev_read(&ms->ms_events, uio, flags));
}
Пример #7
0
int main(int argc, char **argv)
{
    signed int keygrabber;
    uint32_t ev;

    if (argc < 2) {
        fprintf(stderr, "usage: managerui /dev/input/eventX\n");
        return EXIT_FAILURE;
    }

    keygrabber = ev_open(argv[1]);
    if (keygrabber < 0) {
        fprintf(stderr, "Cannot open event file\n");
        return EXIT_FAILURE;
    }

    if (daemon(0, 0) != 0) {
        fprintf(stderr, "Cannot fork into background\n");
        return EXIT_FAILURE;
    }

    while (1) {
        ev = ev_read(keygrabber);
        if (EV_FAIL(ev)) {
            if (EV_GETERROR(ev) == EV_EBLOCK)
                continue;
            else
                break;
        }
        switch (EV_GETCODE(ev)) {
        case 225:
            if (EV_HASFLAG(ev, EV_UP))
                system("setbacklight %+10");
            break;
        case 224:
            if (EV_HASFLAG(ev, EV_UP))
                system("setbacklight %-10");
            break;
        default:
            break;
        }
    }

    ev_close(keygrabber);
    return EXIT_SUCCESS;
}
Пример #8
0
static void hp_read_cb(EV_P_ ev_io *w, int revents)
{
	//TODO: 后续HTTP协议解析放到这里做
	http_cev *hcv = (http_cev *)(((char *)w) - offsetof (http_cev, hp_readw));
	int recvlen;
	char tempbuf[HTTP_BUF_MAXLEN];

	recvlen = ev_read(hcv->http_client.my_socket, tempbuf, HTTP_BUF_MAXLEN);

	if(recvlen)
	{

		char * end = strrchr(tempbuf, '}');
		if(end)
		{
			ev_io_stop(hcv->cev->mainloop, &hcv->hp_readw);
			http_socket_close(&hcv->http_client); //http数据接收完成就可以关闭该连接了 	//关闭http socket后才可以进行新的http请求
			strncat(hcv->http_client.readbuf, tempbuf, recvlen);
			hcv->http_client.recv_len = hcv->http_client.recv_len+recvlen;
		}
		else
		{
			strncat(hcv->http_client.readbuf, tempbuf, recvlen);
			hcv->http_client.recv_len = recvlen;
			return ;
		}
		log_printf(LOG_NOTICE, "[RecvHttp]: %s,%d\n", hcv->http_client.readbuf, hcv->http_client.recv_len);
		int handlerc = hcv->http_client.fp((void *)hcv, hcv->http_client.readbuf, hcv->http_client.recv_len, hcv->http_client.callback_para);
		free(hcv); //must free
		if(handlerc <0)
		{
			log_printf(LOG_ERROR, "http recv parse failed\n");
		}
	}
	else
	{
		//TODO: ERROR HANDLE
		log_printf(LOG_ERROR, "hp_read_cb recv failed\n");
	}
}