// I2C SMBus Test const SMBUS_MANUFACTURERACCES = 0x00; const SMBUS_REMAININGCAPACITYALARM = 0x01; const SMBUS_REMAININGTIMEALARM = 0x02; const SMBUS_BATTERYMODE = 0x03; const SMBUS_ATRATE = 0x04; const SMBUS_ATRATETIMETOFULL = 0x05; const SMBUS_ATRATETIMETOEMPTY = 0x06; const SMBUS_ATRATEOK = 0x07; const SMBUS_TEMPERATURE = 0x08; const SMBUS_VOLTAGE = 0x09; const SMBUS_CURRENT = 0x0A; const SMBUS_AVERAGECURRENT = 0x0B; const SMBUS_MAXERROR = 0x0C; const SMBUS_RELATIVESTATEOFCHARGE = 0x0D; const SMBUS_ABSOLUTESTATEOFCHARGE = 0x0E; const SMBUS_REMAININGCAPACITY = 0x0F; const SMBUS_FULLCHARGECAPACITY = 0x10; const SMBUS_RUNTIMETOEMPTY = 0x11; const SMBUS_AVERAGETIMETOEMPTY = 0x12; const SMBUS_AVERAGETIMETOFULL = 0x13; const SMBUS_CHARGINGCURRENT = 0x14; const SMBUS_CHARGINGVOLTAGE = 0x15; const SMBUS_BATTERYSTATUS = 0x16; const SMBUS_CYCLECOUNT = 0x17; const SMBUS_DESIGNCAPACITY = 0x18; const SMBUS_DESIGNVOLTAGE = 0x19; const SMBUS_SPECIFICATIONINFO = 0x1A; const SMBUS_MANUFACTURERDATE = 0x1B; const SMBUS_SERIALNUMBER = 0x1C; //0X1D-0X1F RESERVED const SMBUS_MANUFACTURERNAME = 0x20; const SMBUS_DEVICENAME = 0x21; const SMBUS_DEVICECHEMISTRY = 0x22; const SMBUS_MANUFACTURERDATA = 0x23; const SMBUS_LASTMESG = 0x23; class MyInput extends InputPort { constructor() { base.constructor(); } function set(val) { server.log("CMD("+typeof(val)+")="+val); local a = split(val, " "); local i = 0; local sendcnt = 0; local readcnt = 0; local i2c_addr = 0; local i2c_send = ""; for (i=0;i> 4) & 0xF, (sh >> 8) & 0xF, (sh >> 12) & 0xF); name = "SPECIFICATIONINFO"; comment = ""; }break; case SMBUS_MANUFACTURERDATE: { local sh = getUShortAsNumber(attrval); strVal = format("%02d:%02d:%02d",sh & 0x1F, (sh >> 5) & 0xF, (sh >> 9) & 0x7F); name = "MANUFACTURERDATE"; comment = " day:month:year"; }break; case SMBUS_SERIALNUMBER: { strVal = getUShort(attrval); name = "SERIALNUMBER"; comment = "(uint)"; }break; //0X1D-0X1F RESERVED case SMBUS_MANUFACTURERNAME: { strVal = getString(attrval); name = "MANUFACTURERNAME"; comment = "(string)"; }break; case SMBUS_DEVICENAME: { strVal = getString(attrval); name = "DEVICENAME"; comment = "(string)"; }break; case SMBUS_DEVICECHEMISTRY: { strVal = getString(attrval); name = "DEVICECHEMISTRY"; comment = "(string)"; }break; case SMBUS_MANUFACTURERDATA: { strVal = getHex(attrval); name = "MANUFACTURERDATA"; comment = ""; }break; case SMBUS_CHARGINGCURRENT: { strVal = getUShort(attrval); name = "CHARGINGCURRENT"; comment = "mA (0 to 65,534) 65,535 indicates the Smart Battery Charger should operate as a voltage source outside its maximum regulated current range"; }break; case SMBUS_CHARGINGVOLTAGE: { strVal = getUShort(attrval); name = "CHARGINGVOLTAGE"; comment = "mV (0 to 65,534) 65,535 indicates the Smart Battery Charger should operate as a current source outside its maximum regulated voltage range"; }break; } server.log(name+"="+strVal+" "+comment); } /////////////////////////////////////////////////////////////////////////// input <- MyInput(); imp.configure("SMBus Test",[input],[]); server.show("SMBus Test"); imp.enableblinkup(true); i2cPort <- hardware.i2c89; server.log("Initializing I2C ..."); hardware.configure(I2C_89); i2cPort.configure(CLOCK_SPEED_100_KHZ); fixed_message<- -1;//SMBUS_MANUFACTURERDATA; perform_loop <- 2; last_message <- 0; if (fixed_message != -1) last_message = fixed_message; function loop() { if (perform_loop) imp.wakeup(perform_loop, loop); local result = i2cPort.read(0x71, format("%c",last_message), 2); if (result != null) parseValue(last_message, result); else server.log("Received null"); if (fixed_message == -1) { last_message = last_message + 1; if (last_message == 0X1D) last_message = 0x20; if (last_message > SMBUS_LASTMESG) last_message = 0; } } loop();