Example #1
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="msg"></param>
        private void ParseMessage(ref byte[] msg)
        {
            _DevId dev        = (_DevId)Enum.Parse(typeof(_DevId), msg[3].ToString());
            string senderdesc = Common.Utility.EnumTypeConverter.GetDescriptionFromEnumValue(dev);

            //!< 망함 다시...
        }
Example #2
0
 /// <summary>
 /// 요청 패킷을 생성하여 보냄
 /// </summary>
 /// <param name="targetDevId"></param>
 /// <param name="cmd"></param>
 public void RequestRTUByDevCmd(_DevId targetDevId, _opCode cmd)
 {
     //!< 도어 상태정보 31
     //!< 온습도 32, 온도 31
     //!< 조도 31
     //!< 마이크 31
     //!< 스피커 상태정보 31, 볼륨 설정 30/해제 31
     //!< 뮤트 상태정보 31, 설정 30/해제 31
     //!< 팬 수량 31, 상태
     //!< 팬 제어 동작 제어, 자동모드 설정 30/해제 31, 개별 끔 30, 켬 31 수량만큼
     //!< 히터 전원상태, 전원동작 설정 및 제어 자동/수동 ?? 헷갈림
     //!< LCD 전원상태, 전원제어
     //!< LED 전원상태, 전원제어
     //!< AC 전원 리셋, 예약제어(4byte 시간값이 이해가 안됨)
     //!< 전체장치 전원제어 수량정보, 전체장치 전원상태 정보, 전체장치 전원제어
     //!< 초기값 파라미터 설정 32byte
     //!< 모뎀 리셋
     //!< 충격센서 설정값 읽기, 설정 요청(3Byte)
     //!< 상태요청(단순 응답 확인)
 }
Example #3
0
        /// <summary>
        /// 단순한 ACK 처리
        /// </summary>
        /// <param name="code"></param>
        /// <param name="dev"></param>
        private void ReplyEventACK(_opCode code, _DevId dev, bool bACK)
        {
            try
            {
                byte[] sendBytes = new byte[8];
                byte[] headBytes = new byte[] { 0x02, 0xFD, (byte)dev, 0x11, 0xAA, 0x00 };
                byte[] tailBytes = new byte[] { 0x00, 0x03 };

                byte chk = GetChecksum(ref headBytes);
                tailBytes[0] = chk;

                headBytes.CopyTo(sendBytes, 0);
                tailBytes.CopyTo(sendBytes, 6);

                SendCommand(sendBytes);
            }
            catch (Exception)
            {
                //throw;
            }
        }
Example #4
0
 /// <summary>
 /// RTU로부터의 요청에 대한 응답
 /// </summary>
 /// <param name="reqDevId"></param>
 /// <param name="cmd"></param>
 private void ReplyRTURequest(_DevId reqDevId, _opCode cmd)
 {
     //!< 시간요청 값이 이해가 안됨
 }
Example #5
0
        /// <summary>
        /// 실제 바이트들에 대한 기본처리 및 파싱 콜
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void Rev1_RTUReceived(object sender, EventArgs e)
        {
            //byte[] test = new byte[8];
            byte[] test = Enumerable.Repeat <byte>(0x41, 8).ToArray();
            ParseMessage(ref test);
            byte _trash;

            if (_port.IsOpen)
            {
                try
                {
                    waitCmdBusy.WaitOne();
                    byte[] header = new byte[6];
                    if (rxFIFO.Count > 8)
                    {
                        //!< check header
                        rxFIFO.CopyTo(header, 0);

                        if (header[0] == 0x02 && header[1] == 0xFD)
                        {
                            //!< get needed body
                            byte bLen = header[5];
                            int  dLen = 8 + (int)bLen;

                            if (header[2] == _bitDevId)
                            {
                                //!< Make Copyed Message
                                if (rxFIFO.Count >= 8 + (int)bLen)
                                {
                                    byte[] msg = new byte[dLen];
                                    rxFIFO.CopyTo(msg, 0);

                                    //!< check tail
                                    if (ValidateChecksum(ref msg))
                                    {
                                        //!< waiter clear
                                        _DevId sendDev = (_DevId)Enum.Parse(typeof(_DevId), msg[3].ToString());
                                        if (sendDev != _DevId.UNKNOWN)
                                        {
                                            var matched = _waitCmd.Where(z => z.Value == sendDev).ToList();
                                            foreach (var item in matched)
                                            {
                                                _waitCmd.Remove(item.Key);
                                            }
                                        }
                                        ParseMessage(ref msg);
                                    }
                                }
                            }
                            else
                            {
                                //!< can not be processed for bit
                            }
                            //!< Dequeue to etx
                            while (dLen > 0)
                            {
                                rxFIFO.TryDequeue(out _trash);
                                dLen--;
                            }
                        }
                        else
                        {
                            //!< Dequeue to stx
                            byte[] _stx = new byte[2];
                            while (rxFIFO.Count >= 2)
                            {
                                rxFIFO.CopyTo(_stx, 0);
                                if (_stx[0] == 0x02 && _stx[1] == 0xFD)
                                {
                                    break;
                                }
                                rxFIFO.TryDequeue(out _trash);
                                rxFIFO.TryDequeue(out _trash);
                            }
                        }
                    }
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex.StackTrace);
                    //MessageBox.Show(ex.StackTrace);
                }
                finally
                {
                    waitCmdBusy.ReleaseMutex();
                }
            }
        }