public static void DataProc(byte[] buffer) { int fzh = buffer[0]; int order = buffer[4]; //0x44,D命令 int mark = buffer[6]; //3表示分站远程升级相关命令 StationUpdateState state = StationUpdateState.unKnowm; string msg = ""; if (fzh < stationItems.Length - 1 && order == 0x44 && mark == 3) { GetStateFromByte(buffer[7], ref state, ref msg); stationItems[fzh - 1].updateState = state; stationItems[fzh - 1].msg = msg; if (state == StationUpdateState.fileMissing) { #region ----解析后续缺少序号---- #endregion } } else { LogHelper.Error("回发数据包类型错误!"); } }
private static void GetStateFromByte(byte data, ref StationUpdateState state, ref string msg) { int bit0_3 = 0; int bit4_7 = 0; bit4_7 = (data >> 4) & 0xFF; bit0_3 = data & 0x0F; if (bit4_7 == 1) { #region ----=1中心站请求远程升级---- if (bit0_3 == 0) { state = StationUpdateState.requestSuccess; msg = "请求升级成功"; } else { state = StationUpdateState.requestFailure; if (bit0_3 == 1) { //=1:升级文件不属于该类设备(不能升级) msg = "升级文件不属于该类设备"; } else if (bit0_3 == 2) { //=2:升级条件不满足(不能升级) msg = "升级条件不满足"; } else if (bit0_3 == 3) { //=3:本地代码存储空间过小(不能升级) msg = "本地代码存储空间过小"; } else if (bit0_3 == 4) { //=4:分站已处于远程升级模式且升级软件版本号与本次请求一致(分站将不更新已接收数据); msg = "分站已处于远程升级模式且升级软件版本号与本次请求一致"; } else if (bit0_3 == 5) { //=5:分站已处于升级模式且升级软件版本号与本次请求不匹配(中心站若想升级该分站,应下发强制中止当前升级流程再重新下发本次升级请求。) msg = "分站已处于升级模式且升级软件版本号与本次请求不匹配"; } else if (bit0_3 == 6) { //=6:本地存储器不可靠,最近一次升级失败(不能升级) msg = "本地存储器不可靠,最近一次升级失败"; } else if (bit0_3 == 7) { //=7:分站还未做好升级准备,稍后再试;(不能升级) msg = "分站还未做好升级准备,稍后再试"; } else if (bit0_3 == 8) { //=8:硬件版本号与本地不匹配(不能升级) msg = "硬件版本号与本地不匹配"; } } #endregion } else if (bit4_7 == 4) { #region ----=4中心站巡检分站的文件接收情况---- if (bit0_3 == 0) { state = StationUpdateState.reciveComplete; msg = "升级文件已接收完毕"; } else { state = StationUpdateState.error; if (bit0_3 == 1) { //=1:升级文件不属于该类设备(不能升级) msg = "升级文件不属于该类设备"; } else if (bit0_3 == 2) { //=2:请求的升级文件版本号与本地的升级文件版本号不匹配;(不能升级) msg = "请求的升级文件版本号与本地的升级文件版本号不匹配"; } else if (bit0_3 == 3) { //=3:该设备不处于升级模式(不能升级) msg = "该设备不处于升级模式"; } else if (bit0_3 == 4) { //=4:升级文件缺失(不能升级,后续有缺失文件编号字段) msg = "升级文件缺失"; state = StationUpdateState.fileMissing; } else if (bit0_3 == 5) { //=5:文件编号异常; msg = "文件编号异常"; } else if (bit0_3 == 6) { //=6:硬件版本号不匹配(不能升级) msg = "硬件版本号不匹配"; } } #endregion } else if (bit4_7 == 5) { #region ----=5中心站告知分站重启并升级---- if (bit0_3 == 0) { state = StationUpdateState.restart; msg = "分站准备重启并升级"; } else { state = StationUpdateState.error; if (bit0_3 == 1) { //=1:升级文件不属于该类设备(不能升级) msg = "升级文件不属于该类设备"; } else if (bit0_3 == 2) { //=2:请求的升级文件版本号与本地的升级文件版本号不匹配;(不能升级) msg = "请求的升级文件版本号与本地的升级文件版本号不匹配"; } else if (bit0_3 == 3) { //=3:该分站不处于升级模式(不能升级) msg = "该分站不处于升级模式"; } else if (bit0_3 == 4) { //=4:该分站升级文件缺失;(不能升级) msg = "该分站升级文件缺失"; } else if (bit0_3 == 5) { //=5:文件校验失败(不能升级) msg = "文件校验失败"; } else if (bit0_3 == 6) { //=6:硬件版本号不匹配(不能升级) msg = "硬件版本号不匹配"; } } #endregion } else if (bit4_7 == 6) { #region ----=6中心站告知分站该次升级过程中止---- if (bit0_3 == 0) { state = StationUpdateState.updateCancleSuccess; msg = "分站已中止该次升级"; } else { state = StationUpdateState.error; if (bit0_3 == 1) { //=1:设备类型不匹配(未能中止) msg = "设备类型不匹配"; } else if (bit0_3 == 2) { //=2:升级文件版本号不匹配(未能中止) msg = "升级文件版本号不匹配"; } else if (bit0_3 == 3) { //=3:硬件版本号不匹配(未能中止) msg = "硬件版本号不匹配"; } } #endregion } else if (bit4_7 == 7) { #region ----=7中心站告知分站恢复最近一次备份---- if (bit0_3 == 0) { state = StationUpdateState.restore; msg = "分站已准备恢复操作"; } else { state = StationUpdateState.error; if (bit0_3 == 1) { //=1:设备类型不匹配(未能恢复) msg = "设备类型不匹配"; } else if (bit0_3 == 2) { //=2:版本号不匹配(未能恢复) msg = "版本号不匹配"; } else if (bit0_3 == 3) { //=3:该分站未进行备份,不能恢复; msg = "该分站未进行备份"; } else if (bit0_3 == 4) { //=4:分站最近因存储器不可靠而升级失败,不能恢复 msg = "分站最近因存储器不可靠而升级失败"; } else if (bit0_3 == 5) { //=5:硬件版本号不匹配(未能恢复) msg = "硬件版本号不匹配"; } } #endregion } else if (bit4_7 == 8) { #region ----=8中心站查询分站信息---- if (bit0_3 == 0) { state = StationUpdateState.normal; msg = "分站状态正常"; } else { state = StationUpdateState.error; msg = "未知故障码:" + bit4_7; } #endregion } }