1
0
Fork 0
CANopenNode/socketCAN/CO_notify_pipe.c
Janez 02a734a832 Move socketCAN/Makefile into base directory
Partially update sockeCAN/main.c and rename to sockeCAN/CO_main_basic.c.
Fix some warnings in socketCAN.
2020-03-02 09:17:52 +01:00

62 lines
1 KiB
C

/* Snipped from https://stackoverflow.com/a/2486353 */
#include <unistd.h>
#include <assert.h>
#include <fcntl.h>
#include <stdlib.h>
#include "CO_notify_pipe.h"
#include "CO_error.h"
CO_NotifyPipe_t *CO_NotifyPipeCreate(void)
{
int pipefd[2];
CO_NotifyPipe_t *p;
int ret = pipe(pipefd);
if (ret < 0) {
return NULL;
}
p = calloc(1, sizeof(CO_NotifyPipe_t));
if (p == NULL) {
return NULL;
}
p->m_receiveFd = pipefd[0];
p->m_sendFd = pipefd[1];
fcntl(p->m_sendFd,F_SETFL,O_NONBLOCK);
return p;
}
void CO_NotifyPipeFree(CO_NotifyPipe_t *p)
{
if (p == NULL) {
return;
}
close(p->m_sendFd);
close(p->m_receiveFd);
free(p);
}
int CO_NotifyPipeGetFd(CO_NotifyPipe_t *p)
{
if (p == NULL) {
return -1;
}
return p->m_receiveFd;
}
void CO_NotifyPipeSend(CO_NotifyPipe_t *p)
{
ssize_t ret;
if (p == NULL) {
return;
}
ret = write(p->m_sendFd,"1",1);
if(ret < 0){
log_printf(LOG_DEBUG, DBG_ERRNO, "write()");
}
}