/// <summary> /// 断开选择的设备 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void 断开设备toolStripButton_Click(object sender, EventArgs e) { PersonnelManagement personnelManagement = new PersonnelManagement(); PersonnelManagement.PersonInfo person = new PersonnelManagement.PersonInfo(5); Stm32Sync stm32_sync = new Stm32Sync(); stm32_sync.output_dlg = output; MacAddr dst_addr; string addr_str = dgvDeviceInfo.SelectedRows[0].Cells[2].Value.ToString(); dst_addr = new MacAddr(addr_str); /* 添加用户 */ for (int i = 0; i < personnelManagement.PersonList.Count; i++) { stm32_sync.user_add(dst_addr.Mac, personnelManagement.PersonList[i]); } /* 删除用户 */ //stm32_sync.user_del(dst_addr.Mac, (UInt32)1); /* 重新加载卡号-用户号,指纹号-用户号列表 */ stm32_sync.list_reload(dst_addr.Mac); return; int rows = dgvDeviceInfo.SelectedRows.Count;//获取选中总行数 for (int j = 0; j < rows; j++) { if (dgvDeviceInfo.SelectedRows[j].Cells[1].Value.ToString() == "未连接") { output("设备" + dgvDeviceInfo.SelectedRows[j].Cells[0].Value.ToString() + "未连接"); } else { dgvDeviceInfo.SelectedRows[j].Cells[1].Value = "未连接"; } } }
public void CreateMemberBin() { Stm32_crc stm32_crc = new Stm32_crc(); PersonnelManagement personnelManagement = new PersonnelManagement(); PersonnelManagement.PersonInfo person = new PersonnelManagement.PersonInfo(5); string path = Environment.CurrentDirectory + @"\dataBase\member.bin"; FileStream fs = new FileStream(path, FileMode.Create); UInt32 crc = 0; /* 获取总人数 */ ushort rowsCount = (ushort)personnelManagement.PersonList.Count; /* 获取最大用户号 */ ushort user_num_max = (ushort)personnelManagement.max_user_id_get(); uint one_user_lenth = USER_PACK_SIZE; byte[] data = new byte[8 + user_num_max * one_user_lenth]; byte[] person_array; data[0] = (byte)(rowsCount & 0xff); data[1] = (byte)((rowsCount & 0xff00) >> 8); data[2] = (byte)(user_num_max & 0xff); data[3] = (byte)((user_num_max & 0xff00) >> 8); crc = stm32_crc.block_crc_calc(data, 0, 4); data[4] = (byte)((crc & 0x000000FF) >> 0); data[5] = (byte)((crc & 0x0000FF00) >> 8); data[6] = (byte)((crc & 0x00FF0000) >> 16); data[7] = (byte)((crc & 0xFF000000) >> 24); for (ushort i = 0; i < rowsCount; i++) { person = personnelManagement.PersonList[i]; person_array = person_array_get(person); Buffer.BlockCopy(person_array, 0, data, (int)((person.uID - 1) * one_user_lenth + 8), person_array.Length); } fs.Write(data, 0, data.Length); fs.Flush(); fs.Close(); }
public byte[] person_array_get(PersonnelManagement.PersonInfo PersonInfo) { Stm32_crc stm32_crc = new Stm32_crc(); UInt32 crc = 0; byte[] user_data = new byte[1 + USER_PACK_SIZE]; byte[] data = new byte[USER_PACK_SIZE]; string temp_str; byte[] temp; /* 有效期 */ System.Globalization.DateTimeFormatInfo dtFormat = new System.Globalization.DateTimeFormatInfo(); dtFormat.ShortDatePattern = "yyyy年MM月dd日 HH:mm:ss"; DateTime limitTime = Convert.ToDateTime(PersonInfo.limitTime, dtFormat); int year = limitTime.Year; int month = limitTime.Month; int day = limitTime.Day; int hour = limitTime.Hour; int minute = limitTime.Minute; int second = limitTime.Second; /* 用户号 */ user_data[1] = (byte)((PersonInfo.uID & 0x00FF) >> 0); user_data[2] = (byte)((PersonInfo.uID & 0xFF00) >> 8); /* RFID卡号 */ user_data[3] = (byte)((PersonInfo.cardID & 0x000000FF) >> 0); user_data[4] = (byte)((PersonInfo.cardID & 0x0000FF00) >> 8); user_data[5] = (byte)((PersonInfo.cardID & 0x00FF0000) >> 16); user_data[6] = (byte)((PersonInfo.cardID & 0xFF000000) >> 24); /* 激活状态 */ user_data[7] = (byte)PersonInfo.activeState; /* 学号 */ temp_str = PersonInfo.studentID; temp = Encoding.Default.GetBytes(temp_str); Buffer.BlockCopy(temp, 0, user_data, 8, temp.Length); /* 姓名 */ temp_str = PersonInfo.name; temp = Encoding.GetEncoding("utf-8").GetBytes(temp_str); //temp = Encoding.Default.GetBytes(temp_str); Buffer.BlockCopy(temp, 0, user_data, 24, temp.Length); /* 权限 */ DeviceManagement deviceManagement = new DeviceManagement(); int count = deviceManagement.DeviceList.Count; /* 设备数量 */ temp = new byte[16]; temp_str = PersonInfo.authority; string[] split_array = temp_str.Replace(" ", "").Split(','); for (int i = 0; i < split_array.Length; i++) { if (split_array[i] == "超级管理员") { temp[15] |= (byte)(1 << 7); } else if (split_array[i] == "管理员") { temp[15] |= (byte)(1 << 6); } else { for (int j = 0; j < count; j++) { if (split_array[i] == deviceManagement.DeviceList[j].name) { Int32 id = (Int32)deviceManagement.DeviceList[j].ID; temp[id / 8] |= (byte)(1 << (id % 8)); } } } } Buffer.BlockCopy(temp, 0, user_data, 40, temp.Length); /* 是否有时间限制 */ user_data[56] = (byte)PersonInfo.isLimitTime; /* 有效期 */ user_data[57] = (byte)(year & 0xFF); user_data[58] = (byte)((year & 0xFF00) >> 8); user_data[59] = (byte)month; user_data[60] = (byte)day; user_data[61] = (byte)hour; user_data[62] = (byte)minute; user_data[63] = (byte)second; /* 指纹号 */ for (int i = 0; i < 5; i++) { user_data[64 + i * 2] = (byte)((PersonInfo.eigenNum[i] & 0x00FF) >> 0); user_data[65 + i * 2] = (byte)((PersonInfo.eigenNum[i] & 0xFF00) >> 8); } /* 指纹特征值 */ for (int i = 0; i < 5; i++) { temp = String_Byte.strToHexByte(PersonInfo.eigen[i]); Buffer.BlockCopy(temp, 0, user_data, 74 + i * 193, temp.Length); } /* crc */ crc = stm32_crc.block_crc_calc(user_data, 1, USER_PACK_SIZE - 4 - 16); user_data[1039] = (byte)((crc & 0x000000FF) >> 0); user_data[1040] = (byte)((crc & 0x0000FF00) >> 8); user_data[1041] = (byte)((crc & 0x00FF0000) >> 16); user_data[1042] = (byte)((crc & 0xFF000000) >> 24); /* 进出状态 */ temp = new byte[16]; Buffer.BlockCopy(temp, 0, user_data, 1043, temp.Length); Buffer.BlockCopy(user_data, 1, data, 0, data.Length); return(data); }
/// <summary> /// 同步所有已连接设备的用户信息 /// </summary> private void SyncUser() { output("同步用户信息"); DeviceManagement deviceManagement = new DeviceManagement(); PersonnelManagement personnelManagement = new PersonnelManagement(); PersonnelManagement.PersonInfo person = new PersonnelManagement.PersonInfo(5); Stm32Sync stm32_sync = new Stm32Sync(); Stm32_crc stm32_crc = new Stm32_crc(); UInt32 crc = 0; MacAddr dst_addr; UInt16 total; UInt16 count; UInt16 total_get = 0; byte[] user_crc_byte; UInt32[] user_crc = new UInt32[0]; bool err = true; bool is_change = false; stm32_sync.output_dlg = output; int row = dgvDeviceInfo.SelectedRows.Count; /* 获取选中总行数 */ int rowIndex = dgvDeviceInfo.CurrentRow.Index; /* 获取选择行号 */ for (int j = 0; j < row; j++) { if (dgvDeviceInfo.SelectedRows[j].Cells[1].Value.ToString() == "已连接") { string addr_str = dgvDeviceInfo.SelectedRows[j].Cells[2].Value.ToString(); dst_addr = new MacAddr(addr_str); /* 首先获取设备内所有用户信息的crc */ while (true) { /* 获取用户crc */ if (stm32_sync.user_crc_get(dst_addr.Mac, (UInt16)(total_get + 1), (UInt16)200, out total, out count, out user_crc_byte) != true) { err = false; break; } if (total_get == 0) { user_crc = new UInt32[total]; } for (int i = 0; i < count; i++) { crc = (UInt32)((user_crc_byte[i * 4 + 0] << 0) + (user_crc_byte[i * 4 + 1] << 8) + (user_crc_byte[i * 4 + 2] << 16) + (user_crc_byte[i * 4 + 3] << 24)); user_crc[i + total_get] = crc; } total_get += count; if (total_get == total) { output("已获取完成所有用户crc"); err = true; break; } } if (err == false) { output("crc获取错误"); continue; } /* 同步用户信息 */ for (UInt32 uID = 1; uID <= user_crc.Length; uID++) { /* 获取用户信息 */ person = personnelManagement.user_get(uID); /* 用户不存在上位机,删除用户 */ if ((person.uID != uID) && (user_crc[uID - 1] != 0)) { is_change = true; if (stm32_sync.user_del(dst_addr.Mac, uID) == false) { output("删除" + uID.ToString() + "号用户失败"); err = false; break; } continue; } if (person.uID != 0) { /* 计算用户crc */ crc = stm32_sync.user_crc_calc(person); /* crc不同,证明用户信息改变,添加用户 */ if (crc != user_crc[uID - 1]) { is_change = true; if (stm32_sync.user_add(dst_addr.Mac, person) == false) { output("添加" + uID.ToString() + "号用户失败"); err = false; break; } } } } UInt32 user_id_max_device = (UInt32)user_crc.Length; UInt32 user_id_max_db = personnelManagement.max_user_id_get(); if (user_id_max_device < user_id_max_db) { for (UInt32 uID = (UInt32)(user_id_max_device + 1); uID <= user_id_max_db; uID++) { /* 获取用户信息 */ person = personnelManagement.user_get(uID); if (person.uID == uID) { is_change = true; if (stm32_sync.user_add(dst_addr.Mac, person) == false) { output("添加" + uID.ToString() + "号用户失败"); err = false; } } } } if (is_change == true) { /* 重新加载卡号-用户号,指纹号-用户号列表 */ stm32_sync.list_reload(dst_addr.Mac); } if (err == false) { output("同步用户信息出错"); continue; } else { output("同步用户信息成功"); } } } is_child_thread_stop = 0; }
private void Form1_Load(object sender, EventArgs e) { Stm32Sync stm32_sync = new Stm32Sync(); PersonnelManagement personnelManagement = new PersonnelManagement(); PersonnelManagement.PersonInfo person = new PersonnelManagement.PersonInfo(5); MacAddr mac = new MacAddr(); //stm32_sync.user_add(mac.Mac, personnelManagement.PersonList[2]); //byte[] name1 = {0x30, 0x5f, 0xd5, 0xc5, 0xbd, 0xf8, 0xbf, // 0xc6, 0x2e, 0x62, 0x69, 0x6e, 0x00, 0x33, // 0x20, 0x31, 0x33, 0x30, 0x37, 0x35, 0x35, // 0x37, 0x34, 0x30, 0x33, 0x36, 0x20, 0x30, // 0x20, 0x30, 0x20, 0x31, 0x20, 0x33}; //string name_str1 = Encoding.Default.GetString(name1); //byte[] name = Encoding.Default.GetBytes(name_str1); //AttendanceInfo attendanceInfo = new AttendanceInfo(); //AttendanceInfo.AttInfo attInfo = new AttendanceInfo.AttInfo(); //attInfo.deviceID = 4; /* 设备ID */ //attInfo.deviceName = "411"; /* 设备名称 */ //attInfo.mac = "00:00:00:00:00:04"; /* 设备mac地址 */ //attInfo.infoID = 0; /* 记录ID 可重复,只作为参考 */ //attInfo.uID = 1; /* 用户号 */ //attInfo.studentID = "11307030328"; /* 学号 */ //attInfo.name = "张进科"; /* 姓名 */ //attInfo.state = (char)1; /* 状态 0:出门 1:进门 */ //attInfo.time = "2017年03月18日 22:34:59"; /* 时间 */ //attendanceInfo.AddInfo(attInfo); //attendanceInfo.DelInfo(attInfo); //PersonnelManagement personnelManagement = new PersonnelManagement(); //PersonnelManagement.PersonInfo person = new PersonnelManagement.PersonInfo(5); //person.uID = 0; //person.cardID = 0xFFFFFFFF; //person.activeState = 0; //person.studentID = "11307030328"; //person.dormitory = "柏轩 B414"; //person.major = "机械工程学院 测控技术与仪器"; //person.name = "张进科"; //person.sex = "男"; //person.birthday = "1995年02月23日"; //person.tel = "15825941073"; //person.QQ = "799658861"; //person.weiXin = "zhangjinke0220"; //person.authority = "authority"; //person.isLimitTime = 0; //person.limitTime = "2099年12月31日23时59分59秒"; //person.eigenNum[0] = 0; //person.eigenNum[1] = 1; //person.eigenNum[2] = 2; //person.eigenNum[3] = 3; //person.eigenNum[4] = 4; //person.eigen[0] = "eigen0"; //person.eigen[1] = "eigen1"; //person.eigen[2] = "eigen2"; //person.eigen[3] = "eigen3"; //person.eigen[4] = "eigen4"; //person.recodeDate = "2017年2月3日17时49分26秒"; //person.resv0 = 0; //person.resv1 = 0; //person.resv2 = ""; //person.resv3 = ""; //person.resv4 = ""; //personnelManagement.AddPerson(person); //personnelManagement.DelPerson(person); //school_info_init(); Control.CheckForIllegalCrossThreadCalls = false; //不检查跨线程的调用是否合法(不好的解决方案) if (!Directory.Exists(Environment.CurrentDirectory + @"\dataBase")) { Directory.CreateDirectory(Environment.CurrentDirectory + @"\dataBase");//目录不存在,建立目录 } if (!Directory.Exists(Environment.CurrentDirectory + @"\picture")) { Directory.CreateDirectory(Environment.CurrentDirectory + @"\picture");//目录不存在,建立目录 } DeviceManagement deviceManagement = new DeviceManagement(); dgvDeviceInfo.Rows.Clear(); /* 清空表格 */ deviceManagement = new DeviceManagement(); int count = deviceManagement.DeviceList.Count; /* 设备数量 */ for (int idx = 0; idx < count; idx++) /* 将设备添加到表格中 */ { int index = dgvDeviceInfo.Rows.Add(); dgvDeviceInfo.Rows[index].Cells[0].Value = deviceManagement.DeviceList[idx].name; /* 设备名称 */ dgvDeviceInfo.Rows[index].Cells[1].Value = "未连接"; /* 状态 */ dgvDeviceInfo.Rows[index].Cells[2].Value = deviceManagement.DeviceList[idx].mac; /* mac地址 */ dgvDeviceInfo.Rows[index].Cells[3].Value = ""; /* 人员数 */ } }