```js
const IntMiner = require('./src');
const Debug = require('./src/log')();
const fs = require('fs');
const COMP = '[SIPC]';

(async () => {
  var devState = []
  var mode = 0
  const miner = await IntMiner({
    algoname: 'scrypt',
    minername: 'simplenode',
    cryptoname: 'sipc',
    protocolname: 'stratum'
  });

  // init Mining
  await miner.initMining();
  // set pool
  miner.setMiningConfig('pool', {
    host: `sipc.ss.dxpool.com`,
    port: 8008,
    user: `sunwei.b2`,
    pass: 'x'
  })
  // start Mining
  await miner.connectMining();
  await miner.startMining(null);

  miner.on('plug-in', async (data) => {
    Debug.IbctLogDbg(COMP, 'plug-in: ', data.devID);
    await miner.connectMining();
    miner.startMining({
      'devID': data.devID
    });
  });

  miner.on('plug-out', data => {
    Debug.IbctLogDbg(COMP, 'plug-out: ', data.devID);
    // miner.stopMining({ 'devId': data.devID });
  });

  miner.on("error", function (devID, data) {
    if (devID)
      Debug.IbctLogErr(COMP, 'Miner' + devID + ':', data);
    else
      Debug.IbctLogErr(COMP, data);
  });

  miner.on("warning", function (devID, data) {
    if (devID)
      Debug.IbctLogDbg(COMP, 'Miner' + devID + ':', data);
    else
      Debug.IbctLogDbg(COMP, data);
  });

  setTimeout(function() {
    if (mode === 1) {
      Debug.IbctLogDbg(COMP, 'Burn Image')
      fs.readFile('./v0.0.3r.bin', (err, data) => {
        if (err) {
          Debug.IbctLogErr(COMP, err)
        } else {
          miner.BurnMiningFirmware(null, data, function (err, data) {
            if (err) {
              Debug.IbctLogErr(COMP, err)
              return
            }

            Debug.IbctLogDbg(COMP, 'Burn ', (data * 100).toFixed(1), '%')
            if ((data * 100).toFixed(1) === '100.0') {
              Debug.IbctLogDbg(COMP, 'Burn Complete')
            }
          })
        }
      })
    } else if (mode === 2) {
      Debug.IbctLogDbg(COMP, 'Reboot')
      miner.RebootMining(null)
    } else if (mode === 3) {
      Debug.IbctLogDbg(COMP, 'Set led on')
      miner.SetMiningLed(null, true)
      setTimeout(function() {
        Debug.IbctLogDbg(COMP, 'Set led off')
        miner.SetMiningLed(null, false)
      }, 5000)
    } else if (mode === 4) {
      Debug.IbctLogDbg(COMP, 'Stop Miner')
      miner.stopMining(null)
    } else if (mode === 5) {
      Debug.IbctLogDbg(COMP, 'Exit Miner')
      miner.exitMining()
    }
  }, 10000)

  setInterval(function () {
    devState = miner.getMiningStatus();
    Debug.IbctLogDbg(COMP, JSON.stringify(devState));
  }, 10000);
})();
```
1. startMining()
input:
  null:  所有设备开始挖矿
  或: 指定设备开始挖矿
  {
    “devID”: 0,
  }
Output: null

2. stopMining()
input:
  null: 关闭所有设备
  或: 关闭指定设备
  {
    “devID”: 0
  }
Output: null

3. getMiningStatus()
input: 
  null: 输出所有设备的状态
  或: 输出指定设备的状态
  {
    “devID”: 0,
  }
Output:
  [
    {
      “devID”: 0,
      “miningName”:“simplenode”,
      “miningSN”:“X10B92451F3EE7”,
      “miningType”:“sipc”,
      “state”: “on”,
      “version”: “V0.0.1”,
      “hashrate”: “845KH/s”,
      “avHashrate”: “820KH/s”,
      “hardwareErr”: 300,
      “rejected”: 100,
      “nonces”: 100,
      “accepted”: 100,
      “temperatue”: “50℃”,
      “elapsed”: “10h15m6s”,
      “pools”: {
          “host”: “sipc.ss.dxpool.com”,
          “port”: 8008,
          “user”: “sunwei.b2”,
          “pass”: “x”
      }
    }
  ]

4. RebootMining()
input
  null: 关闭所有设备
  或: 关闭指定设备
  {
    “devID”: 0,
  }
Output: null

5. SetMiningLed(Device, Enable)
input
  Device:
    null: 关闭所有设备
    或: 关闭指定设备
    {
      “devID”: 0,
      “enable”: true
    }
  Status:
    true: 某种灯状态
    或
    false: 还原置灯之前的灯状态

6. BurnMiningFirmware(Device, Image, Callback)
input
  Device
    null: 关闭所有设备
    或: 关闭指定设备
    {
      “devID”: 0,
    }
  Image
    烧入镜像
  烧入实例：
    burnFirmware() {
      fs.readFile('./head.bin', (err, data) => {
        if (err) {
          Debug.IbctLogErr(COMP, err);
        } else {
          miner.BurnMiningFirmware(null, data, function (err, data) {
            if (err) {
              Debug.IbctLogErr(COMP, err);
              return;
            }

            Debug.IbctLogDbg(COMP, 'Burn ', (data * 100).toFixed(1), '%');
            if ((data * 100).toFixed(1) === '100.0') {
              Debug.IbctLogDbg(COMP, 'Burn Complete');
            }
          });
        }
      });
    }
  烧入完成请重新插拔矿机

7. setMiningConfig(setName, settings)
input:
  setName: 可以设置矿机的类型，目前只支持'pool'
  settings: 设置值。
    如果是pool：
      {
        host: `sipc.ss.dxpool.com`,
        port: 8008,
        user: `sunwei.b2`,
        pass: 'x'
      }

8. exitMining()
input: null 释放miner相关资源
Output: null

9. connectMining(Device)
input
  Device:
    null: 连接所有设备
    或: 连接指定设备
    {
      “devID”: 0,
    }


