void canQfRcv(CAN_WP *frame) { //if (frame->flag != 1 ) return; if (CAN_WP_GET_TYPE(frame->srcid) != CAN_WP_DEV_TYPE_QIFA) { return; //device id is not qifa } unsigned int funcode = frame->funcode; unsigned char qfban; switch (funcode) { case CAN_WP_FUNCODE_QF_READOHM: { atomicSet(&wp_qf_resdata); qfban = CAN_WP_GET_ID(frame->srcid) - 1; unsigned char qf = (unsigned char)(frame->data[0]); if (qfban >= qifaSys.numofboard || qf >= qifaSys.numperboard) return; qifaSys.QiFa_Reg_Table[qfban][qf]->Ohm = (unsigned short)(frame->data[0] >> 8); } break; case CAN_WP_FUNCODE_QF_READALARM: break; case CAN_WP_FUNCODE_QF_READ: atomicSet(&wp_read_qf_flag); Sw_Qf_Status = (unsigned short)(frame->data[0]); break; case CAN_WP_FUNCODE_QF_ALARM: qfban = CAN_WP_GET_ID(frame->srcid) - 1; if (qfban >= qifaSys.numofboard) return; qifawarn[qfban] = (uint16)(frame->data[0] & 0x0f); break; default: break; } }
void doCmdWp(CAN_WP *wp) { if (CAN_WP_GET_ID(wp->desid) == 0) { return; } if (DeviceCanAddr == 0) { return; } switch (wp->funcode) { case CANCMD_SETPWMEN: CanCmd_SetPwmEn(wp); break; //8803 片选使能 case CANCMD_SETQIFAEN: CanCmd_SetQfCs(wp); break; //8803 RST 复位使能和关闭(8803 RST 为H 复位状态) case CANCMD_QIFARST: CanCmd_QfRst(wp); break; //设定PWM 高电平时间 case CANCMD_SETPWMVALUE: CanCmd_SetPwmValue(wp); break; //气阀IO端口输出 (气阀工作) case CANCMD_QIFADRV: CanCmd_QifaDrv(wp); break; //气阀单个输出测试电阻 case CANCMD_SINGAL_QIFA: CanCmd_TestQifaOhm(wp); break; //读取器件报警状态 case CANCMD_READALARM: CanCmd_ReadAlarm(wp); break; //读取气阀当前状态 case CANCMD_READQIFA1TO16: CanCmd_ReadQifa1to16(wp); break; default: break; } }