Example #1
0
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;
    }
}
Example #2
0
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;
    }
}