/* ���ݸ��������ݼ���CAN/LIN/IO���ģ���ͨ�����ڷ��� */ private void genericAction(string funcName, double param) { Byte[] data = new byte[CAN_DATA_LEN] { 0, 0, 0, 0, 0, 0, 0, 0 }; List<T_GENERIC_INFO> xmlData_List = new List<T_GENERIC_INFO>(); SeqList.Status_List_t ListNode = new SeqList.Status_List_t(); Int64 val = new Int64(); int i; double d; UInt64 temp = new UInt64(); UInt64 t2 = new UInt64(); UInt64 mask = new UInt64(); byte cmdType, funcID = 0; byte dataLen; if (uiReloading) return; /* ���ݵ�Դ״̬����protocol */ xmlData_List = GetXMLInfo.GetGenericInfoByFunc(funcName, pwrSts); foreach (T_GENERIC_INFO xmlData in xmlData_List) { d = Convert.ToInt64((param + xmlData.preoffset) * xmlData.factor + xmlData.offset); val = Convert.ToInt64(d); dataLen = xmlData.dataLen; switch (xmlData.protocol) { case "CAN": cmdType = CommondType.CAN; break; case "LIN": cmdType = CommondType.LIN; break; case "IO": cmdType = CommondType.IO; funcID = Convert.ToByte(xmlData.id); break; default: cmdType = CommondType.Other; break; } ListNode = CAN_Send_Msg_Manage.Get(cmdType, xmlData.id); if (ListNode.id == 0x00) /* û��ͬID�ı��ı����� */ { ListNode.cmdType = cmdType; ListNode.id = Convert.ToUInt16(xmlData.id); ListNode.data = data; CAN_Send_Msg_Manage.Add(ListNode); /* ��� */ } // ��֯������ temp = 0; for (i = 0; i < ListNode.data.Length; i++) { t2 = ListNode.data[i]; temp = temp | (t2 << ((ListNode.data.Length - i - 1) * 8)); } if (val < 0) val = 0; // �¾����ݺϲ� t2 = (Convert.ToUInt64(val) << xmlData.startBit); //mask = Convert.ToUInt64(Math.Pow(2, xmlData.endBit - xmlData.startBit + 1) - 1); mask = 0; for (int k = xmlData.startBit; k <= xmlData.endBit; k++) { UInt64 mask_t = new UInt64(); mask_t = Convert.ToUInt64(1) << (k); mask |= mask_t; } //mask <<= xmlData.startBit; temp &= ~mask; temp |= t2; //Application.DoEvents(); /* �������������� */ ListNode.data[0] = (byte)((temp & 0xff00000000000000) >> 56); ListNode.data[1] = (byte)((temp & 0x00ff000000000000) >> 48); ListNode.data[2] = (byte)((temp & 0x0000ff0000000000) >> 40); ListNode.data[3] = (byte)((temp & 0x000000ff00000000) >> 32); ListNode.data[4] = (byte)((temp & 0x00000000ff000000) >> 24); ListNode.data[5] = (byte)((temp & 0x0000000000ff0000) >> 16); ListNode.data[6] = (byte)((temp & 0x000000000000ff00) >> 8); ListNode.data[7] = (byte)((temp & 0x00000000000000ff) >> 0); CAN_Send_Msg_Manage.Change(ListNode); this.FrameMessage.Set_Frame(cmdType, funcID, xmlData.id, ListNode.data, dataLen, xmlData.startBit, xmlData.endBit); Uart_C.WriteUART(this.FrameMessage); //Application.DoEvents(); /* ���LOG */ printCmdHistory(ListNode, xmlData.protocol, xmlData.name, xmlData.desc); } }
private void btnManualSend_Click(object sender, EventArgs e) { SeqList.Status_List_t ListNode = new SeqList.Status_List_t(); ushort dataId = Convert.ToUInt16(txtManualID.Text,16); byte dataLen = Convert.ToByte(txtManualDataLen.Text); byte cmdType = Convert.ToByte(cbManualType.SelectedIndex + 1); byte[] data = {0,0,0,0,0,0,0,0 }; string dataStr = txtManualContent.Text; int i; Console.WriteLine(tabPageMisc.Controls[0].Visible); ListNode.data = data; ListNode.id = dataId; dataStr = dataStr.Trim(); dataStr = dataStr.Replace(" ", ""); for (i = 0; i < dataLen; i++) { data[i] = Convert.ToByte(dataStr.Substring(i*2, 2), 16); } CAN_Send_Msg_Manage.Change(ListNode); this.FrameMessage.Set_Frame(cmdType, 0, dataId, ListNode.data, dataLen, 0, 64); Uart_C.WriteUART(this.FrameMessage); /* ���LOG */ printCmdHistory(ListNode, cbManualType.Text, "[�ֶ�]", ""); }