/// <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 = "未连接"; } } }
/// <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; }