int wbus_get_fault_count(unsigned char ErrorList[32]) {
  unsigned char tmp[2];

  tmp[0] = ERR_LIST;
  len = 1;
  return wbus_io(WBUS_CMD_ERR, tmp, NULL, 0, ErrorList, &len, 1);
}
int wbus_ident(uint8_t identCommand, uint8_t *in) {
  uint8_t tmp;
  uint8_t tmp2[2];
  tmp = identCommand;
  len = 1; 
  return wbus_io( WBUS_CMD_IDENT, &tmp, NULL, 0, in, &len, 1); 
}
/* Check current command */
int wbus_check(unsigned char mode)
{
  len = 2;
  //unsigned char tmp[3];
  cmdbuf[0] = mode;
  cmdbuf[1] = 0;
  return wbus_io(WBUS_CMD_CHK, cmdbuf, NULL, 0, cmdbuf, &len, 0);
}
int wbus_fuelPrime( unsigned char time)
{
  cmdbuf[0] = 0x03;
  cmdbuf[1] = 0x00;
  cmdbuf[2] = time >> 1;
  len = 3;

  return wbus_io(WBUS_CMD_X, cmdbuf, NULL, 0, cmdbuf, &len, 0);
}
Esempio n. 5
0
void main(int argc, char **argv)
{
#ifdef __linux__
  if (argc > 1) {
    PORT_TO_HEATER = atoi(argv[1]);
  }
  if (argc > 2) {
    PORT_TO_EGG = atoi(argv[2]);
  }
#endif

  err = wbus_open(&wc, PORT_TO_EGG);

#ifdef __linux__  
  if (err) {
    PRINTF("Error opening W-Bus handle\n");
    exit(-1);
  }
#endif

  while (1) {
    /* Listen to W-Bus message. Blocking I/O */
    err = wbus_host_listen(wc, &addr, &cmd, wbdata, &len);

    if (err == 0)
    {
      err = wbus_open(&wh, PORT_TO_HEATER);
      if (err != 0)  {
        PRINTF("Error opening port %d\n", PORT_TO_HEATER);
        continue;
      }
      /* Forward parking heater command as suplemental heater command. */
      if (cmd == WBUS_CMD_ON_PH) {
        cmd_heater = WBUS_CMD_ON_SH;
      } else {
        cmd_heater = cmd;
      }
      err = wbus_io(wh, cmd_heater, wbdata, NULL, 0, wbdata, &len, 0);
      if (err != 0)  {
        PRINTF("Error wbus_io() failed (%d)\n", err);
        continue;
      }      
      wbus_close(wh);
    }

    /* Sent W-Bus message response back to client. */
    err = wbus_host_answer(wc, addr, cmd, wbdata, len);
    if (err) {
      PRINTF("wbus_host_answer() failed\n");
    }
  }
}
/* Sensor access */
int wbus_sensor_read(HANDLE_WBSENSOR sensor, int idx)
{
  int err  = 0;
  uint8_t sen;

  /* Tweak: skip some addresses since reading them just causes long delays. */
  switch (idx) {
    default:
      break;
    case 0:
    case 1:
    case 8:
    case 9:
    case 13:
    case 14:
    case 16:
      sensor->length = 0;
      sensor->idx = 0xff;
      return -1;
      break;
  }

  sen = idx;
  len = 1;
  err = wbus_io(WBUS_CMD_QUERY, &sen, NULL, 0, sensor->value, &len, 1);
  if (err != 0)
  {
    //PRINTF("Reading sensor %d failed\n", );
    sensor->length = 0;
  } else {
    /* Store length of received value */
    sensor->length = len;
    sensor->idx = idx;
  }

  return err;
}
int wbus_get_fault(unsigned char ErrorNumber, HANDLE_ERRINFO errorInfo) {
  len = 2;
  cmdbuf[0] = ERR_READ;
  cmdbuf[1] = ErrorNumber;
  return wbus_io(WBUS_CMD_ERR, cmdbuf, NULL, 0, (unsigned char*)errorInfo, &len, 1);
}
int wbus_clear_faults() {
  uint8_t tmp;
  tmp = ERR_DEL;
  len = 1;
  return wbus_io(WBUS_CMD_ERR, &tmp, NULL, 0, &tmp, &len, 0);
}
/* Turn heater off */
int wbus_turnOff()
{
  len = 0;
  return wbus_io(WBUS_CMD_OFF, cmdbuf, NULL, 0, cmdbuf, &len, 0);
}
/* Turn heater on for time minutes */
int wbus_turnOn(unsigned char cmd, unsigned char time)
{
  len = 1;
  cmdbuf[0] = time;
  return wbus_io(cmd, cmdbuf, NULL, 0, cmdbuf, &len, 0);
}