Пример #1
0
  void AFRA::setGlobalEntry(globalafraentry newEntry, uint32_t no) {
    int offset = 13 + 12 * getEntryCount() + 4;
    if (getLongOffsets()) {
      offset = 13 + 16 * getEntryCount() + 4;
    }
    int entrysize = 20;
    if (getLongIDs()) {
      entrysize += 4;
    }
    if (getLongOffsets()) {
      entrysize += 8;
    }

    setInt64(newEntry.time, offset + entrysize * no);
    if (getLongIDs()) {
      setInt32(newEntry.segment, offset + entrysize * no + 8);
      setInt32(newEntry.fragment, offset + entrysize * no + 12);
    } else {
      setInt16(newEntry.segment, offset + entrysize * no + 8);
      setInt16(newEntry.fragment, offset + entrysize * no + 10);
    }
    if (getLongOffsets()) {
      setInt64(newEntry.afraoffset, offset + entrysize * no + entrysize - 16);
      setInt64(newEntry.offsetfromafra, offset + entrysize * no + entrysize - 8);
    } else {
      setInt32(newEntry.afraoffset, offset + entrysize * no + entrysize - 8);
      setInt32(newEntry.offsetfromafra, offset + entrysize * no + entrysize - 4);
    }

    if (getInt32(offset - 4) < no + 1) {
      setInt32(no + 1, offset - 4);
    }
  }
Пример #2
0
 /// Gets the 16 bits integer at the given index.
 /// Attempts to resize the data pointer if the index is out of range.
 /// Returns zero if resizing failed.
 short Box::getInt16(size_t index) {
   index += payloadOffset;
   if (index + 1 >= boxedSize()) {
     if (!reserve(index, 0, 2)) {
       return 0;
     }
     setInt16(0, index - payloadOffset);
   }
   short result;
   memcpy((char *) &result, data + index, 2);
   return ntohs(result);
 }
Пример #3
0
int handleExFileFunctionRequest(int acceptHandle, char *inBuffer, char *outBuffer, int type, int msgSize) {
    int32_t ret = -1;
    int32_t index = -1;
    int32_t ramDriveId = -1;
    int32_t fileNameOffset = -1;
    int32_t fd = -1;

    int sendRet = 0;
    int namelen = 0;
    short extensionId = -1;
    MP_FILE_NAME_SEND_DATA fileNameSendData;
    MP_GET_JOBLIST_RSP_DATA jobListData;

    switch (type) {

        case EX_FILE_CTRL_GET_FILE_COUNT:
            if (msgSize != 10) {
                fprintf(stderr, "tcpSvr: invalid msgSize for mpGetFileCount = %d != 10\n", msgSize);
                return -1;
            }
            extensionId = getInt16(inBuffer, 12);
            if (extensionId < 1 || extensionId > 2) {
                fprintf(stderr, "tcpSvr: invalid extensionId for mpGetFileCount = %d  (must be 1 or 2)\n", extensionId);
                return -1;
            }
            lastExtensionId = -1;
            ret = mpRefreshFileList(extensionId);
            if (ret != 0) {
                setInt32(outBuffer, 0, 4);
                setInt32(outBuffer, 4, ret);
                sendRet = sendN(acceptHandle, outBuffer, 8, 0);
                if (sendRet != 8) {
                    fprintf(stderr, "tcpSvr: sendRet = %d != 8\n", sendRet);
                    return -1;
                }
                return 0;
            }
            lastExtensionId = extensionId;
            ret = mpGetFileCount();
            setInt32(outBuffer, 0, 8);
            setInt32(outBuffer, 4, 0);
            setInt32(outBuffer, 8, ret);
            sendRet = sendN(acceptHandle, outBuffer, 12, 0);
            if (sendRet != 12) {
                fprintf(stderr, "tcpSvr: sendRet = %d != 12\n", sendRet);
                return -1;
            }
            break;

        case EX_FILE_CTRL_GET_FILE_NAME:
            extensionId = getInt16(inBuffer, 12);
            if (extensionId < 1 || extensionId > 2) {
                fprintf(stderr, "tcpSvr: invalid extensionId for mpGetFileName = %d  (must be 1 or 2)\n", extensionId);
                return -1;
            }
            if (extensionId != lastExtensionId) {
                lastExtensionId = -1;
                ret = mpRefreshFileList(extensionId);
                if (ret != 0) {
                    setInt32(outBuffer, 0, 4);
                    setInt32(outBuffer, 4, ret);
                    lastExtensionId = -1;
                    sendRet = sendN(acceptHandle, outBuffer, 8, 0);
                    if (sendRet != 8) {
                        fprintf(stderr, "tcpSvr: sendRet = %d != 8\n", sendRet);
                        return -1;
                    }
                    return 0;
                }
            }
            index = getInt32(inBuffer, 14);
            ret = mpGetFileName(index, outBuffer + 12);
            namelen = strlen(outBuffer + 12);
            setInt32(outBuffer, 0, 8 + namelen + 1);
            setInt32(outBuffer, 4, 0);
            setInt32(outBuffer, 8, ret);
            sendRet = sendN(acceptHandle, outBuffer, 12 + namelen + 1, 0);
            if (sendRet != 12 + namelen + 1) {
                fprintf(stderr, "tcpSvr: sendRet = %d != 12+namelen+1\n", sendRet);
                return -1;
            }
            break;

        case EX_FILE_CTRL_LOAD_FILE:
            ramDriveId = getInt32(inBuffer, 12);
            if (ramDriveId < 1 || ramDriveId > 2) {
                fprintf(stderr, "tcpSvr: invalid ramDriveId for mpLoadFile = %d  (must be 1 or 2)\n", ramDriveId);
                return -1;
            }
            fileNameOffset = getInt32(inBuffer, 16);
            if (fileNameOffset < 20 || fileNameOffset > (BUFF_MAX - 21)) {
                fprintf(stderr, "tcpSvr: invalid fileNameOffset for mpLoadFile = %d  \n", fileNameOffset);
                return -1;
            }
            ret = mpLoadFile(ramDriveId, inBuffer + 20, inBuffer + fileNameOffset);
            setInt32(outBuffer, 0, 4);
            setInt32(outBuffer, 4, ret);
            sendRet = sendN(acceptHandle, outBuffer, 8, 0);
            if (sendRet != 8) {
                fprintf(stderr, "tcpSvr: sendRet = %d != 8\n", sendRet);
                return -1;
            }
            break;

        case EX_FILE_CTRL_SAVE_FILE:
            ramDriveId = getInt32(inBuffer, 12);
            if (ramDriveId < 1 || ramDriveId > 2) {
                fprintf(stderr, "tcpSvr: invalid ramDriveId for mpSaveFile = %d  (must be 1 or 2)\n", ramDriveId);
                return -1;
            }
            fileNameOffset = getInt32(inBuffer, 16);
            if (fileNameOffset < 20 || fileNameOffset > (BUFF_MAX - 21)) {
                fprintf(stderr, "tcpSvr: invalid fileNameOffset for mpSaveFile = %d  \n", fileNameOffset);
                return -1;
            }
            ret = mpSaveFile(ramDriveId, inBuffer + 20, inBuffer + fileNameOffset);
            setInt32(outBuffer, 0, 4);
            setInt32(outBuffer, 4, ret);
            sendRet = sendN(acceptHandle, outBuffer, 8, 0);
            if (sendRet != 8) {
                fprintf(stderr, "tcpSvr: sendRet = %d != 8\n", sendRet);
                return -1;
            }
            break;

        case EX_FILE_CTRL_FD_READ_FILE:
            fd = getInt32(inBuffer, 12);
            if(fd == -99) {
                fd = acceptHandle;
            }
            if (fd < 1 ) {
                fprintf(stderr, "tcpSvr: invalid fd for mpFdReadFile = %d\n", ramDriveId);
                return -1;
            }
            memset(&fileNameSendData,0,sizeof(fileNameSendData));
            strcpy(fileNameSendData.cFileName,inBuffer+16);
            ret = mpFdReadFile(fd, &fileNameSendData);
            setInt32(outBuffer, 0, 4);
            setInt32(outBuffer, 4, ret);
            sendRet = sendN(acceptHandle, outBuffer, 8, 0);
            if (sendRet != 8) {
                fprintf(stderr, "tcpSvr: sendRet = %d != 8\n", sendRet);
                return -1;
            }
            break;
            
        case EX_FILE_CTRL_FD_WRITE_FILE:
            fd = getInt32(inBuffer, 12);
            if(fd == -99) {
                fd = acceptHandle;
            }
            if (fd < 1 ) {
                fprintf(stderr, "tcpSvr: invalid fd for mpFdWriteFile = %d\n", ramDriveId);
                return -1;
            }
            memset(&fileNameSendData,0,sizeof(fileNameSendData));
            strcpy(fileNameSendData.cFileName,inBuffer+16);
            ret = mpFdWriteFile(fd, &fileNameSendData);
            setInt32(outBuffer, 0, 4);
            setInt32(outBuffer, 4, ret);
            sendRet = sendN(acceptHandle, outBuffer, 8, 0);
            if (sendRet != 8) {
                fprintf(stderr, "tcpSvr: sendRet = %d != 8\n", sendRet);
                return -1;
            }
            break;
            
        case EX_FILE_CTRL_FD_GET_JOB_LIST:
            fd = getInt32(inBuffer, 12);
            if(fd == -99) {
                fd = acceptHandle;
            }
            if (fd < 1 ) {
                fprintf(stderr, "tcpSvr: invalid fd for mpFdGetJobList = %d  (must be 1 or 2)\n", ramDriveId);
                return -1;
            }
            memset(&jobListData,0,sizeof(jobListData));
            ret = mpFdGetJobList(fd, &jobListData);
            setInt32(outBuffer, 0, 10);
            setInt32(outBuffer, 4, ret);
            setInt16(outBuffer,8,jobListData.err_no);
            setInt16(outBuffer,10,jobListData.uIsEndFlag);
            setInt16(outBuffer,12,jobListData.uListDataNum);
            sendRet = sendN(acceptHandle, outBuffer, 14, 0);
            if (sendRet != 14) {
                fprintf(stderr, "tcpSvr: sendRet = %d != 14\n", sendRet);
                return -1;
            }
            break;

        default:
            fprintf(stderr, "tcpSvr: invalid file function type = %d\n", type);
            return -1;
    }
    return 0;
}
Пример #4
0
int handleSys1FunctionRequest(int acceptHandle, char *inBuffer, char *outBuffer, int type, int msgSize) {

    int sendRet = 0;
    int i = 0;
    MP_VAR_INFO varInfo[25];
    MP_VAR_DATA varData[25];
    MP_IO_INFO ioInfo[25];
    MP_IO_DATA ioData[25];
    LONG rData[25];
    USHORT iorData[25];
    MP_MODE_RSP_DATA modeData;
    MP_CYCLE_RSP_DATA cycleData;
    MP_ALARM_STATUS_RSP_DATA alarmStatusData;
    MP_ALARM_CODE_RSP_DATA alarmCodeData;
    LONG num;
    int ret;
    MP_CTRL_GRP_SEND_DATA ctrlGrpSendData;
    MP_CART_POS_RSP_DATA cartPosRspData;
    MP_PULSE_POS_RSP_DATA pulsePosRspData;
    MP_FB_PULSE_POS_RSP_DATA fbPulsePosRspData;
    MP_DEG_POS_RSP_DATA_EX degPosRspDataEx;
    MP_SERVO_POWER_RSP_DATA servoPowerRspData;
    MP_SERVO_POWER_SEND_DATA servoPowerSendData;
    MP_STD_RSP_DATA stdRspData;

    int32_t controlGroup = 0;
    int nowait = NO_WAIT;
    int waitforever = WAIT_FOREVER;

    switch (type) {
        case SYS1_GET_VAR_DATA:
            num = getInt32(inBuffer, 12);
            if (num < 1 || num > 24) {
                fprintf(stderr, "tcpSvr: invalid num for mpGetVarData num = %ld\n", num);
                return -1;
            }
            if (msgSize != 12 + (4 * num)) {
                fprintf(stderr, "tcpSvr: invalid msgSize for mpGetVarData = %d != %ld for num = %ld\n", msgSize, 12 + (4 * num), num);
                return -1;
            }
            for (i = 0; i < num; i++) {
                varInfo[i].usType = getInt16(inBuffer, 16 + (4 * i));
                varInfo[i].usIndex = getInt16(inBuffer, 18 + (4 * i));
            }
            ret = mpGetVarData(varInfo, rData, num);
            setInt32(outBuffer, 0, 4 + num * 4);
            setInt32(outBuffer, 4, ret);
            for (i = 0; i < num; i++) {
                setInt32(outBuffer, 8 + i * 4, rData[i]);
            }
            sendRet = sendN(acceptHandle, outBuffer, 8 + num * 4, 0);
            if (sendRet != 8 + num * 4) {
                fprintf(stderr, "tcpSvr: sendRet = %d != 8 + num*4\n", sendRet);
                return -1;
            }
            break;

        case SYS1_PUT_VAR_DATA:
            num = getInt32(inBuffer, 12);
            if (num < 1 || num > 24) {
                fprintf(stderr, "tcpSvr: invalid num for mpPutVarData num = %ld\n", num);
                return -1;
            }
            if (msgSize != 12 + (num * 8)) {
                fprintf(stderr, "tcpSvr: invalid msgSize for mpPutVarData = %d != %ld for num = %ld\n", msgSize, 12 + (num * 8), num);
                return -1;
            }
            for (i = 0; i < num; i++) {
                varData[i].usType = getInt16(inBuffer, 16 + (8 * i));
                varData[i].usIndex = getInt16(inBuffer, 18 + (8 * i));
                varData[i].ulValue = getInt32(inBuffer, 20 + (8 * i));
            }
            ret = mpPutVarData(varData, num);
            setInt32(outBuffer, 0, 4);
            setInt32(outBuffer, 4, ret);
            sendRet = sendN(acceptHandle, outBuffer, 8, 0);
            if (sendRet != 8) {
                fprintf(stderr, "tcpSvr: sendRet = %d != 8\n", sendRet);
                return -1;
            }
            break;

        case SYS1_GET_CURRENT_CART_POS:
            if (msgSize != 12) {
                fprintf(stderr, "tcpSvr: invalid msgSize for mpMotTargetClear = %d != 12\n", msgSize);
                return -1;
            }
            memset(&ctrlGrpSendData, 0, sizeof (ctrlGrpSendData));
            memset(&cartPosRspData, 0, sizeof (cartPosRspData));
            controlGroup = getInt32(inBuffer, 12);
            ctrlGrpSendData.sCtrlGrp = controlGroup;
            ret = mpGetCartPos(&ctrlGrpSendData, &cartPosRspData);
            setInt32(outBuffer, 0, 54);
            setInt32(outBuffer, 4, ret);
            for (i = 0; i < 6; i++) {
                setInt32(outBuffer, 8 + 4 * i, cartPosRspData.lPos[i]);
            }
            setInt16(outBuffer, 56, cartPosRspData.sConfig);
            sendRet = sendN(acceptHandle, outBuffer, 58, 0);
            if (sendRet != 58) {
                fprintf(stderr, "tcpSvr: sendRet = %d != 58\n", sendRet);
                return -1;
            }
            break;

        case SYS1_GET_CURRENT_PULSE_POS:
            if (msgSize != 12) {
                fprintf(stderr, "tcpSvr: invalid msgSize for mpMotTargetClear = %d != 12\n", msgSize);
                return -1;
            }
            memset(&ctrlGrpSendData, 0, sizeof (ctrlGrpSendData));
            memset(&pulsePosRspData, 0, sizeof (pulsePosRspData));
            controlGroup = getInt32(inBuffer, 12);
            ctrlGrpSendData.sCtrlGrp = controlGroup;
            ret = mpGetPulsePos(&ctrlGrpSendData, &pulsePosRspData);
            setInt32(outBuffer, 0, 68);
            setInt32(outBuffer, 4, ret);
            for (i = 0; i < 8; i++) {
                setInt32(outBuffer, 8 + 4 * i, pulsePosRspData.lPos[i]);
            }
            sendRet = sendN(acceptHandle, outBuffer, 72, 0);
            if (sendRet != 72) {
                fprintf(stderr, "tcpSvr: sendRet = %d != 72\n", sendRet);
                return -1;
            }
            break;

        case SYS1_GET_CURRENT_FEEDBACK_PULSE_POS:
            if (msgSize != 12) {
                fprintf(stderr, "tcpSvr: invalid msgSize for mpMotTargetClear = %d != 12\n", msgSize);
                return -1;
            }
            memset(&ctrlGrpSendData, 0, sizeof (ctrlGrpSendData));
            memset(&fbPulsePosRspData, 0, sizeof (fbPulsePosRspData));
            controlGroup = getInt32(inBuffer, 12);
            ctrlGrpSendData.sCtrlGrp = controlGroup;
            ret = mpGetFBPulsePos(&ctrlGrpSendData, &fbPulsePosRspData);
            setInt32(outBuffer, 0, 68);
            setInt32(outBuffer, 4, ret);
            for (i = 0; i < 8; i++) {
                setInt32(outBuffer, 8 + 4 * i, fbPulsePosRspData.lPos[i]);
            }
            sendRet = sendN(acceptHandle, outBuffer, 72, 0);
            if (sendRet != 72) {
                fprintf(stderr, "tcpSvr: sendRet = %d != 72\n", sendRet);
                return -1;
            }
            break;

        case SYS1_GET_DEG_POS_EX:
            if (msgSize != 12) {
                fprintf(stderr, "tcpSvr: invalid msgSize for mpMotTargetClear = %d != 12\n", msgSize);
                return -1;
            }
            memset(&ctrlGrpSendData, 0, sizeof (ctrlGrpSendData));
            memset(&degPosRspDataEx, 0, sizeof (degPosRspDataEx));
            controlGroup = getInt32(inBuffer, 12);
            ctrlGrpSendData.sCtrlGrp = controlGroup;
            ret = mpGetDegPosEx(&ctrlGrpSendData, &degPosRspDataEx);
            setInt32(outBuffer, 0, 132);
            setInt32(outBuffer, 4, ret);
            for (i = 0; i < 8; i++) {
                setInt32(outBuffer, 8 + 4 * i, degPosRspDataEx.lDegPos[i]);
            }
            for (i = 0; i < 8; i++) {
                setInt32(outBuffer, 72 + 4 * i, degPosRspDataEx.lDegUnit[i]);
            }
            sendRet = sendN(acceptHandle, outBuffer, 136, 0);
            if (sendRet != 136) {
                fprintf(stderr, "tcpSvr: sendRet = %d != 136\n", sendRet);
                return -1;
            }
            break;


        case SYS1_GET_SERVO_POWER:
            if (msgSize != 8) {
                fprintf(stderr, "tcpSvr: invalid msgSize for mpGetServoPower = %d != 8\n", msgSize);
                return -1;
            }
            memset(&servoPowerRspData, 0, sizeof (servoPowerRspData));
            ret = mpGetServoPower(&servoPowerRspData);
            setInt32(outBuffer, 0, 6);
            setInt32(outBuffer, 4, ret);
            setInt16(outBuffer, 8, servoPowerRspData.sServoPower);
            sendRet = sendN(acceptHandle, outBuffer, 10, 0);
            if (sendRet != 10) {
                fprintf(stderr, "tcpSvr: sendRet = %d != 10\n", sendRet);
                return -1;
            }
            break;

        case SYS1_SET_SERVO_POWER:
            if (msgSize != 10) {
                fprintf(stderr, "tcpSvr: invalid msgSize for mpSetServoPower = %d != 12\n", msgSize);
                return -1;
            }
            memset(&servoPowerSendData, 0, sizeof (servoPowerSendData));
            memset(&stdRspData, 0, sizeof (stdRspData));
            servoPowerSendData.sServoPower = getInt16(inBuffer, 12);
            ret = mpSetServoPower(&servoPowerSendData, &stdRspData);
            setInt32(outBuffer, 0, 6);
            setInt32(outBuffer, 4, ret);
            setInt16(outBuffer, 8, stdRspData.err_no);
            sendRet = sendN(acceptHandle, outBuffer, 10, 0);
            if (sendRet != 10) {
                fprintf(stderr, "tcpSvr: sendRet = %d != 136\n", sendRet);
                return -1;
            }
            break;


        case SYS1_READIO:
            num = getInt32(inBuffer, 12);
            if (num < 1 || num > 24) {
                fprintf(stderr, "tcpSvr: invalid num for mpReadIO num = %ld\n", num);
                return -1;
            }
            if (msgSize != 12 + (4 * num)) {
                fprintf(stderr, "tcpSvr: invalid msgSize for mpReadIO = %d != %ld for num = %ld\n", msgSize, 12 + (4 * num), num);
                return -1;
            }
            for (i = 0; i < num; i++) {
                ioInfo[i].ulAddr = getInt32(inBuffer, 16 + (4 * i));
            }
            memset(iorData, 0, sizeof (iorData));
            ret = mpReadIO(ioInfo, iorData, num);
            setInt32(outBuffer, 0, 4 + num * 2);
            setInt32(outBuffer, 4, ret);
            for (i = 0; i < num; i++) {
                setInt16(outBuffer, 8 + i * 2, iorData[i]);
            }
            sendRet = sendN(acceptHandle, outBuffer, 8 + num * 2, 0);
            if (sendRet != 8 + num * 2) {
                fprintf(stderr, "tcpSvr: sendRet = %d != 8 + num*4\n", sendRet);
                return -1;
            }
            break;

        case SYS1_WRITEIO:
            num = getInt32(inBuffer, 12);
            if (num < 1 || num > 24) {
                fprintf(stderr, "tcpSvr: invalid num for mpPutVarData num = %ld\n", num);
                return -1;
            }
            if (msgSize != 12 + (num * 8)) {
                fprintf(stderr, "tcpSvr: invalid msgSize for mpPutVarData = %d != %ld for num = %ld\n", msgSize, 12 + (num * 8), num);
                return -1;
            }
            for (i = 0; i < num; i++) {
                ioData[i].ulAddr = getInt32(inBuffer, 16 + (8 * i));
                ioData[i].ulValue = getInt32(inBuffer, 20 + (8 * i));
            }
            ret = mpWriteIO(ioData, num);
            setInt32(outBuffer, 0, 4);
            setInt32(outBuffer, 4, ret);
            sendRet = sendN(acceptHandle, outBuffer, 8, 0);
            if (sendRet != 8) {
                fprintf(stderr, "tcpSvr: sendRet = %d != 8\n", sendRet);
                return -1;
            }
            break;

        case SYS1_GET_MODE:
            if (msgSize != 8) {
                fprintf(stderr, "tcpSvr: invalid msgSize for mpGetMode = %d != 8\n", msgSize);
                return -1;
            }
            memset(&modeData, 0, sizeof (modeData));
            ret = mpGetMode(&modeData);
            setInt32(outBuffer, 0, 8);
            setInt32(outBuffer, 4, ret);
            setInt16(outBuffer, 8, modeData.sMode);
            setInt16(outBuffer, 10, modeData.sRemote);
            sendRet = sendN(acceptHandle, outBuffer, 12, 0);
            if (sendRet != 12) {
                fprintf(stderr, "tcpSvr: sendRet = %d != 12\n", sendRet);
                return -1;
            }
            break;

        case SYS1_GET_CYCLE:
            if (msgSize != 8) {
                fprintf(stderr, "tcpSvr: invalid msgSize for mpGetCycle = %d != 8\n", msgSize);
                return -1;
            }
            memset(&cycleData, 0, sizeof (cycleData));
            ret = mpGetCycle(&cycleData);
            setInt32(outBuffer, 0, 6);
            setInt32(outBuffer, 4, ret);
            setInt16(outBuffer, 8, cycleData.sCycle);
            sendRet = sendN(acceptHandle, outBuffer, 10, 0);
            if (sendRet != 10) {
                fprintf(stderr, "tcpSvr: sendRet = %d != 10\n", sendRet);
                return -1;
            }
            break;

        case SYS1_GET_ALARM_STATUS:
            if (msgSize != 8) {
                fprintf(stderr, "tcpSvr: invalid msgSize for mpGetAlarmStatus = %d != 8\n", msgSize);
                return -1;
            }
            memset(&alarmStatusData, 0, sizeof (alarmStatusData));
            ret = mpGetAlarmStatus(&alarmStatusData);
            setInt32(outBuffer, 0, 6);
            setInt32(outBuffer, 4, ret);
            setInt16(outBuffer, 8, alarmStatusData.sIsAlarm);
            sendRet = sendN(acceptHandle, outBuffer, 10, 0);
            if (sendRet != 10) {
                fprintf(stderr, "tcpSvr: sendRet = %d != 10\n", sendRet);
                return -1;
            }
            break;

        case SYS1_GET_ALARM_CODE:
            if (msgSize != 8) {
                fprintf(stderr, "tcpSvr: invalid msgSize for mpGetAlarmCode = %d != 8\n", msgSize);
                return -1;
            }
            memset(&alarmCodeData, 0, sizeof (alarmCodeData));
            ret = mpGetAlarmCode(&alarmCodeData);
            setInt32(outBuffer, 0, 10 + 4 * ((alarmCodeData.usAlarmNum > 4) ? 4 : alarmCodeData.usAlarmNum));
            setInt32(outBuffer, 4, ret);
            setInt16(outBuffer, 8, alarmCodeData.usErrorNo);
            setInt16(outBuffer, 10, alarmCodeData.usErrorData);
            setInt16(outBuffer, 12, alarmCodeData.usAlarmNum);
            for (i = 0; i < alarmCodeData.usAlarmNum && i < 4; i++) {
                setInt16(outBuffer, 14 + i * 4, alarmCodeData.AlarmData.usAlarmNo[i]);
                setInt16(outBuffer, 16 + i * 4, alarmCodeData.AlarmData.usAlarmData[i]);
            }
            sendRet = sendN(acceptHandle, outBuffer, 14 + 4 * ((alarmCodeData.usAlarmNum > 4) ? 4 : alarmCodeData.usAlarmNum), 0);
            if (sendRet != 14 + 4 * ((alarmCodeData.usAlarmNum > 4) ? 4 : alarmCodeData.usAlarmNum)) {
                fprintf(stderr, "tcpSvr: sendRet = %d != 14 +4*((alarmCodeData.usAlarmNum>4)?4:alarmCodeData.usAlarmNum)\n", sendRet);
                return -1;
            }
            break;

        default:
            fprintf(stderr, "tcpSvr: invalid sys1 function type = %d\n", type);
            return -1;
    }
    return 0;
}
Пример #5
0
size_t Variant::deserialize(const unsigned char *buffer, size_t size)
{
    if (buffer != NULL && size > 0)
    {
        Variant::Type type = static_cast<Variant::Type>(*buffer);
        ++buffer;

        switch (type)
        {
            case UINT8:
            {
                typedef uint8_t Type;

                if ((size - 1) < sizeof(Type))
                    return 0;
                else
                {
                    setUint8(static_cast<Type>(*buffer));
                    size = sizeof(Type) + 1;
                }

                break;
            }

            case INT8:
            {
                typedef uint8_t Type;

                if ((size - 1) < sizeof(Type))
                    return 0;
                else
                {
                    setInt8(static_cast<Type>(*buffer));
                    size = sizeof(Type) + 1;
                }

                break;
            }

            case UINT16:
            {
                typedef uint16_t Type;

                if ((size - 1) < sizeof(Type))
                    return 0;
                else
                {
                    setUint16(ntohs(*reinterpret_cast<const Type *>(buffer)));
                    size = sizeof(Type) + 1;
                }

                break;
            }

            case INT16:
            {
                typedef int16_t Type;

                if ((size - 1) < sizeof(Type))
                    return 0;
                else
                {
                    setInt16(ntohs(*reinterpret_cast<const Type *>(buffer)));
                    size = sizeof(Type) + 1;
                }

                break;
            }

            case UINT32:
            {
                typedef uint32_t Type;

                if ((size - 1) < sizeof(Type))
                    return 0;
                else
                {
                    setUint32(ntohl(*reinterpret_cast<const Type *>(buffer)));
                    size = sizeof(Type) + 1;
                }

                break;
            }

            case INT32:
            {
                typedef int32_t Type;

                if ((size - 1) < sizeof(Type))
                    return 0;
                else
                {
                    setInt32(ntohl(*reinterpret_cast<const Type *>(buffer)));
                    size = sizeof(Type) + 1;
                }

                break;
            }

            case UINT64:
            {
                typedef uint64_t Type;

                if ((size - 1) < sizeof(Type))
                    return 0;
                else
                {
                    setUint64(ntohll(*reinterpret_cast<const Type *>(buffer)));
                    size = sizeof(Type) + 1;
                }

                break;
            }

            case INT64:
            {
                typedef int64_t Type;

                if ((size - 1) < sizeof(Type))
                    return 0;
                else
                {
                    setInt64(ntohll(*reinterpret_cast<const Type *>(buffer)));
                    size = sizeof(Type) + 1;
                }

                break;
            }

            case FLOAT:
            {
                typedef uint32_t Type;

                if ((size - 1) < sizeof(Type))
                    return 0;
                else
                {
                    setFloat(ntohf(*reinterpret_cast<const Type *>(buffer)));
                    size = sizeof(Type) + 1;
                }

                break;
            }

            case DOUBLE:
            {
                typedef uint64_t Type;

                if ((size - 1) < sizeof(Type))
                    return 0;
                else
                {
                    setDouble(ntohd(*reinterpret_cast<const Type *>(buffer)));
                    size = sizeof(Type) + 1;
                }
                break;
            }

            case BOOL:
            {
                typedef bool Type;

                if ((size - 1) < sizeof(Type))
                    return 0;
                else
                {
                    setBool(*reinterpret_cast<const Type *>(buffer));
                    size = sizeof(Type) + 1;
                }

                break;
            }

            case CHAR:
            {
                typedef char Type;

                if ((size - 1) < sizeof(Type))
                    return 0;
                else
                {
                    setChar(*reinterpret_cast<const Type *>(buffer));
                    size = sizeof(Type) + 1;
                }

                break;
            }

            case STRING:
            {
                typedef uint32_t Type;

                if ((size - 1) < sizeof(Type))
                    return 0;
                else
                {
                    Type len = ntohl(*reinterpret_cast<const Type *>(buffer));

                    if (len > 0 && len <= ((size - 1) - sizeof(Type)))
                        setString(reinterpret_cast<const char *>(buffer + sizeof(Type)), len);

                    size = sizeof(Type) + 1 + len;
                }

                break;
            }

            case BINARY:
            {
                typedef uint32_t Type;

                if ((size - 1) < sizeof(Type))
                    return 0;
                else
                {
                    Type len = ntohl(*reinterpret_cast<const Type *>(buffer));

                    if (len > 0 && len <= ((size - 1) - sizeof(Type)))
                        setBinary(reinterpret_cast<const unsigned char *>(buffer + sizeof(Type)), len);

                    size = sizeof(Type) + 1 + len;
                }

                break;
            }
        }

        return size;
    }

    return 0;
}