FskErr createFrontAnalogRead(FskPinAnalog pin, double *value) { createFrontAnalog cfa = (createFrontAnalog)pin; FskErr err; UInt16 readValue; err = FskPinI2CSetAddress(cfa->i2c, cfa->address); if (err) return err; err = FskPinI2CReadDataWord(cfa->i2c, a2dpins[cfa->pin], &readValue); if (err) return err; *value = ((double)readValue) / 1023.0; return kFskErrNone; }
void xs_i2c_readWordDataSMB(xsMachine *the) { xsI2C i2c = xsGetHostData(xsThis); UInt8 command = (UInt8)xsToInteger(xsArg(0)); FskErr err; UInt16 val; DBG_I2C("xs_i2c_readWordDataSMB Call SMB to register %d\n", command); xsThrowIfNULL(i2c); FskPinI2CSetAddress(i2c->pin, i2c->address); err = FskPinI2CReadDataWord(i2c->pin, command, &val); //@@ if (! (i2c->address == 0x36) ) xsTraceDiagnostic("I2C readWordDataSMB register %d failed %s.", (int)reg, i2c->diagnosticID); xsThrowDiagnosticIfFskErr(err, "I2C readWordDataSMB register %d failed %s.", (int)command, i2c->diagnosticID); xsResult = xsInteger(val); }