/// <summary>
        /// Scans the I2C bus.
        /// </summary>
        /// <returns>QUantity of modules scanned.</returns>
        public virtual int ScanBus()
        {
            RescanPending = true;

            ClearModules();

            byte[] moduleList = new byte[0x78];
            int    iNbModules = Biccp.BICCP_ScanBus(ref moduleList);

            int i = 0;

            for (byte l = 0; l < 0x78; l++)
            {
                if (moduleList[l] > 0)
                {
                    var ccMod = GetModuleIdent(l);
                    if (ccMod == null)
                    {
                        System.Threading.Thread.Sleep(10);
                        ccMod = GetModuleIdent(l);
                    }
                    if (ccMod != null)
                    {
                        ccMod.ID = l;
                        Modules.Add(l, ccMod);
                    }
                    else
                    {
                        ccMod    = ModuleFactory.CreateInstance(ICCConstants.BICCP_GRP_UNKNOWN);
                        ccMod.ID = l;
                        Modules.Add(l, ccMod);
                    }
                    i++;
                }
            }

            RaiseBusRescanned();

            RescanPending = false;

            return(i);
        }