private ChannelInfo ReadChannel(SignalSource source, int index, int nameLength) { ChannelInfo ci = new ChannelInfo(source, index, 0, ""); //ci.RecordIndex = svlMapping.GetWord("RecordId"); ci.OldProgramNr = svlMapping.GetWord("ChannelId") >> 2; var nwMask = svlMapping.GetDword("NwMask"); ci.Skip = (nwMask & svlMapping.Settings.GetInt("NwMask_Skip")) != 0; ci.Lock = (nwMask & svlMapping.Settings.GetInt("NwMask_Lock")) != 0; ci.Hidden = (nwMask & svlMapping.Settings.GetInt("NwMask_Hide")) != 0; for (int i = 0; i < 3; i++) { bool isFav = (nwMask & svlMapping.Settings.GetInt("NwMask_Fav" + (i + 1))) != 0; if (isFav) ci.Favorites |= (Favorites) (1 << i); } var fieldMask = svlMapping.GetDword("HashcodeFieldMask"); if ((fieldMask & svlMapping.Settings.GetInt("HashcodeFieldMask_Name")) != 0) { ci.Name = svlMapping.GetString("Name", nameLength); int term = ci.Name.IndexOf('\0'); if (term >= 0) ci.Name = ci.Name.Substring(0, term); } var serviceType = svlMapping.GetByte("ServiceType"); if (serviceType == 1) { ci.SignalSource |= SignalSource.Tv; ci.ServiceTypeName = "TV"; } else if (serviceType == 2) { ci.SignalSource |= SignalSource.Radio; ci.ServiceTypeName = "Radio"; } else { ci.ServiceTypeName = "Data"; } if ((fieldMask & svlMapping.Settings.GetInt("HashcodeFieldMask_TslRecId")) != 0) { int transpTableId = svlMapping.GetByte("TslTableId"); int transpRecordId = svlMapping.GetByte("TslRecordId"); var transpId = (transpTableId << 16) + transpRecordId; var transp = this.transponder.TryGet(transpId); if (transp != null) { ci.Transponder = transp; ci.FreqInMhz = transp.FrequencyInMhz; ci.SymbolRate = transp.SymbolRate; } } if ((fieldMask & svlMapping.Settings.GetInt("HashcodeFieldMask_BroadcastType")) != 0) { var bcastType = svlMapping.GetByte("BroadcastType"); if (bcastType == 1) ReadAnalogData(ci); else if (bcastType == 2) ReadDvbData(ci); } ci.Encrypted = (fieldMask & svlMapping.Settings.GetInt("HashcodeFieldMask_Encrypted")) != 0; //ci.AddDebug("u1="); //ci.AddDebug(svlMapping.Data, svlMapping.BaseOffset + 2, 2); //ci.AddDebug("u2="); //ci.AddDebug(svlMapping.Data, svlMapping.BaseOffset + 4, 2); //ci.AddDebug(", hash="); //ci.AddDebug(svlMapping.Data, svlMapping.BaseOffset + 8, 2); //ci.AddDebug(", nw="); //ci.AddDebug(svlMapping.Data, svlMapping.BaseOffset + 12, 4); //ci.AddDebug(", o1="); //ci.AddDebug(svlMapping.Data, svlMapping.BaseOffset + 16, 4); ci.AddDebug(", o2="); ci.AddDebug(svlMapping.Data, svlMapping.BaseOffset + 20, 4); ci.AddDebug("progId="); ci.AddDebug(svlMapping.Data, svlMapping.BaseOffset + 24, 4); return ci; }