예제 #1
0
 void ReadTXItems(Table txItems)
 {
     for (int i = 0, readOffset = (int)txItems.offset; i < txItems.rowCount; i++, readOffset += txItems.rowSize)
     {
         uint   id         = (uint)txItems.ReadField(dbReader.rawDB, readOffset, 0);
         byte[] conversion = txItems.ReadFieldRaw(dbReader.rawDB, readOffset, 1);
         if (!isStarScanDB)
         {
             byte tmp = conversion[2];
             conversion[2] = conversion[3];
             conversion[3] = tmp;
             tmp           = conversion[4];
             conversion[4] = conversion[5];
             conversion[5] = tmp;
         }
         uint   dataAcquireId = (uint)txItems.ReadField(dbReader.rawDB, readOffset, 2);
         uint   functionId    = (uint)txItems.ReadField(dbReader.rawDB, readOffset, 3);
         uint   moduleMenuId  = (uint)txItems.ReadField(dbReader.rawDB, readOffset, 4);
         byte[] xmit          = txItems.ReadFieldRaw(dbReader.rawDB, readOffset, 6);
         uint   nameId        = (uint)txItems.ReadField(dbReader.rawDB, readOffset, 8);
         uint   hintId        = (uint)txItems.ReadField(dbReader.rawDB, readOffset, 13);
         uint   moduleType    = (uint)txItems.ReadField(dbReader.rawDB, readOffset, 14);
         TXItems[id] = new TXItem(this, id, conversion, dataAcquireId, moduleMenuId, functionId, xmit, nameId, hintId, moduleType);
     }
 }
예제 #2
0
        IEnumerable <TXItem> GetFunctionTXChildren(Dictionary <uint, TXItem> FunctionIDToTXItem, Function func)
        {
            TXItem linkedItemTemp = null;

            foreach (Function linkedFunction in func.LinkedFunctions)
            {
                if (FunctionIDToTXItem.TryGetValue(linkedFunction.ID, out linkedItemTemp))
                {
                    yield return(linkedItemTemp);
                }
            }
        }
예제 #3
0
 void ListBoxUpdater_Tick(object sender, EventArgs e)
 {
     foreach (ListViewItem item in lstDataMenuTXs.Items)
     {
         if (item.Tag != null && item.Tag.GetType() == typeof(TXItem))
         {
             TXItem txitem = (TXItem)item.Tag;
             if (txitem.DataDisplay.IsRawDataUpdated)
             {
                 item.SubItems[1].Text = txitem.DataDisplay.FormattedData;
             }
         }
     }
 }
예제 #4
0
        public List <SelectableDataItem> GetTXChildren(Module mod, Function func)
        {
            List <SelectableDataItem> output = new List <SelectableDataItem>();

            foreach (Function child in func.LinkedFunctions)
            {
                TXItem linkedTx = mod.TXItems.FirstOrDefault(item => item.FunctionID == child.ID);
                if (linkedTx != null)
                {
                    output.Add(linkedTx);
                }
                else
                {
                    output.Add(child);
                }
            }
            return(output);
        }
        void QueryThread()
        {
            //listBoxUpdater.Enabled = true;
            queryTaskStopSignal.Reset();
            bool isHighSpeedSciMode = false;

            while (!queryTaskStopSignal.WaitOne(1))
            {
                List <TXItem> txTemp = null;
                lock (visibleTxItems)
                {
                    txTemp = new List <TXItem>(visibleTxItems);
                }
                List <TXItem> sciHighSpeedParams = txTemp.Where(tx => tx.DataAcquisitionMethod != null && tx.DataAcquisitionMethod.Protocol == Protocol.SCI && (tx.TransmitBytes[0] & 0xF0) == 0xF0).ToList();
                if (sciHighSpeedParams.Any())
                {
                    txTemp = visibleTxItems.Except(sciHighSpeedParams).ToList();
                    if (!isHighSpeedSciMode)
                    {
                        arduino.SendCommand(CommandID.SCI_SetLoSpeed);
                        if (arduino.SendMessageAndGetResponse(Protocol.SCI, 0x12).Count == 1)
                        {
                            arduino.SendCommand(CommandID.SCI_SetHiSpeed);
                            isHighSpeedSciMode = true;
                        }
                    }
                    if (isHighSpeedSciMode)
                    {
                        SCIHiSpeedQuery(sciHighSpeedParams);
                    }
                    if (txTemp.Any())
                    {
                        arduino.SendMessageAndGetResponse(Protocol.SCI, 0xFE);
                        Thread.Sleep(250);
                        arduino.SendCommand(CommandID.SCI_SetLoSpeed);
                        isHighSpeedSciMode = false;
                    }
                }
                for (int i = 0; i < txTemp.Count; i++)
                {
                    TXItem tx = txTemp[i];
                    if (tx.TransmitBytes.Length == 0 || tx.DataAcquisitionMethod == null || (tx.TransmitBytes.Length == 1 && tx.TransmitBytes[0] == 0))
                    {
                        continue;
                    }
                    else if (tx.DataAcquisitionMethod == null)
                    {
                        continue;
                    }
                    byte[] xmitTemp = new byte[tx.DataAcquisitionMethod.RequestLen];
                    Array.Copy(tx.TransmitBytes, xmitTemp, tx.DataAcquisitionMethod.RequestLen);
                    List <byte> response = arduino.SendMessageAndGetResponse(tx.DataAcquisitionMethod.Protocol, xmitTemp);
                    if (tx.DataAcquisitionMethod.ResponseLen > tx.DataAcquisitionMethod.RequestLen && tx.DataAcquisitionMethod.Protocol == Protocol.SCI)
                    {
                        List <byte> additionalBytes;
                        arduino.GetSCIBytes(tx.DataAcquisitionMethod.ResponseLen - tx.DataAcquisitionMethod.RequestLen, out additionalBytes);
                        if (additionalBytes != null)
                        {
                            response.AddRange(additionalBytes);
                        }
                    }
                    if (response.Count == tx.DataAcquisitionMethod.ResponseLen)
                    {
                        byte[] dataBytes = tx.DataAcquisitionMethod.ExtractData(response.ToArray());
                        tx.DataDisplay.RawData = dataBytes;
                    }
                }
            }
            if (isHighSpeedSciMode)
            {
                arduino.SendMessageAndGetResponse(Protocol.SCI, 0xFE);
                Thread.Sleep(250);
                arduino.SendCommand(CommandID.SCI_SetLoSpeed);
            }
            //listBoxUpdater.Enabled = false;
        }
예제 #6
0
 public TestObject(TXItem txItem, List <TXItem> children)
 {
     testTx       = txItem;
     ChildTXItems = children;
 }