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