/// <summary>Создать запрос на счетчик Энергомера</summary> /// <param name="addresssDevice">Адрес устройства</param> /// <param name="codeCommand">Код команды</param> /// <param name="data">Необязательный массив параметров для комманды</param> byte[] CreateRequest(int addresssDevice, ushort codeCommand, string psw, params byte[] data) { var buff = new List <byte>(); buff.Add(Codes.BYTE_END); buff.Add(Codes.BYTE_OPT); buff.AddRange(BitConverter.GetBytes((ushort)addresssDevice)); buff.Add(0); buff.Add(0); //пакет for (int i = 0; i < 4; i++) { byte b = byte.Parse(psw.Substring(i, 1)); buff.Add(b); } /*buff.Add(0); * buff.Add(0); * buff.Add(0); * buff.Add(0);*/ byte serv = (byte)(Codes.BYTE_SERV | data.Length); buff.Add(serv); buff.AddRange(BitwiseUtils.Reverse(BitConverter.GetBytes(codeCommand))); for (int i = 0; i < data.Length; i++) { buff.Add(data[i]); } buff.Add(CRC.getCRC(buff.ToArray(), 0)); var list = encodePacket(buff); list.Add(Codes.BYTE_END); return(list.ToArray()); }
public OperationResult TryWriteDateDate(IIODriverClient channel, int address, string psw, TimeZoneMap map, DeviceCompOn diff) { // Установка даты и времени защищена основным паролем. OperationResult result = WaitRequest(channel); if (!result.IsGood) { return(result); } DateTimeZone dateTime = diff.GetServerToDeviceTime(map); byte[] arr = new byte[7]; arr[0] = BitwiseUtils.DecToBCD((byte)dateTime.Second); arr[1] = BitwiseUtils.DecToBCD((byte)dateTime.Minute); arr[2] = BitwiseUtils.DecToBCD((byte)dateTime.Hour); arr[3] = (byte)dateTime.DayOfWeek; arr[4] = BitwiseUtils.DecToBCD((byte)dateTime.Day); arr[5] = BitwiseUtils.DecToBCD((byte)dateTime.Month); arr[6] = BitwiseUtils.DecToBCD((byte)(dateTime.Year - 2000)); try { var send = CreateRequest(address, Codes.CODE_WRITE_DATETIME, psw, arr); result = WriteReadCheck(channel, nRepeatGlobal, send, out byte[] answer); } catch (Exception e) { result = OperationResult.From(e); } return(result); }
public void DoRecurseUpdateLayers(Transform trans) { if (!_removeFromLayer) { int val = _targetLayer.value == 0 ? 0 : BitwiseUtils.Position(_targetLayer.value) - 1; //trans.gameObject.layer |= _layerMask; trans.gameObject.layer = val; } else { trans.gameObject.layer = 0; } if (_recursivelyChangeChildren) { foreach (Transform child in trans) { if (child == null) { continue; } DoRecurseUpdateLayers(child); } } }
public bool HasAccountStatusFlag(AccountStatusFlags flag) { var account = GetCurrentLoggedInAccount(); //TODO THOW ERROR??? if (account == null) { return(false); } return(BitwiseUtils.HasFlag(account.StatusFlags, ( int )flag)); }
private DateTimeZone ParseDateTime(byte[] answer, TimeZoneMap zone) { var year = 2000 + BitwiseUtils.BcdToDec(answer[6]); var month = BitwiseUtils.BcdToDec(answer[5]); var day = BitwiseUtils.BcdToDec(answer[4]); int hour = BitwiseUtils.BcdToDec(answer[2]); int min = BitwiseUtils.BcdToDec(answer[1]); int sec = BitwiseUtils.BcdToDec(answer[0]); var ret = new DateTimeZone(year, month, day, hour, min, sec, zone); return(ret); }
public void RemoveAccountStausFlag(AccountStatusFlags flag) { var account = GetCurrentLoggedInAccount(); //TODO THOW ERROR??? if (account == null) { return; } account.StatusFlags = BitwiseUtils.RemoveFlag(account.StatusFlags, ( int )flag); Context.LogValidationFailSaveChanges(RootRepository.SecurityRepository.AuditLogUserId); }
/// <summary>Показание счетчика с момента запуска</summary> /*private OperationResult TryReadEnergyFromLaunch(IIODriverClient channel, ShortRequest request, out Energy response) * { * return TryReadEnergy(channel, request, Codes.CODE_TOTAL, 0, 0, 0, out response); * }*/ #endregion #region Энергия по времени /// <summary>Чтение 30 минутных срезов энергии</summary> /// <param name="channel">Канал</param> /// <param name="request">Запрос</param> /// <param name="timeSlices">Время среза должно быть точное и выравненне</param> public OperationResult TryReadSlicesEnergy(IIODriverClient channel, string psw, DeviceCompOn deviceTime, SlicesQuery request, out Energy response) { response = Energy.Default; //log.Trace.Write(1, (l) => l.Info("Emul: {0}", request.EmulError)); if (!request.EmulError) { //log.Trace.Write(1, (l) => l.Info("DiffMsec: {0}, DiffMsecReal: {1}, DeviceTimeUtc: {2}, IsTimeSlices: {3}, TimeOneSidePathMsec: {4}, TimeSlices: {5}", // deviceTime.DiffMsec, deviceTime.DiffMsecReal, deviceTime.GetDeviceTimeUtc(), // deviceTime.IsItTime(request.GetTimeSlicesFrom30()), deviceTime.TimeOneSidePathMsec, request.GetTimeSlicesFrom30())); if (!deviceTime.IsItTime(request.GetTimeSlicesFrom30().AddSeconds(10))) { return(new OperationResult(Quality.Bad, "Time has not yet come")); } } OperationResult result; try { byte[] arr = new byte[5]; arr[0] = BitwiseUtils.DecToBCD(request.Day); arr[1] = BitwiseUtils.DecToBCD(request.Month); arr[2] = BitwiseUtils.DecToBCD((byte)(request.TimeSlices.Year - 2000)); arr[3] = request.Index; arr[4] = 1; var send = CreateRequest(request.Address, Codes.CODE_READ_ENERGY_INTERVAL, psw, arr); result = WriteReadCheck(channel, nRepeatGlobal, send, out byte[] answer); Array.Resize <byte>(ref answer, 4); var seg = new ByteArraySegment(answer, 0, answer.Length); var value = seg.ReadUInt32(0); if (value == 0xFFFFFF) { response = new Energy(0, 0, 0, 0); //это значит что его нет в памяти и надо возвращать нули return(OperationResult.Bad); } response = new Energy(value, 0, 0, 0); result = OperationResult.Good; } catch (Exception e) { result = OperationResult.From(e); } return(result); }
public OperationResult TryReadSerialNumber(IIODriverClient channel, int address, string psw, out string response) { OperationResult result = OperationResult.Bad; response = null; var send = CreateRequest(address, Codes.CODE_READ_SERIAL_NUMBER, psw, 0x00); result = WriteReadCheck(channel, nRepeatGlobal, send, out byte[] answer); if (!result.IsGood) { return(result); } try { response = Encoding.ASCII.GetString(BitwiseUtils.Reverse(answer)); } catch (Exception e) { result = OperationResult.From(e); } return(result); }