)>}]
شركة التطبيقات المتكاملة لتصميم وبرمجة البرمجيات الخاصة ش.ش.و.
Integrated Applications Programming Company
Skip Navigation LinksHome » Code Library » Ont

Public general use code classes and xml files that we've compiled and used over the years:

Huawei's Ont support class of Optical Fiber Network (OFN) business model.

    1: using System.Collections.Generic;
    2: using System.Linq;
    3:  
    4: namespace Ia.Ngn.Cl.Model.Business.Huawei
    5: {
    6:     ////////////////////////////////////////////////////////////////////////////
    7:  
    8:     /// <summary publish="true">
    9:     /// Huawei's Ont support class of Optical Fiber Network (OFN) business model.
   10:     /// </summary>
   11:     /// 
   12:     /// <remarks> 
   13:     /// Copyright © 2016-2020 Jasem Y. Al-Shamlan (info@ia.com.kw), Integrated Applications - Kuwait. All Rights Reserved.
   14:     ///
   15:     /// This library is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by
   16:     /// the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
   17:     ///
   18:     /// This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
   19:     /// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
   20:     /// 
   21:     /// You should have received a copy of the GNU General Public License along with this library. If not, see http://www.gnu.org/licenses.
   22:     /// 
   23:     /// Copyright notice: This notice may not be removed or altered from any source distribution.
   24:     /// </remarks> 
   25:     public class Ont
   26:     {
   27:         /// <summary/>
   28:         public class EquipmentType
   29:         {
   30:             public string Name;
   31:             public List<string> SystemNameList;
   32:             public int TelPorts;
   33:             public int EthernetPorts;
   34:             public Ia.Ngn.Cl.Model.Business.Huawei.Ont.FamilyType FamilyType;
   35:  
   36:             public EquipmentType() { }
   37:         }
   38:  
   39:         /// <summary/>
   40:         public static EquipmentType[] EquipmentTypeList =
   41:             {
   42:             new EquipmentType { Name = "HN8245Q-2", SystemNameList = new List<string>() { "245H" } , FamilyType = Ia.Ngn.Cl.Model.Business.Huawei.Ont.FamilyType.Sfu, EthernetPorts = 4, TelPorts = 2 },
   43:             new EquipmentType { Name = "MA5672-4", SystemNameList = new List<string>() { "MA5672-G4P4", "MA5672", "ONT", " MA5672-G4P4" /*sic*/ , "MA5675" /*MA5675 not sure what this is*/ }, FamilyType = Ia.Ngn.Cl.Model.Business.Huawei.Ont.FamilyType.Sfu, EthernetPorts = 4, TelPorts = 4 },
   44:             new EquipmentType { Name = "MA5616-32", SystemNameList = new List<string>() { "5616", "MDU" , "MDU " /*sic*/ }, FamilyType = Ia.Ngn.Cl.Model.Business.Huawei.Ont.FamilyType.Mdu, EthernetPorts = 8, TelPorts = 32 },
   45:             new EquipmentType { Name = "MA5616-48", SystemNameList = new List<string>() { "5616" }, FamilyType = Ia.Ngn.Cl.Model.Business.Huawei.Ont.FamilyType.Mdu, EthernetPorts = 8, TelPorts = 48 },
   46:             new EquipmentType { Name = "MA5616-64", SystemNameList = new List<string>() { "5616", "MDU" }, FamilyType = Ia.Ngn.Cl.Model.Business.Huawei.Ont.FamilyType.Mdu, EthernetPorts = 8, TelPorts = 64},
   47:             new EquipmentType { Name = "MA5616-96", SystemNameList = new List<string>() { "5616", "MDU" /*not sure*/ }, FamilyType = Ia.Ngn.Cl.Model.Business.Huawei.Ont.FamilyType.Mdu, EthernetPorts = 8, TelPorts = 96 },
   48:             new EquipmentType { Name = "MA5616-128", SystemNameList = new List<string>() { "5616" }, FamilyType = Ia.Ngn.Cl.Model.Business.Huawei.Ont.FamilyType.Mdu, EthernetPorts = 8, TelPorts = 128 },
   49:             new EquipmentType { Name = "MA5616-192", SystemNameList = new List<string>() { "5616" }, FamilyType = Ia.Ngn.Cl.Model.Business.Huawei.Ont.FamilyType.Mdu, EthernetPorts = 4, TelPorts = 192 },
   50:             new EquipmentType { Name = "MA5878-16", SystemNameList = new List<string>() { "5878" }, FamilyType = Ia.Ngn.Cl.Model.Business.Huawei.Ont.FamilyType.Mdu, EthernetPorts = 8, TelPorts = 16 },
   51:             new EquipmentType { Name = "MA5878-32", SystemNameList = new List<string>() { "5878" }, FamilyType = Ia.Ngn.Cl.Model.Business.Huawei.Ont.FamilyType.Mdu, EthernetPorts = 8, TelPorts = 32 },
   52:             new EquipmentType { Name = "MA5878-48", SystemNameList = new List<string>() { "5878" }, FamilyType = Ia.Ngn.Cl.Model.Business.Huawei.Ont.FamilyType.Mdu, EthernetPorts = 8, TelPorts = 48 },
   53:             new EquipmentType { Name = "MA5878-64", SystemNameList = new List<string>() { "5878" }, FamilyType = Ia.Ngn.Cl.Model.Business.Huawei.Ont.FamilyType.Mdu, EthernetPorts = 8, TelPorts = 64 },
   54:         };
   55:  
   56:         /*
   57: select count(EQUIPMENTID) as count, '[' + EQUIPMENTID + ']' as EmsOntEquipmentTypeName from EmsOnts group by EQUIPMENTID
   58: count    EmsOntEquipmentTypeName
   59: 310    [5878]
   60: 1    [MA5675]
   61: 6    [MA5672]
   62: 210    [MDU]
   63: 3    [ MA5672-G4P4]
   64: 29311    [MA5672-G4P4]
   65: 3    [ONT]
   66: 716    [5616]
   67: 2    [245H]
   68: */
   69:  
   70:         /*
   71:         select count(0), substring(note,1,charindex(':',note)) 
   72:         from Accesses 
   73:         where note like '%: %'
   74:         group by substring(note,1,charindex(':',note)) 
   75: 
   76:         20    MA5616-32: 5616
   77:         3    MA5616-48: 5616
   78:         -22    MA5616-64: 5616
   79:         3    MA5616-96: 5616
   80:         -6029    MA5672-4:     MA5672-G4P4
   81:         -121    MA5878-32: 5878
   82:         453    SFU:
   83:         */
   84:  
   85:         /*
   86:         ////////////////////////////////////////////////////////////////////////////
   87: 
   88:         /// <summary>
   89:         /// 
   90:         /// </summary>
   91:         public static Ia.Ngn.Cl.Model.Business.Huawei.Ont.EquipmentType EquipmentTypeFromBoardPstnMainBoardVersionString(string mainBoardVersion)
   92:         {
   93:             // this will convert string format of MDU board type from board table format 
   94:             /*
   95:              * ASRB–32 pots
   96:              * ASPB—64 pots
   97:              * Main Board: H838ASPB    
   98: IF MDU the user DEV name to read board SN and TYPE and put in Board
   99: LST-BOARD::DEV=MDU-FNT-806-002,FN=0:CTAG::SHOWOPTION=BNAME;
  100: 
  101: 
  102:    7340724 2018-10-24 11:26:42
  103: M  CTAG COMPLD
  104:    EN=0   ENDESC=Succeeded.
  105:    blktag=1
  106:    blkcount=5
  107:    blktotal=5
  108: 
  109: Board information of the device MDU-FNT-806-002
  110: ---------------------------------------------------------------
  111: DID     FN      SN      BT      BVER    BSTAT
  112: 7340724 0       0       Other   Main Board: H831CCUD     PCB           Version: H831CCUD VER C     Base     BIOS Version: 313     Software      Version: MA5616V800R015C00     CPLD         Version: (U1022)100     MAB           Version: 0000      SubBoard[0]:       PCB           Version: H831UP2A VER A       MAB           Version: 0001       SubBoard[1]:       PCB           Version: H836ASDA VER C       MAB           Version: 0001       APP           Version: 362(2014-8-7)      BIOS          Version: (U1)309      VoiceFile     Version: CHS 010       Normal
  113: 7340724 0       1       ETH     Board Name: H831EIUD     ---------------------------------------     PCB           Version: H831EIUD VER E     MAB           Version: 0001     CPLD          Version: (U8)100        Normal
  114: 7340724 0       2       ETH     Board Name: H831EIUD     ---------------------------------------     PCB           Version: H831EIUD VER E     MAB           Version: 0001     CPLD          Version: (U8)100        Normal
  115: 7340724 0       3       PSTN    Main Board: H838ASRB    ---------------------------------------    Pcb   Version: H838ASRB VER B    Mab   Version: 0000      Main CPU :     CPU   Version: (U300)STM32F103VD    APP   Version: 639(2015-1-31)    BIOS  Version: (U300)107    Normal
  116: 7340724 0       5       Other   --      Normal
  117: ---------------------------------------------------------------
  118: ;
  119:              * /
  120: 
  121:             Ia.Ngn.Cl.Model.Business.Huawei.Ont.EquipmentType equipmentType;
  122: 
  123:             equipmentType = (from e in EquipmentTypeList 
  124:                              where e.MainBoardVersion == mainBoardVersion && e.FamilyType == Ia.Ngn.Cl.Model.Business.Huawei.Ont.FamilyType.Mdu 
  125:                              select e).Single();
  126: 
  127:             return equipmentType;
  128:         }
  129:         */
  130:  
  131:         /// <summary/>
  132:         public enum FamilyType { Undefined = 0, Sfu = 1, Soho = 2, Mdu = 3 };
  133:  
  134:         /// <summary/>
  135:         public Ont() { }
  136:  
  137:         ////////////////////////////////////////////////////////////////////////////
  138:  
  139:         /// <summary>
  140:         ///
  141:         /// </summary>
  142:         public static string OntId(/*int oltId, int fn, int sn, int pn,*/ string ponId, int ontSystemId)
  143:         {
  144:             /*
  145:              * Id: OLT_01 Id-Frame-Slot-Port-OnuID
  146:              * FN    SN   PN   ONTID
  147:              * 
  148:              * Dev: olt id
  149:              * Board: FN SN
  150:              * Port: FN SN PN
  151:              * Ont: FN SN PN ONTID
  152:              * 
  153:              * /// FN INTEGER 0-255 Indicates the subrack ID of the OLT. 
  154:              * /// SN INTEGER 0-35 Indicates the slot ID of the OLT. 
  155:              * /// PN INTEGER 0-63 Indicates the port ID of the OLT. 
  156:              * /// ONTID INTEGER 0-255 NOTE If the UNI port is of 10G GPON, the value range is 0-255; if the UNI port is of 1G GPON, the value range is 0-127. Indicates the ONT ID. 
  157:              */
  158:  
  159:             string id;//, ponId;
  160:  
  161:             //if (oltId > 0 && fn >= 0 && fn <= 255 && sn >= 0 && sn <= 35 && pn >= 0 && pn <= 63 && ontSystemId >= 0 && ontSystemId <= 255)
  162:             //{
  163:             // In our NGN network the missing RACK in EMS is 0, FN is always 0, and ontSystemId has max 2 digits
  164:  
  165:             //if (fn == 0 && ontSystemId <= 99)
  166:             //{
  167:             id = Ia.Ngn.Cl.Model.Business.Default.OntId(ponId, ontSystemId);
  168:             //}
  169:             //else
  170:             //{
  171:             //throw new System.ArgumentOutOfRangeException("fn, sn, pn, ontId", "fn, sn, pn, or ontId is out of range");
  172:             //}
  173:             //}
  174:             //else
  175:             //{
  176:             //throw new System.ArgumentOutOfRangeException("fn, sn, pn, ontId", "fn, sn, pn, or ontId is out of range");
  177:             //}
  178:  
  179:             return id;
  180:         }
  181:  
  182:         ////////////////////////////////////////////////////////////////////////////
  183:  
  184:         /// <summary>
  185:         ///
  186:         /// </summary>
  187:         public static Ia.Ngn.Cl.Model.Business.Huawei.Ont.EquipmentType EquipmentTypeFromOntIdAndFamilyTypeAndEquipmentId(Ia.Ngn.Cl.Model.Business.Huawei.Ont.FamilyType familyType, string equipmentId, string ontId)
  188:         {
  189:             Ia.Ngn.Cl.Model.Business.Huawei.Ont.EquipmentType equipmentType;
  190:  
  191:             if (familyType == Ia.Ngn.Cl.Model.Business.Huawei.Ont.FamilyType.Mdu)
  192:             {
  193:                 if (Ia.Ngn.Cl.Model.Data.Huawei.Default.NddOntIdToMduDevDictionary.ContainsKey(ontId))
  194:                 {
  195:                     var mduDev = Ia.Ngn.Cl.Model.Data.Huawei.Default.NddOntIdToMduDevDictionary[ontId];
  196:  
  197:                     equipmentType = (from e in Ia.Ngn.Cl.Model.Business.Huawei.Ont.EquipmentTypeList where e.SystemNameList.Contains(equipmentId) && e.TelPorts == mduDev.TelPortCount select e).SingleOrDefault();
  198:                 }
  199:                 else equipmentType = null;
  200:             }
  201:             else if(familyType == Ia.Ngn.Cl.Model.Business.Huawei.Ont.FamilyType.Sfu)
  202:             {
  203:                 equipmentType = (from e in Ia.Ngn.Cl.Model.Business.Huawei.Ont.EquipmentTypeList where e.SystemNameList.Contains(equipmentId) select e).Single();
  204:             }
  205:             else //if (familyType == Ia.Ngn.Cl.Model.Business.Huawei.Ont.FamilyType.Undefined)
  206:             {
  207:                 equipmentType = null;
  208:             }
  209:  
  210:             return equipmentType;
  211:         }
  212:  
  213:         ////////////////////////////////////////////////////////////////////////////
  214:  
  215:         /// <summary>
  216:         ///
  217:         /// </summary>
  218:         public static int SpecialIntegerParameterHandling(string parameterName, string parameterValue)
  219:         {
  220:             int i;
  221:  
  222:             if (parameterName == "AUTHTIMEOUT")
  223:             {
  224:                 // AUTHTIMEOUT
  225:                 // INTEGER
  226:                 // 1 - 168 Disable
  227:                 // Indicates the timeout period of the authentication. This parameter is valid only when the AUTH parameter is set to ONCE_ON.If you do not set this parameter, the value is returned as Disable in the output information.Unit: h.
  228:  
  229:                 parameterValue = parameterValue.Replace("Disable", "0");
  230:             }
  231:             else
  232:             {
  233:  
  234:             }
  235:  
  236:             i = int.Parse(parameterValue);
  237:  
  238:             return i;
  239:         }
  240:  
  241:         ////////////////////////////////////////////////////////////////////////////
  242:  
  243:         /// <summary>
  244:         ///
  245:         /// </summary>
  246:         public static bool IsValidSerialNumber(string serialNumber)
  247:         {
  248:             bool isValid;
  249:  
  250:             if (!string.IsNullOrEmpty(serialNumber))
  251:             {
  252:                 if (serialNumber.Length == 16) //485754432D08578D
  253:                 {
  254:                     isValid = Ia.Cl.Model.Default.IsHex(serialNumber);
  255:                 }
  256:                 else isValid = false;
  257:             }
  258:             else isValid = false;
  259:  
  260:             return isValid;
  261:         }
  262:  
  263:         ////////////////////////////////////////////////////////////////////////////
  264:         ////////////////////////////////////////////////////////////////////////////
  265:     }
  266:  
  267:     ////////////////////////////////////////////////////////////////////////////
  268:     ////////////////////////////////////////////////////////////////////////////
  269: }