| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934 | 
using System;using System.Collections.Generic;using System.Text;using System.Net;using System.Net.Sockets;using System.IO;using System.Threading;using System.Runtime.Serialization.Formatters.Binary;using System.Runtime.InteropServices;using System.Reflection;using System.Diagnostics;namespace FPER {  public enum default_value_define : byte {    prt_header_id = 0x02,    size_PRTReceiver_Type1 = 0x08,    size_PRTReceiver_Type2 = 0x09,    size_PRTReceiver_Type3 = 0x0A,    size_PRTReceiver_Type4 = 0x0B,    size_PRTReceiver_Type5 = 0x0C,    size_PRTReceiver_Type6 = 0x0D  }  public enum CMD_define : byte {    say_hello = 0x01,    resd_tbd_state = 0x05,    write_tbd_state = 0x06,    search_repeater_all = 0x12,    read_repeater_all = 0x14,    write_repeater_output_unit = 0x15,    read_repeater_info_all = 0x18,    write_repeater_info_unit = 0x19,    reset_repeater_unit = 0x1B,    reset_repeater_all = 0x1C,    write_repeater_input_unit = 0x1D  }  public enum RES_define : byte {    general_ack = 0x81,    general_nack = 0x80,    say_hello = 0x81,    resd_tbd_state = 0x85,    write_tbd_state = 0x86,    search_repeater_all = general_ack,    read_repeater_all = 0x94,    write_repeater_output_unit = 0x95,    read_repeater_info_all = 0x98,    write_repeater_info_unit = 0x99,    reset_repeater_unit = general_ack,    reset_repeater_all = general_ack,    write_repeater_input_unit = 0x1D  }  [StructLayout(LayoutKind.Sequential, Pack = 1)]   public struct PRTReceiver_Type1 {    public byte head;    public byte RPT_loop;    public byte TBD_ID;    public byte length;    public byte cmd;    public byte IVK_ID;    public byte RCVR_ID;    public byte TBD_loop;    public byte cs;  }  [StructLayout(LayoutKind.Sequential, Pack = 1)]   public struct PRTReceiver_Type2 {    public byte head;    public byte RPT_loop;    public byte TBD_ID;    public byte length;    public byte cmd;    public byte IVK_ID;    public byte RCVR_ID;    public byte TBD_loop;    public byte Option1;    public byte cs;  }  [StructLayout(LayoutKind.Sequential, Pack = 1)]   public struct PRTReceiver_Type3 {    public byte head;    public byte RPT_loop;    public byte TBD_ID;    public byte length;    public byte cmd;    public byte IVK_ID;    public byte RCVR_ID;    public byte TBD_loop;    public byte Option1;    public byte Option2;    public byte cs;  }  [StructLayout(LayoutKind.Sequential, Pack = 1)]   public struct PRTReceiver_Type4 {    public byte head;    public byte RPT_loop;    public byte TBD_ID;    public byte length;    public byte cmd;    public byte IVK_ID;    public byte RCVR_ID;    public byte TBD_loop;    public byte Option1;    public byte Option2;    public byte Option3;    public byte cs;  }  [StructLayout(LayoutKind.Sequential, Pack = 1)]   public struct PRTReceiver_Type5 {    public byte head;    public byte RPT_loop;    public byte TBD_ID;    public byte length;    public byte cmd;    public byte IVK_ID;    public byte RCVR_ID;    public byte TBD_loop;    public byte Option1;    public byte Option2;    public byte Option3;    public byte Option4;    public byte cs;  }  [StructLayout(LayoutKind.Sequential, Pack = 1)]   public struct PRTReceiver_Type6 {    public byte head;    public byte RPT_loop;    public byte TBD_ID;    public byte length;    public byte cmd;    public byte IVK_ID;    public byte RCVR_ID;    public byte TBD_loop;    public byte Option1;    public byte Option2;    public byte Option3;    public byte Option4;    public byte Option5;    public byte cs;  }  [StructLayout(LayoutKind.Sequential, Pack = 1)]   public struct Receiver {    public byte head;    public byte cmdID;    public byte Reserved_1;    public byte length;    public byte cmd;    public byte option1;    public byte option2;    public byte option3;    public byte option4;    public byte cs;  }    public class RCVData_ACK {    // base data //    public int TBD_ID = 0;    public int TBD_loop = 1;    public int repeater_loop = 0;    public int repeater_ID = 0;    public int ReceiverID = 0;      //수신기ID    public int InvorkNo = 0;        //명령ID        public void Set_Data(byte[] buffer) {      this.TBD_ID = buffer[2];      this.TBD_loop = buffer[7];      this.repeater_loop = buffer[1];      this.InvorkNo = buffer[5];      this.ReceiverID = buffer[6];       //insert data    }  }  public class RCVData_NACK {    // base data //    public int TBD_ID = 0;    public int TBD_loop = 1;    public int repeater_loop = 0;    public int repeater_ID = 0;    public int ReceiverID = 0;      //수신기ID    public int InvorkNo = 0;        //명령ID      public void Set_Data(byte[] buffer) {      this.TBD_ID = buffer[2];      this.TBD_loop = buffer[7];      this.repeater_loop = buffer[1];      this.InvorkNo = buffer[5];      this.ReceiverID = buffer[6];       //insert data    }  }  public class RCVData_ReadTBoardStatus {    // base data //    public int TBD_ID = 0;    public int TBD_loop = 1;    public int repeater_loop = 0;    public int repeater_ID = 0;    public int ReceiverID = 0;      //수신기ID    public int InvorkNo = 0;        //명령ID    public int TBD_MainVersion;    public int TBD_SubVersion;    public int RCV_BaudRate;    public int TBD_Loop1_BaudRate;    public int TBD_Loop2_BaudRate;    public int TBD_Term;    public int TBD_24Voltage;    public int TBD_5Voltage;    public int TBD_33Voltage;    public int TBD_Cut;        public void Set_Data(byte[] buffer) {      this.TBD_ID = buffer[2];      this.TBD_loop = buffer[7];      this.repeater_loop = buffer[1];      this.InvorkNo = buffer[5];      this.ReceiverID = buffer[6];       //insert data    }  }  public class RCVData_WriteTBoardStatus {    // base data //    public int TBD_ID = 0;    public int TBD_loop = 1;    public int repeater_loop = 0;    public int repeater_ID = 0;    public int ReceiverID = 0;      //수신기ID    public int InvorkNo = 0;        //명령ID      public void Set_Data(byte[] buffer) {      this.TBD_ID = buffer[2];      this.TBD_loop = buffer[7];      this.repeater_loop = buffer[1];      this.InvorkNo = buffer[5];      this.ReceiverID = buffer[6];       //insert data    }  }      public class RCVData_ReadRepeaterPoint_unit {    // repeater id//    public int repeater_ID = 0;    // repeater state //    public int Err = 0;    //에러상태    public int Non = 0;   //존재하지 않는 중계기    public int R0 = 0;     //Reserved    public int R1 = 0;     //Reserved    public int R2 = 0;     //Reserved    public int R = 0;      //중계기 복구 명령 0-완료,1-완료안함    public int W = 0;      //출력쓰기 완료 0-완료,1-완료안함    public int S = 0;      //Search Complete 0-완료,1-완료안함    // repeater input //    public int repeater_state_1 = 0;      //0-감지,1-정상,3-단선    public int repeater_state_2 = 0;     //0-감지,1-정상,3-단선    public int repeater_state_3 = 0;     //0-감지,1-정상,3-단선    public int repeater_state_4 = 0;     //0-감지,1-정상,3-단선    //repeater output //    public int repeater_output_4_C = 0;        //출력확인 0-완료,1-완료안함    public int repeater_output_3_C = 0;        //출력확인 0-완료,1-완료안함    public int repeater_output_2_C = 0;        //출력확인 0-완료,1-완료안함    public int repeater_output_1_C = 0;        //출력확인 0-완료,1-완료안함    public int repeater_output_4_W = 0;        //출력쓰기    public int repeater_output_3_W = 0;        //출력쓰기    public int repeater_output_2_W = 0;        //출력쓰기    public int repeater_output_1_W = 0;        //출력쓰기      //public int repeater_state_1 { get { return this.repeater_state_1; } }        public void Set_Data(byte repeater_ID,byte state,byte input,byte output) {      this.repeater_ID = repeater_ID;      set_state_data(state);      set_input_data(input);      set_output_data(output);    }    public void set_state_data(byte in_data){      Err = (in_data >> 7) & 0x01;      Non = (in_data >> 6) & 0x01;      R0  = (in_data >> 5) & 0x01;      R1  = (in_data >> 4) & 0x01;      R2  = (in_data >> 3) & 0x01;      R   = (in_data >> 2) & 0x01;      W   = (in_data >> 1) & 0x01;      S   = (in_data >> 0) & 0x01;    }    public void set_input_data(byte in_data){      repeater_state_4 = (in_data >> 6) & 0x03;      repeater_state_3 = (in_data >> 4) & 0x03;      repeater_state_2 = (in_data >> 2) & 0x03;      repeater_state_1 = (in_data >> 0) & 0x03;          }    public void set_output_data(byte in_data){      repeater_output_4_C = (in_data >> 7) & 0x01;      repeater_output_3_C = (in_data >> 6) & 0x01;      repeater_output_2_C = (in_data >> 5) & 0x01;      repeater_output_1_C = (in_data >> 4) & 0x01;      repeater_output_4_W = (in_data >> 3) & 0x01;      repeater_output_3_W = (in_data >> 2) & 0x01;      repeater_output_2_W = (in_data >> 1) & 0x01;      repeater_output_1_W = (in_data >> 0) & 0x01;    }  }    public class RCVData_ReadRepeaterPointAll {    // repeater id // -> bd no , loop no , repeater id.    public int TBD_ID = 0;    public int TBD_loop = 1;    public int repeater_loop = 0;    public int ReceiverID = 0;      //수신기ID    public int InvorkNo = 0;        //명령ID    public RCVData_ReadRepeaterPoint_unit[] data = new RCVData_ReadRepeaterPoint_unit[127];        public void Set_Data(byte[] buffer) {      this.TBD_ID = buffer[2];      this.TBD_loop = buffer[9];      this.repeater_loop = buffer[1];      this.InvorkNo = buffer[7];      this.ReceiverID = buffer[8];      for(int i=0; i<127; i++) {        //          data[i] = new RCVData_ReadRepeaterPoint_unit();          data[i].Set_Data((byte)(i + 1), buffer[3 * i + 10], buffer[3 * i + 11], buffer[3 * i + 12]);                }    }  }  public class RCVData_WriteRepeaterOutputUNIT {    // base data //    public int TBD_ID = 0;    public int TBD_loop = 1;    public int repeater_loop = 0;    public int repeater_ID = 0;    public int ReceiverID = 0;      //수신기ID    public int InvorkNo = 0;        //명령ID        public RCVData_ReadRepeaterPoint_unit data = new RCVData_ReadRepeaterPoint_unit();      public void Set_Data(byte[] buffer) {      this.TBD_ID = buffer[2];      this.TBD_loop = buffer[7];      this.repeater_loop = buffer[1];      this.InvorkNo = buffer[5];      this.ReceiverID = buffer[6];      this.data.Set_Data(buffer[8], buffer[9],  buffer[10],  buffer[11]);    }  }    public class RCVData_ReadRepeaterInfo_unit {    // repeater id//    public int repeater_ID = 0;    // repeater info //    public int B = 0;    public int Rserved1 = 0;    public int Rserved2 = 0;    public int Rserved3 = 0;    public int Info = 0;        public void Set_Data(byte repeater_ID,byte InfoData) {      this.repeater_ID = repeater_ID;      this.set_infodata(InfoData);    }    void set_infodata(byte InfoData) {      this.B        = (InfoData >> 7) & 0x01;      this.Rserved1 = (InfoData >> 6) & 0x01;      this.Rserved2 = (InfoData >> 5) & 0x01;      this.Rserved3 = (InfoData >> 4) & 0x01;      int tmp_data  = (InfoData >> 0) & 0x0f;      switch(tmp_data) {        case 0x00: {          this.Info = 0;          break;        }        case 0x01: {          this.Info = 1;          break;        }        case 0x02: {          this.Info = 2;          break;        }        case 0x04: {          this.Info = 3;          break;        }        case 0x05: {          this.Info = 4;          break;        }        default : {          this.Info = -1;          break;        }      }    }  }    //중계기 회로 데이터--  public class RCVData_ReadRepeaterInfoAll {    // base data //    public int TBD_ID = 0;    public int TBD_loop = 1;    public int repeater_loop = 0;    public int repeater_ID = 0;    public int ReceiverID = 0;      //수신기ID    public int InvorkNo = 0;        //명령ID    public RCVData_ReadRepeaterInfo_unit[] data = new RCVData_ReadRepeaterInfo_unit[127];        public void Set_Data(byte[] buffer) {      this.TBD_ID = buffer[2];      this.TBD_loop = buffer[7];      this.repeater_loop = buffer[1];      this.InvorkNo = buffer[5];      this.ReceiverID = buffer[6];      for(int i=0; i<128; i++) {        this.data[i].Set_Data((byte)(i+1), buffer[i+8]);      }    }  }  public class RCVData_WriteRepeaterInfoUNIT {    // base data //    public int TBD_ID = 0;    public int TBD_loop = 1;    public int repeater_loop = 0;    public int repeater_ID = 0;    public int ReceiverID = 0;      //수신기ID    public int InvorkNo = 0;        //명령ID      public RCVData_ReadRepeaterInfo_unit data = new RCVData_ReadRepeaterInfo_unit();      public void Set_Data(byte[] buffer) {      this.TBD_ID = buffer[2];      this.TBD_loop = buffer[7];      this.repeater_loop = buffer[1];      this.InvorkNo = buffer[5];      this.ReceiverID = buffer[6];            this.data.Set_Data(buffer[8], buffer[9]);    }  }  public class RCVData_WriteRepeaterInputUNIT {    // base data //    public int TBD_ID = 0;    public int TBD_loop = 1;    public int repeater_loop = 0;    public int repeater_ID = 0;    public int ReceiverID = 0;      //수신기ID    public int InvorkNo = 0;        //명령ID          public RCVData_ReadRepeaterPoint_unit data = new RCVData_ReadRepeaterPoint_unit();    public void Set_Data(byte[] buffer) {      this.TBD_ID = buffer[2];      this.TBD_loop = buffer[7];      this.repeater_loop = buffer[1];      this.InvorkNo = buffer[5];      this.ReceiverID = buffer[6];      this.data.Set_Data(buffer[8], buffer[9],  buffer[10],  buffer[11]);    }  }    public class Tprotocol {    private MDIParent main;    private TcpClient cmd_tcpclient;    private TcpClient event_tcpclient;        private String DestIP;    private int commandPort;    private int eventPort;    private Thread cmd_hn_th;    private int cmd_hn_th_state = 0;        private Thread cmd_rcv_th;    private int cmd_rcv_th_state = 0;    //private Socket sc;    private NetworkStream cmd_sendStm, cmd_recvStm;    private NetworkStream event_sendStm, event_recvStm;        private Thread event_rcv_th;    private int event_rcv_th_state;        private Paket pkt;    private int cmd_state = 0; // 0 : init , cmd don't exist , 1: cmd exist, before send , 2 : cmd  exist , after sned , before rcv , 3: cmd exist , after rcv , -1 : cmd exit, after send , rcv time out  error , -2 : unknown cmd, -3: unknown rcv        [DllImport("kernel32.dll")]    static extern void OutputDebugString(string message);    public void DoPrintDBGMSG(string str) {      str = "[FPER]" + System.DateTime.Now.ToString("[hh:mm:ss]") + ":" + str;      OutputDebugString(str);    }    public void OpenDBGMSG(string str) {      DoPrintDBGMSG("+" + str);    }    public void CloseDBGMSG(string str) {      DoPrintDBGMSG("-" + str);    }    public Tprotocol(MDIParent main) {      this.main = main;      this.pkt = new Paket();    }    public int ConnectToDemon(String Dest_ip, int commandPort , int eventPort ,int Demon_ID) {      // start rcv thread      // send connect cmd      // check connect cmd' response      // return result      try {        this.DestIP = Dest_ip;        this.commandPort = commandPort;        this.eventPort = eventPort;        this.cmd_tcpclient = new TcpClient();        this.event_tcpclient = new TcpClient();                this.Start_Connection();      }      catch(Exception ex) {          throw ex;      }         return this.cmd_tcpclient.Connected ? 1:0;    }    public int DisconnectToDemon(int Own_ID, int Demon_ID) {      // send disconnect cmd      // check disconneect cmd' response      // stop rcv thread      // return result      Stop_Connection();      return 0;    }    public void SayHello_To_Board(byte loop, byte TBD_ID ,byte IVK_ID,byte RCV_ID,byte TBD_loop) {      byte[] bt;      bt = pkt.CreatePKT_SayHello_To_Board(loop, TBD_ID, IVK_ID, RCV_ID, TBD_loop);      DoPrintDBGMSG(ToHex(bt));      Cmd_Send(bt,(int)bt[3] +1);    }     public void ReadBoardStatus(byte loop, byte TBD_ID ,byte IVK_ID,byte RCV_ID,byte TBD_loop) {      byte[] bt;      bt = pkt.CreatePKT_ReadBoardStatus(loop, TBD_ID, IVK_ID, RCV_ID, TBD_loop);      DoPrintDBGMSG(ToHex(bt));      Cmd_Send(bt,(int)bt[3] +1);    }     public void WriteBoardStatus(byte loop, byte TBD_ID ,byte IVK_ID,byte RCV_ID,byte TBD_loop,byte RT_BaudRate,byte loop1_BaudRate,byte loop2_BaudRate,byte RT_Term, byte BD_Reset) {      byte[] bt;      bt = pkt.CreatePKT_WriteBoardStatus(loop, TBD_ID ,IVK_ID,RCV_ID, TBD_loop,RT_BaudRate,loop1_BaudRate,loop2_BaudRate,RT_Term, BD_Reset);      DoPrintDBGMSG(ToHex(bt));      Cmd_Send(bt,(int)bt[3] +1);    }     public void SearchRepeaterAll(byte loop, byte TBD_ID ,byte IVK_ID,byte RCV_ID,byte TBD_loop) {      byte[] bt;      bt = pkt.CreatePKT_SearchRepeaterAll(loop, TBD_ID, IVK_ID, RCV_ID, TBD_loop);      DoPrintDBGMSG(ToHex(bt));      Cmd_Send(bt,(int)bt[3] +1);    }       //중계기 정보읽기    public void ReadRepeaterPointAll(byte loop, byte TBD_ID ,byte IVK_ID,byte RCV_ID,byte TBD_loop) {      byte[] bt;      bt = pkt.CreatePKT_ReadRepeaterPointAll(loop, TBD_ID, IVK_ID, RCV_ID, TBD_loop);      DoPrintDBGMSG(ToHex(bt));      Cmd_Send(bt,(int)bt[3] +1);    }     public void WriteRepeaterOutputUNIT(byte loop, byte TBD_ID ,byte IVK_ID,byte RCV_ID,byte TBD_loop,byte Repeater_ID,byte Repeater_Out_Value) {      byte[] bt;      bt = pkt.CreatePKT_WriteRepeaterOutputUNIT(loop, TBD_ID, IVK_ID, RCV_ID, TBD_loop, Repeater_ID, Repeater_Out_Value);      DoPrintDBGMSG(ToHex(bt));      Cmd_Send(bt,(int)bt[3] +1);    }     public void ReadRepeaterInfoAll(byte loop, byte TBD_ID ,byte IVK_ID,byte RCV_ID,byte TBD_loop) {      byte[] bt;      bt = pkt.CreatePKT_ReadRepeaterInfoAll(loop, TBD_ID, IVK_ID, RCV_ID, TBD_loop);      DoPrintDBGMSG(ToHex(bt));      Cmd_Send(bt,(int)bt[3] +1);    }     public void WriteRepeaterInfoUNIT(byte loop, byte TBD_ID ,byte IVK_ID,byte RCV_ID,byte TBD_loop,byte Repeater_ID,byte Repeater_Out_Value) {      byte[] bt;      bt = pkt.CreatePKT_WriteRepeaterInfoUNIT(loop, TBD_ID, IVK_ID, RCV_ID, TBD_loop, Repeater_ID, Repeater_Out_Value);      DoPrintDBGMSG(ToHex(bt));      Cmd_Send(bt,(int)bt[3] +1);    }        public void ResetRepeaterUNIT(byte loop, byte TBD_ID ,byte IVK_ID,byte RCV_ID,byte TBD_loop,byte Repeater_ID) {      byte[] bt;      bt = pkt.CreatePKT_ResetRepeaterUNIT(loop, TBD_ID, IVK_ID, RCV_ID, TBD_loop, Repeater_ID);      DoPrintDBGMSG(ToHex(bt));      Cmd_Send(bt,(int)bt[3] +1);    }     public void ResetRepeaterAll(byte loop, byte TBD_ID ,byte IVK_ID,byte RCV_ID,byte TBD_loop) {      byte[] bt;      bt = pkt.CreatePKT_ResetRepeaterAll(loop, TBD_ID, IVK_ID, RCV_ID, TBD_loop);      DoPrintDBGMSG(ToHex(bt));      Cmd_Send(bt,(int)bt[3] +1);    }     public void WriteRepeaterInputUNIT(byte loop, byte TBD_ID ,byte IVK_ID,byte RCV_ID,byte TBD_loop,byte Repeater_ID,byte Repeater_Out_Value) {      byte[] bt;      bt = pkt.CreatePKT_WriteRepeaterInputUNIT(loop, TBD_ID, IVK_ID, RCV_ID, TBD_loop, Repeater_ID, Repeater_Out_Value);      DoPrintDBGMSG(ToHex(bt));      Cmd_Send(bt,(int)bt[3] +1);    }        private CmdInfo cmd;//    private int TimeOut = 3000;//    private int cmd_send_time = 0;//    private bool simulation_mode = false;    // ----------------------- 명령을 받는함수 -----------------------    public void getCommand(CmdInfo cmd) {        try        {            //      byte[] bt;            if (cmd_tcpclient != null)            {                //if (cmd_tcpclient.Connected)                //{                    //this.TimeOut = cmd.TimeOut;                    //          cmd_send_time = Environment.TickCount & Int32.MaxValue;                    switch (cmd.Command)                    {//#if (false)//            case CMD_define.read_repeater_all : {//              this.cmd = cmd;//              ReadRepeaterPointAll((byte)cmd.loopNo,(byte)cmd.boardNo,(byte)cmd.invorkNo,(byte)cmd.receiverID);//              if(simulation_mode) {//                //결과값 리턴----------------시작//                byte[] bt = new byte [1024];//                for(int i=0; i<1024 ; i++) {//                  bt[i] = (byte)i;//                }//                this.cmd.ResponseData = bt;//                main.ui.getResponse(this.cmd);//                //결과값 리턴----------------끝//              }//              break;//            }//#endif                        case CMD_define.say_hello:                            {                                this.cmd = cmd;                                SayHello_To_Board((byte)cmd.loopNo, (byte)cmd.boardNo, (byte)cmd.invorkNo, (byte)cmd.receiverID, 0x01);                                break;                            }                        case CMD_define.resd_tbd_state:                            {                                this.cmd = cmd;                                ReadBoardStatus((byte)cmd.loopNo, (byte)cmd.boardNo, (byte)cmd.invorkNo, (byte)cmd.receiverID, 0x01);                                break;                            }                        case CMD_define.write_tbd_state:                            {                                this.cmd = cmd;                                WriteBoardStatus((byte)cmd.loopNo, (byte)cmd.boardNo, (byte)cmd.invorkNo, (byte)cmd.receiverID, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00);                                break;                            }                        case CMD_define.search_repeater_all:                            {                                this.cmd = cmd;                                SearchRepeaterAll((byte)cmd.loopNo, (byte)cmd.boardNo, (byte)cmd.invorkNo, (byte)cmd.receiverID, 0x01);                                break;                            }                        case CMD_define.read_repeater_all:                            {                                this.cmd = cmd;                                ReadRepeaterPointAll((byte)cmd.loopNo, (byte)cmd.boardNo, (byte)cmd.invorkNo, (byte)cmd.receiverID, 0x01);                                ////강제로 0으로 셋팅----------------------------------------                                //byte[] cmdbuffer = new byte[1200];                                //for (int i = 0; i < 9; i++) //설정                                //{                                //    cmdbuffer[i] = 0x03;                                //}                                //for (int i = 0; i < 127; i++)                                //{                                //    cmdbuffer[(i * 3) + 9] = 0x00;   //상태                                //    cmdbuffer[(i * 3) + 10] = 0x03;  //입력                                //    cmdbuffer[(i * 3) + 11] = 0x14;  //출력                                //}                                                                //RCVData_ReadRepeaterPointAll ResponseData = new RCVData_ReadRepeaterPointAll();                                //ResponseData.Set_Data(cmdbuffer);                                //this.cmd.ResponseData = ResponseData;                                //main.ui.getResponse(this.cmd);                                break;                            }                        case CMD_define.write_repeater_output_unit:                            {                                this.cmd = cmd; //2010.3.24_moon                                WriteRepeaterOutputUNIT((byte)cmd.loopNo, (byte)cmd.boardNo, (byte)cmd.invorkNo, (byte)cmd.receiverID, 0x01, (byte)cmd.repeaterNo, 0x00);                                break;                            }                        case CMD_define.read_repeater_info_all:                            {                                this.cmd = cmd;                                ReadRepeaterInfoAll((byte)cmd.loopNo, (byte)cmd.boardNo, (byte)cmd.invorkNo, (byte)cmd.receiverID, 0x01);                                break;                            }                        case CMD_define.write_repeater_info_unit:                            {                                this.cmd = cmd;                                WriteRepeaterInfoUNIT((byte)cmd.loopNo, (byte)cmd.boardNo, (byte)cmd.invorkNo, (byte)cmd.receiverID, 0x01, (byte)cmd.repeaterNo, 0x00);                                break;                            }                        case CMD_define.reset_repeater_unit:                            {                                this.cmd = cmd;                                ResetRepeaterUNIT((byte)cmd.loopNo, (byte)cmd.boardNo, (byte)cmd.invorkNo, (byte)cmd.receiverID, 0x01, (byte)cmd.repeaterNo);                                break;                            }                        case CMD_define.reset_repeater_all:                            {                                this.cmd = cmd;                                ResetRepeaterAll((byte)cmd.loopNo, (byte)cmd.boardNo, (byte)cmd.invorkNo, (byte)cmd.receiverID, 0x01);                                break;                            }                        case CMD_define.write_repeater_input_unit:                            {                                this.cmd = cmd;                                WriteRepeaterInputUNIT((byte)cmd.loopNo, (byte)cmd.boardNo, (byte)cmd.invorkNo, (byte)cmd.receiverID, 0x01, (byte)cmd.repeaterNo, 0x00);                                break;                            }                        default:                            {                                break;                            }                    }                }            //}        }        catch(Exception ex)        {            throw ex;        }      //string str;      //str = ToHex(bt);      //DoPrintDBGMSG(str);      //Send(bt, 7);    }      // ----------------------- 명령을 받는함수 -----------------------        // ----------------------- 명현재 연결된 소켓수 -----------------------      public int TcpSockeCnt      {          get          {              int TcpCnt = 0;              //              if (this.cmd_tcpclient != null)              {                  if (this.cmd_tcpclient.Connected) ++TcpCnt;              }              if (this.event_tcpclient != null)              {                  if (this.event_tcpclient.Connected) ++TcpCnt;              }              return TcpCnt;          }      }      public Boolean cmd_Connected      {          get          {              Boolean TcpConnected = false;              try              {                  if (this.cmd_tcpclient != null) TcpConnected = this.cmd_tcpclient.Connected;              }              catch              {              }              return TcpConnected;          }      }      public Boolean event_Connected      {          get          {              Boolean TcpConnected = false;              try              {                  if (this.event_tcpclient != null) TcpConnected = this.event_tcpclient.Connected;              }              catch              {              }              return TcpConnected;          }      }    // ----------------------- 명현재 연결된 소켓수 -----------------------    public int SendDataToDemon(byte[] data , int size) {// don't using now. //2010.3.16_moon      //if conencted       // send msg      // check response      return 0;    }    public int SendDataToDemon(String strdata, int size) {// don't using now. //2010.3.16_moon      //if conencted       // send msg      // check response      return 0;    }    string ToHex(byte[] bin_data) {       string result = "";         foreach (byte ch in bin_data) {         result += string.Format("{0:x2} ", ch);      }      return result;     }    string ToHex(byte[] bin_data,int len) {       string result = "";       for(int i=0; i<len ; i++) {         result += string.Format("{0:x2} ", bin_data[i]);      }      return result;     }        IPEndPoint CommandEndPoint {      get {        return new IPEndPoint(IPAddress.Parse(this.DestIP), this.commandPort);      }    }    IPEndPoint EventEndPoint {      get {        return new IPEndPoint(IPAddress.Parse(this.DestIP), this.eventPort);      }    }    void Start_Connection() {      Start_Con_cmd();      Start_Con_event();#if (false)      try {        DoPrintDBGMSG("Start 1");        this.cmd_tcpclient.Connect(this.CommandEndPoint);        //this.sc = cmd_tcpclient.Client;        this.cmd_sendStm = new NetworkStream(this.cmd_tcpclient.Client);        this.cmd_recvStm = new NetworkStream(this.cmd_tcpclient.Client);        this.cmd_rcv_th = new Thread(this.Cmd_ReceiveThread);        this.cmd_rcv_th_state = 1;        this.cmd_rcv_th.Start();        DoPrintDBGMSG("Start 2");        this.event_tcpclient.Connect(this.EventEndPoint);        this.event_sendStm = new NetworkStream(this.event_tcpclient.Client);        this.event_recvStm = new NetworkStream(this.event_tcpclient.Client);        this.event_rcv_th = new Thread(this.Event_ReceiveThread);        this.event_rcv_th_state = 1;        this.event_rcv_th.Start();        DoPrintDBGMSG("Start 3");       }      catch {        //error      }#endif    }        void Start_Con_cmd() {        this.cmd_tcpclient.Connect(this.CommandEndPoint);        //this.sc = cmd_tcpclient.Client;        this.cmd_sendStm = new NetworkStream(this.cmd_tcpclient.Client);        this.cmd_recvStm = new NetworkStream(this.cmd_tcpclient.Client);        this.cmd_rcv_th = new Thread(this.Cmd_ReceiveThread);        this.cmd_rcv_th_state = 1;        this.cmd_rcv_th.Start();//        this.cmd_hn_th = new Thread(this.Cmd_HandlingThread);//        this.cmd_hn_th_state = 1;//        this.cmd_hn_th.Start();    }    void Start_Con_event() {      this.event_tcpclient.Connect(this.EventEndPoint);      this.event_sendStm = new NetworkStream(this.event_tcpclient.Client);      this.event_recvStm = new NetworkStream(this.event_tcpclient.Client);            this.event_rcv_th = new Thread(this.Event_ReceiveThread);      this.event_rcv_th_state = 1;      this.event_rcv_th.Start();      DoPrintDBGMSG("Start 3");    }     void Stop_Connection() {      Stop_Con_cmd();      Stop_Con_event();#if (false)      if(this.cmd_rcv_th_state == 1){        this.cmd_rcv_th.Abort();      }      if (this.cmd_tcpclient != null) {        this.cmd_tcpclient.Close();      }            if(this.event_rcv_th_state == 1){        this.event_rcv_th.Abort();      }      if (this.event_tcpclient != null) {        this.event_tcpclient.Close();      }#endif    }    void Stop_Con_cmd() {      if(this.cmd_hn_th_state == 1){        this.cmd_hn_th.Abort();      }      if(this.cmd_rcv_th_state == 1){        this.cmd_rcv_th.Abort();      }      if (this.cmd_tcpclient != null) {        this.cmd_tcpclient.Close();      }    }    void Stop_Con_event() {            if(this.event_rcv_th_state == 1){        this.event_rcv_th.Abort();      }      if (this.event_tcpclient != null) {        this.event_tcpclient.Close();      }    }    void Cmd_Send(byte[] bt, int size) { //2010.3.12_moon      if( this.cmd_tcpclient != null){        if(this.cmd_tcpclient.Connected) {          try {            this.cmd_sendStm.Write(bt, 0, size);            this.cmd_sendStm.Flush();          }          catch {            return;          }        }      }    }    void Cmd_HandlingThread() {      while(cmd_hn_th_state == 1) {        if(true) {          // cmd send          // rcv wait          // rcv data process            // if rcv data ok             // else if rcv data error -> retry          // or time out          this.cmd_state = 1; // result setting.//          DoPrintDBGMSG(this.cmd_state.ToString());          // send result to main.        }      }    }    void Cmd_ReceiveThread() {      byte[] ReadBuffer = new byte[1024];      int offset = 0;            while(this.cmd_rcv_th_state == 1) {        if(this.cmd_tcpclient.Connected) {          DoPrintDBGMSG("ReceiveThread");          for(int i=0; i<1024; i++) {            ReadBuffer[i] = 0x00;          }          offset = 0;                    try {            if(this.cmd_recvStm.CanRead) {              offset = this.cmd_recvStm.Read(ReadBuffer, 0, ReadBuffer.Length);              if(offset>0) {                DoPrintDBGMSG(ToHex(ReadBuffer,offset));                // rcv msg process                // if rcv msg ok -> send cmd handling thread                 // else if rcv msg short -> wait next msg                // else if rcv msg error -> sned error handling thread  ( header error , cs error,                 CMDReceiveMSGProc(ReadBuffer,offset);              }            }            this.cmd_recvStm.Flush();          }          catch (Exception e) {            //error            DoPrintDBGMSG("error : " + e.Message);          }        }        else {          // don't connected          break;        }      }      this.cmd_rcv_th_state = 0;    }    byte[] CMD_RcvBuffer = new byte [2048];    int CMD_RcvBufferPos = 0;    void CMDReceiveMSGProc(byte[] ReadBuffer, int size) {      DoPrintDBGMSG("ReceiveMSGProcess");            for(int i=0; i<2048 ; i++) {//init buffer        CMD_RcvBuffer[i] = 0x00;      }      CMD_RcvBufferPos = 0;            for(int i=0; i<size; i++) {//copy buffer        CMD_RcvBuffer[CMD_RcvBufferPos+i] = ReadBuffer[i];      }      CMD_RcvBufferPos += size;            int datasize = CMD_RcvBuffer[3];      CMDResponceProc(datasize);#if (false)      int current_time = Environment.TickCount & Int32.MaxValue;      if(false) {//      if(cmd_send_time + TimeOut > current_time) { //time out      DoPrintDBGMSG("ReceiveMSGProcess to ");        for(int i=0; i<2048 ; i++) {//init buffer          RcvBuffer[i] = 0x00;        }        RcvBufferPos = 0;      }      else {      DoPrintDBGMSG("ReceiveMSGProcess 2");        for(int i=0; i<size; i++) {//copy buffer          RcvBuffer[RcvBufferPos+i] = ReadBuffer[i];        }        RcvBufferPos += size;        if( RcvBuffer[0] != 0x02 ) { //header error              DoPrintDBGMSG("ReceiveMSGProcess 3 ");          for(int i=0; i<2048 ; i++) {//init buffer            RcvBuffer[i] = 0x00;          }          RcvBufferPos = 0;        }        else if(RcvBufferPos < 8) { // too short              DoPrintDBGMSG("ReceiveMSGProcess 4 ");          //wait next input        }        else {      DoPrintDBGMSG("ReceiveMSGProcess 5 ");          if(RcvBuffer[3] == 0x00) {// extend packet size                DoPrintDBGMSG("ReceiveMSGProcess 6 ");            byte[] bt_extendsize = new byte[2];            bt_extendsize[0] = RcvBuffer[5];            bt_extendsize[1] = RcvBuffer[6];            int extendsize = ( bt_extendsize[0]&0xff | (bt_extendsize [1] << 8)& 0xff00 ) & 0xffff;            if(RcvBufferPos < extendsize+1) {//need more data              //wait next input            }            else {              CMDResponceProcess(extendsize);            }          }          else if(RcvBuffer[3] > RcvBufferPos) {//need more data                DoPrintDBGMSG("ReceiveMSGProcess 7 ");          }          else {      DoPrintDBGMSG("ReceiveMSGProcess  8");            int datasize = RcvBuffer[3];            CMDResponceProcess(datasize);            switch(RcvBuffer[4]) {              case 0x94: {                break;              }              default : {                break;              }            }          }        }      }/*      switch(ReadBuffer[4]) {        case 0x94: {          //결과값 리턴----------------시작          byte[] bt = new byte [size];          for(int i=0; i<size ; i++) {            bt[i] = ReadBuffer[i];          }          this.cmd.ResponseData = bt;          main.ui.getResponse(this.cmd);          //결과값 리턴----------------끝          break;        }        default : {          break;        }      }*/#endif    }    void CMDResponceProc(int size) {      DoPrintDBGMSG ( " + CMDResponceProcess " );      byte[] cmdbuffer = new byte[size+1];      for(int i=0; i<size+1 ; i++) {//copy data        cmdbuffer[i] = CMD_RcvBuffer[i];      }      for(int i=0; i<2048; i++) {//rcv buffer compress        if(i<CMD_RcvBufferPos) {          CMD_RcvBuffer[i] = CMD_RcvBuffer[i+size+1];        }        else {          CMD_RcvBuffer[i] = 0x00;        }        CMD_RcvBufferPos -= size+1;      }      int ret = pkt.DoCheckcs(cmdbuffer , size, cmdbuffer[size]);      DoPrintDBGMSG ( "CMDResponceProcess cs = " + ret.ToString());      //check cs      if(ret == 1) {        //data setting        // send to ui#if (false)        res_data_header res_data = new res_data_header(cmdbuffer,size+1);        res_data.LoopNo = cmdbuffer[1];        res_data.BoardNo = cmdbuffer[2];        res_data.InvorkNo = cmdbuffer[7];        res_data.ReceiverID = cmdbuffer[8];        switch(cmdbuffer[4]) {          case (byte)RES_define.general_ack: {            break;          }          case (byte)RES_define.general_nack: {            break;          }          case (byte)RES_define.resd_tbd_state: {            break;          }          case (byte)RES_define.write_tbd_state: {            break;          }          case (byte)RES_define.read_repeater_all: {            res_data.data = new res_data_repeater[127];            for(int i=0; i<127; i++) {//              res_data.data[i].Set_Data(cmdbuffer[2],byte TBD_loop,cmdbuffer[1],byte repeater_ID,cmdbuffer[7],cmdbuffer[8],cmdbuffer[3*i+9],cmdbuffer[3*i+10],cmdbuffer[3*i+11]);            }            break;          }          case (byte)RES_define.write_repeater_output_unit: {            break;          }          case (byte)RES_define.read_repeater_info_all: {            break;          }          case (byte)RES_define.write_repeater_info_unit: {            break;          }          case (byte)RES_define.write_repeater_input_unit: {            break;          }          default : {            DoPrintDBGMSG ( " unKnown CMD " );            break;          }        }                this.cmd.ResponseData = res_data;#endif                switch(cmdbuffer[4]) {          case (byte)RES_define.general_ack: {            RCVData_ACK ResponseData = new RCVData_ACK();            ResponseData.Set_Data(cmdbuffer);            this.cmd.ResponseData = ResponseData;            break;          }          case (byte)RES_define.general_nack: {            RCVData_NACK ResponseData = new RCVData_NACK();            ResponseData.Set_Data(cmdbuffer);            this.cmd.ResponseData = ResponseData;            break;          }          case (byte)RES_define.resd_tbd_state: {            RCVData_ReadTBoardStatus ResponseData = new RCVData_ReadTBoardStatus();            ResponseData.Set_Data(cmdbuffer);            this.cmd.ResponseData = ResponseData;            break;          }          case (byte)RES_define.write_tbd_state: {            RCVData_WriteTBoardStatus ResponseData = new RCVData_WriteTBoardStatus();            ResponseData.Set_Data(cmdbuffer);            this.cmd.ResponseData = ResponseData;            break;          }          case (byte)RES_define.read_repeater_all: {            RCVData_ReadRepeaterPointAll ResponseData = new RCVData_ReadRepeaterPointAll();            ResponseData.Set_Data(cmdbuffer);            this.cmd.ResponseData = ResponseData;            break;          }          case (byte)RES_define.write_repeater_output_unit: {            RCVData_WriteRepeaterOutputUNIT ResponseData = new RCVData_WriteRepeaterOutputUNIT();            ResponseData.Set_Data(cmdbuffer);            this.cmd.ResponseData = ResponseData;            break;          }          case (byte)RES_define.read_repeater_info_all: {            RCVData_ReadRepeaterInfoAll ResponseData = new RCVData_ReadRepeaterInfoAll();            ResponseData.Set_Data(cmdbuffer);            this.cmd.ResponseData = ResponseData;            break;          }          case (byte)RES_define.write_repeater_info_unit: {            RCVData_WriteRepeaterInfoUNIT ResponseData = new RCVData_WriteRepeaterInfoUNIT();            ResponseData.Set_Data(cmdbuffer);            this.cmd.ResponseData = ResponseData;            break;          }          case (byte)RES_define.write_repeater_input_unit: {            RCVData_WriteRepeaterInputUNIT ResponseData = new RCVData_WriteRepeaterInputUNIT();            ResponseData.Set_Data(cmdbuffer);            this.cmd.ResponseData = ResponseData;            break;          }          default : {            DoPrintDBGMSG ( " unKnown CMD " );            break;          }        }        this.main.ui.getResponse(cmd);      }      DoPrintDBGMSG ( " - CMDResponceProcess " );    }    public class res_data_repeater {      // repeater id // -> bd no , loop no , repeater id.      public int TBD_ID = 0;      public int TBD_loop = 1;      public int repeater_loop = 0;      public int repeater_ID = 0;      public int ReceiverID = 0;      //수신기ID      public int InvorkNo = 0;        //명령ID      // repeater state //      public int Err = 0;      public int Non = 0;      public int R0 = 0;      public int R1 = 0;      public int R2 = 0;      public int R = 0;      public int W = 0;      public int S = 0;      // repeater input //      public int repeater_state_1 = 0;      public int repeater_state_2 = 0;      public int repeater_state_3 = 0;      public int repeater_state_4 = 0;      //repeater output //      public int repeater_output_4_C = 0;      public int repeater_output_3_C = 0;      public int repeater_output_2_C = 0;      public int repeater_output_1_C = 0;      public int repeater_output_4_W = 0;      public int repeater_output_3_W = 0;      public int repeater_output_2_W = 0;      public int repeater_output_1_W = 0;      public void Set_Data(byte TBD_ID,byte TBD_loop,byte repeater_loop,byte repeater_ID,byte InvorkNo,byte ReceiverID,byte state,byte input,byte output) {        this.TBD_ID = TBD_ID;        this.TBD_loop = TBD_loop;        this.repeater_loop = repeater_loop;        this.repeater_ID = repeater_ID;        this.InvorkNo = InvorkNo;        this.ReceiverID = ReceiverID;        set_state_data(state);        set_input_data(input);        set_output_data(output);      }      public void set_state_data(byte in_data){        Err = (in_data >> 7) & 0x01;        Non = (in_data >> 6) & 0x01;        R0  = (in_data >> 5) & 0x01;        R1  = (in_data >> 4) & 0x01;        R2  = (in_data >> 3) & 0x01;        R   = (in_data >> 2) & 0x01;        W   = (in_data >> 1) & 0x01;        S   = (in_data >> 0) & 0x01;      }      public void set_input_data(byte in_data){        repeater_state_4 = (in_data >> 6) & 0x03;        repeater_state_3 = (in_data >> 4) & 0x03;        repeater_state_2 = (in_data >> 2) & 0x03;        repeater_state_1 = (in_data >> 0) & 0x03;              }      public void set_output_data(byte in_data){        repeater_output_4_C = (in_data >> 7) & 0x01;        repeater_output_3_C = (in_data >> 6) & 0x01;        repeater_output_2_C = (in_data >> 5) & 0x01;        repeater_output_1_C = (in_data >> 4) & 0x01;        repeater_output_4_W = (in_data >> 3) & 0x01;        repeater_output_3_W = (in_data >> 2) & 0x01;        repeater_output_2_W = (in_data >> 1) & 0x01;        repeater_output_1_W = (in_data >> 0) & 0x01;      }    }        public class res_data_header {      public CMD_define cmd_define;      public int ReceiverID = 0;      //수신기ID      public int LoopNo = 0;          //LoopNo      public int BoardNo = 0;         //BoardNo      public int RepeaterNo = 0;      //중계기No      public int InvorkNo = 0;        //명령ID      public res_data_repeater[] data;      public int[] temp_data = new int[1024];      public res_data_header(byte[] RcvData, int size) {      }    }    void Event_Send(byte[] bt, int size) {  //2010.3.17_moon //don't using      if( this.event_tcpclient != null){        if(this.event_tcpclient.Connected) {          try {            this.event_sendStm.Write(bt, 0, size);            this.event_sendStm.Flush();          }          catch {            return;          }        }      }    }    void Event_ReceiveThread() {      byte[] ReadBuffer = new byte[1024];      int offset = 0;            while(this.event_rcv_th_state == 1) {        if(this.event_tcpclient.Connected) {//          DoPrintDBGMSG("Event_ReceiveThread");          try {            if(this.event_recvStm.CanRead) {              for(int i=0; i<1024; i++) {                ReadBuffer[i] = 0x00;              }              offset = this.event_recvStm.Read(ReadBuffer, 0, ReadBuffer.Length);                            if(offset>0) {                string str;                str = ToHex(ReadBuffer,offset);//                DoPrintDBGMSG("size : " + offset.ToString() + "//" +str);//                DoPrintDBGMSG(string.Format("{0:x2} ", ReadBuffer[offset-1]));                //Thread.Sleep(1000);                EVENTReceiveMSGFunc(ReadBuffer,offset);              }            }            this.event_recvStm.Flush();            // call main func -> case by case          }          catch (Exception e) {            //error            DoPrintDBGMSG(e.Message);          }        }        else {          break;        }      }      this.event_rcv_th_state = 0;    }    byte[] EVENT_RcvBuffer = new byte [1024*3];    int EVENT_RcvBufferPos = 0;    void EVENTReceiveMSGFunc(byte[] ReadBuffer, int size) {      DoPrintDBGMSG("+ EVENTReceiveMSGProc");      if((EVENT_RcvBufferPos <0)&&(EVENT_RcvBufferPos >2048)) {        DoPrintDBGMSG("///////////////////ERROR////////////////");        for(int i=0; i<2048 ; i++) {//init buffer          EVENT_RcvBuffer[i] = 0x00;        }        EVENT_RcvBufferPos = 0;      }            DoPrintDBGMSG("EVENTReceiveMSGProc EVENT_RcvBufferPos = "+ EVENT_RcvBufferPos.ToString());      DoPrintDBGMSG("EVENTReceiveMSGProc size = "+ size.ToString());      for(int i=0; i<size; i++) {//copy buffer        EVENT_RcvBuffer[EVENT_RcvBufferPos+i] = ReadBuffer[i];      }      EVENT_RcvBufferPos += size;      DoPrintDBGMSG("EVENTReceiveMSGProc EVENT_RcvBufferPos = "+ EVENT_RcvBufferPos.ToString());      while(EVENT_RcvBufferPos >7) {        DoPrintDBGMSG("EVENTReceiveMSGProc:1 ");        if(EVENT_RcvBuffer[0] == 0x02) {            if(EVENT_RcvBuffer[3] == 0x00) {//extend size              int extendsize = ( EVENT_RcvBuffer[5]&0xff | (EVENT_RcvBuffer[6] << 8)& 0xff00 ) & 0xffff;              DoPrintDBGMSG("EVENTReceiveMSGProc:2 " + extendsize.ToString());              if(extendsize +1 > EVENT_RcvBufferPos) {//short , next                DoPrintDBGMSG("EVENTReceiveMSGProc:3 ");                break;              }              else {//processing                DoPrintDBGMSG("EVENTReceiveMSGProc:4 ");                EVENTCallFunc(extendsize);              }            }            else if(EVENT_RcvBuffer[3]+1 > EVENT_RcvBufferPos) {//short , next                            DoPrintDBGMSG("EVENTReceiveMSGProc:5 ");              break;            }            else {//processing              DoPrintDBGMSG("EVENTReceiveMSGProc:6 " + EVENT_RcvBuffer[3].ToString());              EVENTCallFunc(EVENT_RcvBuffer[3]);            }        }        else { // header error          DoPrintDBGMSG("EVENTReceiveMSGProc:7 ");          for(int i=0; i<1024*3 ; i++) {//init buffer            EVENT_RcvBuffer[i] = 0x00;          }          EVENT_RcvBufferPos = 0;          break;        }//        int datasize = EVENT_RcvBuffer[3];//        EVENTCallFunc(datasize);      }//      Thread.Sleep(1000);      DoPrintDBGMSG("- EVENTReceiveMSGProc");    }    void EVENTCallFunc(int size) {      DoPrintDBGMSG ( " + EVENTCallFunc " );      byte[] cmdbuffer = new byte[size+1];      for(int i=0; i<size+1 ; i++) {//copy data        cmdbuffer[i] = EVENT_RcvBuffer[i];      }      for(int i=0; i<1024*3; i++) {//rcv buffer compress        if(i<size+1) {          EVENT_RcvBuffer[i] = EVENT_RcvBuffer[i+size+1];        }        else {          EVENT_RcvBuffer[i] = 0x00;        }      }      EVENT_RcvBufferPos -= size+1;      int ret = pkt.DoCheckcs(cmdbuffer , size, cmdbuffer[size]);      DoPrintDBGMSG ( "EVENTCallFunc cs = " + ret.ToString());      //check cs      //if(false) {        //data setting        // send to ui        switch(cmdbuffer[4]) {          case (byte)RES_define.general_ack: {            RCVData_ACK ResponseData = new RCVData_ACK();            ResponseData.Set_Data(cmdbuffer);            this.cmd.ResponseData = ResponseData;            break;          }          case (byte)RES_define.general_nack: {            RCVData_NACK ResponseData = new RCVData_NACK();            ResponseData.Set_Data(cmdbuffer);            this.cmd.ResponseData = ResponseData;            break;          }          case (byte)RES_define.resd_tbd_state: {            RCVData_ReadTBoardStatus ResponseData = new RCVData_ReadTBoardStatus();            ResponseData.Set_Data(cmdbuffer);            this.cmd.ResponseData = ResponseData;            break;          }          case (byte)RES_define.write_tbd_state: {            RCVData_WriteTBoardStatus ResponseData = new RCVData_WriteTBoardStatus();            ResponseData.Set_Data(cmdbuffer);            this.cmd.ResponseData = ResponseData;            break;          }          case (byte)RES_define.read_repeater_all: {            RCVData_ReadRepeaterPointAll ResponseData = new RCVData_ReadRepeaterPointAll();            ResponseData.Set_Data(cmdbuffer);            int LoopNo = 0;            int BoardNo = 0;            this.cmd = new CmdInfo(CMD_define.read_repeater_all, this.main.ui.MyReceiverID, 1, LoopNo, BoardNo, null);            this.cmd.ResponseData = ResponseData;            break;          }          case (byte)RES_define.write_repeater_output_unit: {            RCVData_WriteRepeaterOutputUNIT ResponseData = new RCVData_WriteRepeaterOutputUNIT();            ResponseData.Set_Data(cmdbuffer);            this.cmd.ResponseData = ResponseData;            break;          }          case (byte)RES_define.read_repeater_info_all: {            RCVData_ReadRepeaterInfoAll ResponseData = new RCVData_ReadRepeaterInfoAll();            ResponseData.Set_Data(cmdbuffer);            this.cmd.ResponseData = ResponseData;            break;          }          case (byte)RES_define.write_repeater_info_unit: {            RCVData_WriteRepeaterInfoUNIT ResponseData = new RCVData_WriteRepeaterInfoUNIT();            ResponseData.Set_Data(cmdbuffer);            this.cmd.ResponseData = ResponseData;            break;          }          case (byte)RES_define.write_repeater_input_unit: {            RCVData_WriteRepeaterInputUNIT ResponseData = new RCVData_WriteRepeaterInputUNIT();            ResponseData.Set_Data(cmdbuffer);            this.cmd.ResponseData = ResponseData;            break;          }          default : {            DoPrintDBGMSG ( " unKnown CMD " );            break;          }        //}//        this.main.ui.getEvent(cmd);      }      DoPrintDBGMSG ( " - EVENTCallFunc " );    }  }    class Paket {    static byte[] RawSerialize( object anything ) {      int rawsize = Marshal.SizeOf( anything );      IntPtr buffer = Marshal.AllocHGlobal( rawsize );      Marshal.StructureToPtr( anything, buffer, false );      byte[] rawdatas = new byte[ rawsize ];      Marshal.Copy( buffer, rawdatas, 0, rawsize );      Marshal.FreeHGlobal( buffer );      return rawdatas;    }    static object RawDeserialize( byte[] rawdatas, Type anytype ) {      object ret_obj;      int rawsize = Marshal.SizeOf( anytype );      if( rawsize > rawdatas.Length )        return null;      IntPtr buffer = Marshal.AllocHGlobal( rawsize );      Marshal.Copy( rawdatas, 0, buffer, rawsize );      ret_obj = Marshal.PtrToStructure( buffer, anytype );      Marshal.FreeHGlobal( buffer );      return ret_obj;    }    byte DoCalcs(byte[] bt, int size) {      byte ret_byte = 0x00;      int counter = 0;      do {        ret_byte = (byte) (ret_byte ^ bt[counter]);        ret_byte++;        counter++;      }      while(counter < size);      return ret_byte;    }    public int DoCheckcs(byte[] bt, int size,byte cs) {      int ret = 0;      byte calcs = 0x00;      calcs = DoCalcs(bt,size);      if(cs == calcs) {        ret = 1;      }      else {        ret = 0;      }      return ret;    }    public byte[] CreatePKT_SayHello_To_Board(byte RPT_loop, byte TBD_ID ,byte IVK_ID,byte RCV_ID,byte TBD_loop) {      byte[] ret_byte_data;            PRTReceiver_Type1 PKT = new PRTReceiver_Type1();      int psize = (byte)default_value_define.size_PRTReceiver_Type1;            PKT.head = (byte)default_value_define.prt_header_id;      PKT.RPT_loop = RPT_loop;      PKT.TBD_ID = TBD_ID;      PKT.length = (byte)psize;      PKT.cmd = (byte)CMD_define.say_hello;      PKT.IVK_ID = IVK_ID;      PKT.RCVR_ID = RCV_ID;      PKT.TBD_loop = TBD_loop;      ret_byte_data = RawSerialize(PKT);      ret_byte_data[psize]= DoCalcs(ret_byte_data,psize);      return ret_byte_data;    }    public byte[] CreatePKT_ReadBoardStatus(byte RPT_loop, byte TBD_ID ,byte IVK_ID,byte RCV_ID,byte TBD_loop) {      byte[] ret_byte_data;            PRTReceiver_Type1 PKT = new PRTReceiver_Type1();      int psize = (byte)default_value_define.size_PRTReceiver_Type1;            PKT.head = (byte)default_value_define.prt_header_id;      PKT.RPT_loop = RPT_loop;      PKT.TBD_ID = TBD_ID;      PKT.length = (byte)psize;      PKT.cmd = (byte)CMD_define.resd_tbd_state;      PKT.IVK_ID = IVK_ID;      PKT.RCVR_ID = RCV_ID;      PKT.TBD_loop = TBD_loop;      ret_byte_data = RawSerialize(PKT);      ret_byte_data[psize]= DoCalcs(ret_byte_data,psize);      return ret_byte_data;    }    public byte[] CreatePKT_WriteBoardStatus(byte RPT_loop, byte TBD_ID ,byte IVK_ID,byte RCV_ID,byte TBD_loop,byte RT_BaudRate,byte loop1_BaudRate,byte loop2_BaudRate,byte RT_Term, byte BD_Reset) { //2010.3.24_moon      byte[] ret_byte_data;            PRTReceiver_Type6 PKT = new PRTReceiver_Type6();      int psize = (byte)default_value_define.size_PRTReceiver_Type6;            PKT.head = (byte)default_value_define.prt_header_id;      PKT.RPT_loop = RPT_loop;      PKT.TBD_ID = TBD_ID;      PKT.length = (byte)psize;      PKT.cmd = (byte)CMD_define.write_tbd_state;      PKT.IVK_ID = IVK_ID;      PKT.RCVR_ID = RCV_ID;      PKT.Option1 = RT_BaudRate;      PKT.Option2 = loop1_BaudRate;      PKT.Option3 = loop2_BaudRate;      PKT.Option4 = RT_Term;      PKT.Option5 = BD_Reset;      PKT.TBD_loop = TBD_loop;      ret_byte_data = RawSerialize(PKT);      ret_byte_data[psize]= DoCalcs(ret_byte_data,psize);      return ret_byte_data;    }    public byte[] CreatePKT_SearchRepeaterAll(byte RPT_loop, byte TBD_ID ,byte IVK_ID,byte RCV_ID,byte TBD_loop) {      byte[] ret_byte_data;            PRTReceiver_Type3 PKT = new PRTReceiver_Type3();      int psize = (byte)default_value_define.size_PRTReceiver_Type3;            PKT.head = (byte)default_value_define.prt_header_id;      PKT.RPT_loop = RPT_loop;      PKT.TBD_ID = TBD_ID;      PKT.length = (byte)psize;      PKT.cmd = (byte)CMD_define.search_repeater_all;      PKT.IVK_ID = IVK_ID;      PKT.RCVR_ID = RCV_ID;      PKT.TBD_loop = TBD_loop;      PKT.Option1 = 0xff; //2010.3.24_moon All      PKT.Option2 = 0x00;      ret_byte_data = RawSerialize(PKT);      ret_byte_data[psize]= DoCalcs(ret_byte_data,psize);      return ret_byte_data;    }    public byte[] CreatePKT_ReadRepeaterPointAll(byte RPT_loop, byte TBD_ID ,byte IVK_ID,byte RCV_ID,byte TBD_loop) {      byte[] ret_byte_data;            PRTReceiver_Type3 PKT = new PRTReceiver_Type3();      int psize = (byte)default_value_define.size_PRTReceiver_Type3;            PKT.head = (byte)default_value_define.prt_header_id;      PKT.RPT_loop = RPT_loop;      PKT.TBD_ID = TBD_ID;      PKT.length = (byte)psize;      PKT.cmd = (byte)CMD_define.read_repeater_all;      PKT.IVK_ID = IVK_ID;      PKT.RCVR_ID = RCV_ID;      PKT.TBD_loop = TBD_loop;      PKT.Option1 = 0xff; //2010.3.24_moon All      PKT.Option2 = 0x00;            ret_byte_data = RawSerialize(PKT);      ret_byte_data[psize]= DoCalcs(ret_byte_data,psize);      return ret_byte_data;    }    public byte[] CreatePKT_WriteRepeaterOutputUNIT(byte RPT_loop, byte TBD_ID ,byte IVK_ID,byte RCV_ID,byte TBD_loop,byte Repeater_ID,byte Repeater_Out_Value) {      byte[] ret_byte_data;            PRTReceiver_Type3 PKT = new PRTReceiver_Type3();      int psize = (byte)default_value_define.size_PRTReceiver_Type3;            PKT.head = (byte)default_value_define.prt_header_id;      PKT.RPT_loop = RPT_loop;      PKT.TBD_ID = TBD_ID;      PKT.length = (byte)psize;      PKT.cmd = (byte)CMD_define.write_repeater_output_unit;      PKT.IVK_ID = IVK_ID;      PKT.RCVR_ID = RCV_ID;      PKT.TBD_loop = TBD_loop;      PKT.Option1 = Repeater_ID;      PKT.Option2 = Repeater_Out_Value;      ret_byte_data = RawSerialize(PKT);      ret_byte_data[psize]= DoCalcs(ret_byte_data,psize);      return ret_byte_data;    }    public byte[] CreatePKT_ReadRepeaterInfoAll(byte RPT_loop, byte TBD_ID ,byte IVK_ID,byte RCV_ID,byte TBD_loop) {      byte[] ret_byte_data;            PRTReceiver_Type3 PKT = new PRTReceiver_Type3();      int psize = (byte)default_value_define.size_PRTReceiver_Type3;            PKT.head = (byte)default_value_define.prt_header_id;      PKT.RPT_loop = RPT_loop;      PKT.TBD_ID = TBD_ID;      PKT.length = (byte)psize;      PKT.cmd = (byte)CMD_define.read_repeater_info_all;      PKT.IVK_ID = IVK_ID;      PKT.RCVR_ID = RCV_ID;      PKT.TBD_loop = TBD_loop;      PKT.Option1 = 0xff; //2010.3.24_moon All      PKT.Option2 = 0x00;      ret_byte_data = RawSerialize(PKT);      ret_byte_data[psize]= DoCalcs(ret_byte_data,psize);      return ret_byte_data;    }    public byte[] CreatePKT_WriteRepeaterInfoUNIT(byte RPT_loop, byte TBD_ID ,byte IVK_ID,byte RCV_ID,byte TBD_loop,byte Repeater_ID,byte Repeater_Out_Value) {      byte[] ret_byte_data;            PRTReceiver_Type3 PKT = new PRTReceiver_Type3();      int psize = (byte)default_value_define.size_PRTReceiver_Type3;            PKT.head = (byte)default_value_define.prt_header_id;      PKT.RPT_loop = RPT_loop;      PKT.TBD_ID = TBD_ID;      PKT.length = (byte)psize;      PKT.cmd = (byte)CMD_define.write_repeater_info_unit;      PKT.IVK_ID = IVK_ID;      PKT.RCVR_ID = RCV_ID;      PKT.TBD_loop = TBD_loop;      PKT.Option1 = Repeater_ID;      PKT.Option2 = Repeater_Out_Value;      ret_byte_data = RawSerialize(PKT);      ret_byte_data[psize]= DoCalcs(ret_byte_data,psize);      return ret_byte_data;    }        public byte[] CreatePKT_ResetRepeaterUNIT(byte RPT_loop, byte TBD_ID ,byte IVK_ID,byte RCV_ID,byte TBD_loop,byte Repeater_ID) {      byte[] ret_byte_data;            PRTReceiver_Type2 PKT = new PRTReceiver_Type2();      int psize = (byte)default_value_define.size_PRTReceiver_Type2;            PKT.head = (byte)default_value_define.prt_header_id;      PKT.RPT_loop = RPT_loop;      PKT.TBD_ID = TBD_ID;      PKT.length = (byte)psize;      PKT.cmd = (byte)CMD_define.reset_repeater_unit;      PKT.IVK_ID = IVK_ID;      PKT.RCVR_ID = RCV_ID;      PKT.TBD_loop = TBD_loop;      PKT.Option1 = Repeater_ID;      ret_byte_data = RawSerialize(PKT);      ret_byte_data[psize]= DoCalcs(ret_byte_data,psize);      return ret_byte_data;    }    public byte[] CreatePKT_ResetRepeaterAll(byte RPT_loop, byte TBD_ID ,byte IVK_ID,byte RCV_ID,byte TBD_loop) {      byte[] ret_byte_data;            PRTReceiver_Type3 PKT = new PRTReceiver_Type3();      int psize = (byte)default_value_define.size_PRTReceiver_Type3;            PKT.head = (byte)default_value_define.prt_header_id;      PKT.RPT_loop = RPT_loop;      PKT.TBD_ID = TBD_ID;      PKT.length = (byte)psize;      PKT.cmd = (byte)CMD_define.reset_repeater_all;      PKT.IVK_ID = IVK_ID;      PKT.RCVR_ID = RCV_ID;      PKT.TBD_loop = TBD_loop;      PKT.Option1 = 0xff; //2010.3.24_moon All      PKT.Option2 = 0x00;      ret_byte_data = RawSerialize(PKT);      ret_byte_data[psize]= DoCalcs(ret_byte_data,psize);      return ret_byte_data;    }    public byte[] CreatePKT_WriteRepeaterInputUNIT(byte RPT_loop, byte TBD_ID ,byte IVK_ID,byte RCV_ID,byte TBD_loop,byte Repeater_ID,byte Repeater_Out_Value) {      byte[] ret_byte_data;            PRTReceiver_Type3 PKT = new PRTReceiver_Type3();      int psize = (byte)default_value_define.size_PRTReceiver_Type3;            PKT.head = (byte)default_value_define.prt_header_id;      PKT.RPT_loop = RPT_loop;      PKT.TBD_ID = TBD_ID;      PKT.length = (byte)psize;      PKT.cmd = (byte)CMD_define.write_repeater_input_unit;      PKT.IVK_ID = IVK_ID;      PKT.RCVR_ID = RCV_ID;      PKT.TBD_loop = TBD_loop;      PKT.Option1 = Repeater_ID;      PKT.Option2 = Repeater_Out_Value;      ret_byte_data = RawSerialize(PKT);      ret_byte_data[psize]= DoCalcs(ret_byte_data,psize);      return ret_byte_data;    }    public void DecPacket(byte [] data , int size) {      // check cs      // make upload data      //     }      }}
 |