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"); }
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); }
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); }
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); }
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)); }
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)); }
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; }
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"); } }