Exemple #1
0
int transmit(int hc, int uc, int cmd)
{
  int ret = 0, i = 0;
  unsigned char data[5];
  char scratch[40];

  dsyslog(LOG_INFO,"transmit:  hc=0x%x, uc=0x%x, fc=0x%x\n",hc,uc,cmd);
  if (cmd >= X10_CMD_END){
    dsyslog(LOG_INFO,"transmit:  invalid fc\n");
    return 1;
  }
  hc &= 0x0f;
  memset(data,0,sizeof(data));
  i = 0;
  data[i++] = X10_PL_SENDCMD;
  data[i++] = housecode[hc] | 0x40;
  if (uc >= 0)
    data[i++] = unitcode[uc] | 0x40;
  if (cmd >= 0)
    data[i++] = functioncode[cmd] | 0x40;
  data[4] = X10_PL_REPEATONCE;
  if (sem_wait_timeout(&cts,timeout)) {
    syslog(LOG_INFO,"Timeout while waiting for transmitter\n");
    syslog(LOG_INFO,"If this persists, restart daemon\n");
    return -1;
  }
  if (startup()) {
    syslog(LOG_INFO,"unable to communicate with PowerLinc Transceiver\n");
    ret = -1;
    goto done;
  }
  dsyslog(LOG_INFO,"sending %s\n",dumphex(scratch,(void *)data,sizeof(data)));
  ret = write(serial,data,sizeof(data));
  dsyslog(LOG_INFO,"sleeping for %d microseconds\n",delay);
  usleep(delay*1000);
done:
  sem_post(&cts);			// enable transmitter
  return ret;
}
Exemple #2
0
int
sem_trywait(sem_t *sem)
{
    return sem_wait_timeout(sem, 0);
}
Exemple #3
0
int
sem_wait(sem_t *sem)
{
    return sem_wait_timeout(sem, INFINITE);
}
Exemple #4
0
int sem_wait(ACL_SEM *sem)
{
	return sem_wait_timeout(sem, ACL_MUTEX_MAXWAIT);
}
Exemple #5
0
int sem_try_wait(ACL_SEM *sem)
{
	return sem_wait_timeout(sem, 0);
}