Esempio n. 1
0
File: flappy.c Progetto: vxf/arduino
// clear the whole screen
void clean()
{
  send(CMD, 0x80);  // 0
  send(CMD, 0x40);  // 0

  sendN(LCD_WIDTH * (LCD_HEIGHT/8), 0x00);
}
Esempio n. 2
0
void handleOrder(porder po,char* path,int cfd)
{
//	printf("path:%s\n",path);
	if(ORDER_PWD == po->order)
	{
		data tbuf;
		memset(&tbuf,0,sizeof(tbuf));
		recvN(cfd,(char*)&tbuf.len,sizeof(tbuf.len));
		recvN(cfd,tbuf.buf,tbuf.len);
		printf("%s\n",tbuf.buf);
	}
	else if(ORDER_LS == po->order)
	{
		data tbuf;
		memset(&tbuf,0,sizeof(tbuf));
		recvN(cfd,(char*)&tbuf.len,sizeof(tbuf.len));
		recvN(cfd,tbuf.buf,tbuf.len);
		printf("%-5s%-20s%-10s\n","type","name","size");
		printf("%s\n",tbuf.buf);
	}
	else if(ORDER_CD == po->order)
	{
		data tbuf;
		memset(&tbuf,0,sizeof(tbuf));
		recvN(cfd,(char*)&tbuf.len,sizeof(tbuf.len));
		recvN(cfd,tbuf.buf,tbuf.len);
		printf("%s\n",tbuf.buf);
	}
	else if(ORDER_PUTS == po->order)
	{
		sendFile(cfd,path,po->info);
	}
	else if(ORDER_GETS == po->order)
	{
		recvFile(cfd,path,po->info);
	}
	else if(ORDER_RM == po->order)
	{
		data tbuf;
		memset(&tbuf,0,sizeof(tbuf));
		tbuf.len = strlen(po->info);
		strcpy(tbuf.buf,po->info);
		sendN(cfd,(char*)&tbuf,tbuf.len+sizeof(tbuf.len));
		memset(&tbuf,0,sizeof(tbuf));
		recvN(cfd,(char*)&tbuf.len,sizeof(tbuf.len));
		recvN(cfd,tbuf.buf,tbuf.len);
		printf("%s\n",tbuf.buf);
	}
	else if(ORDER_EXIT == po->order)
	{
		printf("bye bye!\n");
		close(cfd);
		exit(0);
	}
	else
	{
		printf("command not found\n");
	}
}
Esempio n. 3
0
void sendOrder(int fdw,porder po)
{
	data sbuf;
	memset(&sbuf,0,sizeof(sbuf));
	po->infolen = strlen(po->info);
	readOrder(po->info,po->infolen,po);

	//send order to server
	sbuf.len = sizeof(*po);
	memcpy(sbuf.buf,(char*)po,sbuf.len);	
	sendN(fdw,(char*)&sbuf,sbuf.len+sizeof(sbuf.len));
//	printf("len = %d\nbuf = %s\n",sbuf.len,sbuf.buf);
}
Esempio n. 4
0
int srt_client_send(int sockfd, void* data, unsigned int length) {
	int seg_num = (length - 1) / MAX_SEG_LEN + 1;
	int i;
	pthread_mutex_lock(tcb_table[sockfd]->bufMutex);
	for (i = 0; i < seg_num; i++) {
		segBuf_t *segbuf = (segBuf_t *) malloc(sizeof(segBuf_t));
		memset(segbuf, 0, sizeof(segBuf_t));
		segbuf->seg.header.src_port		= tcb_table[sockfd]->client_portNum;
		segbuf->seg.header.dest_port	= tcb_table[sockfd]->svr_portNum;
		segbuf->seg.header.seq_num		= tcb_table[sockfd]->next_seqNum;
		segbuf->seg.header.length		= (i == seg_num - 1 ? (length - i * MAX_SEG_LEN ): MAX_SEG_LEN);
		tcb_table[sockfd]->next_seqNum += segbuf->seg.header.length;
		segbuf->seg.header.type			= DATA;
		segbuf->seg.header.checksum		= 0;
		memcpy(segbuf->seg.data, data + i * MAX_SEG_LEN, segbuf->seg.header.length);
		segbuf->next					= NULL;
	
		if (NULL == tcb_table[sockfd]->sendBufHead) {
			tcb_table[sockfd]->sendBufHead		= segbuf;
			tcb_table[sockfd]->sendBufunSent	= segbuf;
			tcb_table[sockfd]->sendBufTail		= segbuf;
			pthread_t th;
			pthread_create(&th, NULL, sendBuf_timer, (void *) &ind[sockfd]);
		}
		else {
			tcb_table[sockfd]->sendBufTail->next	= segbuf;
			tcb_table[sockfd]->sendBufTail			= segbuf;
			if (NULL == tcb_table[sockfd]->sendBufunSent) {
				tcb_table[sockfd]->sendBufunSent	= segbuf;
			}
		}
	}
	sendN(sockfd);
	pthread_mutex_unlock(tcb_table[sockfd]->bufMutex);
	return 1;
}
Esempio n. 5
0
int handleFileFunctionRequest(int acceptHandle, char *inBuffer, char *outBuffer, int type, int msgSize) {
    int32_t ret = -1;
    int32_t index = -1;
    int32_t mode = -1;
    int32_t flags = -1;
    int32_t fd = -1;
    int32_t maxBytes = -1;

    int sendRet = 0;
    int namelen = 0;
    short extensionId = -1;

    switch (type) {

        case FILE_CTRL_OPEN:
            flags = getInt32(inBuffer, 12);
            mode = getInt32(inBuffer, 16);
            ret = mpOpen(inBuffer + 20, flags, mode);
            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 FILE_CTRL_CREATE:
            flags = getInt32(inBuffer, 12);
            ret = mpCreate(inBuffer + 16, flags);
            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 FILE_CTRL_CLOSE:
            if (msgSize != 12) {
                fprintf(stderr, "tcpSvr: invalid msgSize for mpClose = %d != 12\n", msgSize);
                return -1;
            }
            fd = getInt32(inBuffer, 12);
            if (fd < 1) {
                fprintf(stderr, "tcpSvr: invalid fd for mpRead = %d\n", fd);
                return -1;
            }
            ret = mpClose(fd);
            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 FILE_CTRL_READ:
            fd = getInt32(inBuffer, 12);
            if (fd < 1) {
                fprintf(stderr, "tcpSvr: invalid fd for mpRead = %d\n", fd);
                return -1;
            }
            maxBytes = getInt32(inBuffer, 16);
            if (maxBytes < 1 || maxBytes >= (BUFF_MAX - 8)) {
                fprintf(stderr, "tcpSvr: invalid maxBytes for mpRead = %d max = %d\n", maxBytes,(BUFF_MAX-8));
                return -1;
            }
            ret = mpRead(fd, outBuffer + 8, maxBytes);
            setInt32(outBuffer, 0, 4 + (ret > 0 ? ret : 0));
            setInt32(outBuffer, 4, ret);
            sendRet = sendN(acceptHandle, outBuffer, 8 + (ret > 0 ? ret : 0), 0);
            if (sendRet != 8 + (ret > 0 ? ret : 0)) {
                fprintf(stderr, "tcpSvr: sendRet = %d != 8 + (ret > 0?ret:0)\n", sendRet);
                return -1;
            }
            break;


        case FILE_CTRL_WRITE:
            fd = getInt32(inBuffer, 12);
            if (fd < 1) {
                fprintf(stderr, "tcpSvr: invalid fd for mpRead = %d\n", fd);
                return -1;
            }
            maxBytes = getInt32(inBuffer, 16);
            if (maxBytes < 1 || maxBytes >= (BUFF_MAX - 8)) {
                fprintf(stderr, "tcpSvr: invalid maxBytes for mpRead = %d max = %d\n", maxBytes,(BUFF_MAX-8));
                return -1;
            }
            ret = mpWrite(fd, inBuffer+20, maxBytes);
            setInt32(outBuffer, 0, 4 + (ret > 0 ? ret : 0));
            setInt32(outBuffer, 4, ret);
            sendRet = sendN(acceptHandle, outBuffer, 8 + (ret > 0 ? ret : 0), 0);
            if (sendRet != 8 + (ret > 0 ? ret : 0)) {
                fprintf(stderr, "tcpSvr: sendRet = %d != 8 + (ret > 0?ret:0)\n", sendRet);
                return -1;
            }
            break;

        default:
            fprintf(stderr, "tcpSvr: invalid file function type = %d\n", type);
            return -1;
    }
    return 0;
}
Esempio n. 6
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;
}
Esempio n. 7
0
int handleMotFunctionRequest(int acceptHandle, char *inBuffer, char *outBuffer, int type, int msgSize) {
    int32_t ret = -1;
    int32_t options = 0;
    int32_t controlGroup = 0;
    int32_t timeout = 0;
    int sendRet = 0;
    MP_TARGET target;
    MP_SPEED speed;
    int32_t grpNo = 0;
    int32_t aux = 0;
    int32_t coordType = 0;
    int32_t tool = 0;
    int32_t taskNo = 0;
    int recvId = 0;
    int i = 0;
    switch (type) {
        case MOT_START:
            if (msgSize != 12) {
                fprintf(stderr, "tcpSvr: invalid msgSize for mpMotStart = %d != 12\n", msgSize);
                return -1;
            }
            options = getInt32(inBuffer, 12);
            ret = mpMotStart(options);
            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 MOT_STOP:
            if (msgSize != 12) {
                fprintf(stderr, "tcpSvr: invalid msgSize for mpMotStop = %d != 12\n", msgSize);
                return -1;
            }
            options = getInt32(inBuffer, 12);
            ret = mpMotStop(options);
            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 MOT_TARGET_CLEAR:
            if (msgSize != 16) {
                fprintf(stderr, "tcpSvr: invalid msgSize for mpMotTargetClear = %d != 16\n", msgSize);
                return -1;
            }
            controlGroup = getInt32(inBuffer, 12);
            options = getInt32(inBuffer, 16);
            ret = mpMotTargetClear(controlGroup, options);
            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 MOT_JOINT_TARGET_SEND:
            if (msgSize != 88) {
                fprintf(stderr, "tcpSvr: invalid msgSize for mpMotTargetSend = %d != 88\n", msgSize);
                return -1;
            }
            memset(&target, 0, sizeof (target));
            controlGroup = getInt32(inBuffer, 12);
            target.id = getInt32(inBuffer, 16);
            target.intp = getInt32(inBuffer, 20);
            for (i = 0; i < 8 /* MP_GRP_AXES_NUM */; i++) {
                target.dst.joint[i] = getInt32(inBuffer, 24 + (i * 4));
            }
            for (i = 0; i < 8 /* MP_GRP_AXES_NUM */; i++) {
                target.aux.joint[i] = getInt32(inBuffer, 56 + (i * 4));
            }
            timeout = getInt32(inBuffer, 88);
            ret = mpMotTargetSend(controlGroup, &target, timeout);
            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 MOT_COORD_TARGET_SEND:
            if (msgSize != 88) {
                fprintf(stderr, "tcpSvr: invalid msgSize for mpMotTargetSend = %d != 88\n", msgSize);
                return -1;
            }
            memset(&target, 0, sizeof (target));
            controlGroup = getInt32(inBuffer, 12);
            target.id = getInt32(inBuffer, 16);
            target.intp = getInt32(inBuffer, 20);
            target.dst.coord.x = getInt32(inBuffer, 24);
            target.dst.coord.y = getInt32(inBuffer, 28);
            target.dst.coord.z = getInt32(inBuffer, 32);
            target.dst.coord.rx = getInt32(inBuffer, 36);
            target.dst.coord.ry = getInt32(inBuffer, 40);
            target.dst.coord.rz = getInt32(inBuffer, 44);
            target.dst.coord.ex1 = getInt32(inBuffer, 48);
            target.dst.coord.ex2 = getInt32(inBuffer, 52);
            target.aux.coord.x = getInt32(inBuffer, 56);
            target.aux.coord.y = getInt32(inBuffer, 60);
            target.aux.coord.z = getInt32(inBuffer, 64);
            target.aux.coord.rx = getInt32(inBuffer, 68);
            target.aux.coord.ry = getInt32(inBuffer, 72);
            target.aux.coord.rz = getInt32(inBuffer, 76);
            target.aux.coord.ex1 = getInt32(inBuffer, 80);
            target.aux.coord.ex2 = getInt32(inBuffer, 84);
            timeout = getInt32(inBuffer, 88);
            ret = mpMotTargetSend(controlGroup, &target, timeout);
            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 MOT_TARGET_RECEIVE:
            if (msgSize != 24) {
                fprintf(stderr, "tcpSvr: invalid msgSize for mpMotTargetReceive = %d != 24\n", msgSize);
                return -1;
            }
            grpNo = getInt32(inBuffer, 12);
            target.id = getInt32(inBuffer, 16);
            timeout = getInt32(inBuffer, 20);
            options = getInt32(inBuffer, 24);
            ret = mpMotTargetReceive(grpNo, target.id, &recvId, timeout, options);
            setInt32(outBuffer, 0, 8);
            setInt32(outBuffer, 4, ret);
            setInt32(outBuffer, 8, recvId);
            sendRet = sendN(acceptHandle, outBuffer, 12, 0);
            if (sendRet != 12) {
                fprintf(stderr, "tcpSvr: sendRet = %d != 12\n", sendRet);
                return -1;
            }
            break;

        case MOT_SET_COORD:
            if (msgSize != 20) {
                fprintf(stderr, "tcpSvr: invalid msgSize for mpMotSetCoord = %d != 20\n", msgSize);
                return -1;
            }
            grpNo = getInt32(inBuffer, 12);
            coordType = getInt32(inBuffer, 16);
            aux = getInt32(inBuffer, 20);
            ret = mpMotSetCoord(grpNo, coordType, aux);
            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 MOT_SET_TOOL:
            if (msgSize != 16) {
                fprintf(stderr, "tcpSvr: invalid msgSize for mpMotSetTool = %d != 16\n", msgSize);
                return -1;
            }
            grpNo = getInt32(inBuffer, 12);
            tool = getInt32(inBuffer, 16);
            ret = mpMotSetTool(grpNo, tool);
            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 MOT_SET_SPEED:
            if (msgSize != 32) {
                fprintf(stderr, "tcpSvr: invalid msgSize for mpMotSetSpeed = %d != 32\n", msgSize);
                return -1;
            }
            grpNo = getInt32(inBuffer, 12);
            speed.vj = getInt32(inBuffer, 16);
            speed.v = getInt32(inBuffer, 24);
            speed.vr = getInt32(inBuffer, 32);
            ret = mpMotSetSpeed(grpNo, &speed);
            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 MOT_SET_ORIGIN:
            if (msgSize != 16) {
                fprintf(stderr, "tcpSvr: invalid msgSize for mpMotSetOrigin = %d != 16\n", msgSize);
                return -1;
            }
            grpNo = getInt32(inBuffer, 12);
            options = getInt32(inBuffer, 16);
            ret = mpMotSetOrigin(grpNo, options);
            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 MOT_SET_TASK:
            if (msgSize != 16) {
                fprintf(stderr, "tcpSvr: invalid msgSize for mpMotSetTask = %d != 16\n", msgSize);
                return -1;
            }
            grpNo = getInt32(inBuffer, 12);
            taskNo = getInt32(inBuffer, 16);
            ret = mpMotSetTask(grpNo, taskNo);
            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 MOT_SET_SYNC:
            if (msgSize != 20) {
                fprintf(stderr, "tcpSvr: invalid msgSize for mpMotSetSync = %d != 20\n", msgSize);
                return -1;
            }
            grpNo = getInt32(inBuffer, 12);
            aux = getInt32(inBuffer, 16);
            options = getInt32(inBuffer, 20);
            ret = mpMotSetSync(grpNo, aux, options);
            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 MOT_RESET_SYNC:
            if (msgSize != 12) {
                fprintf(stderr, "tcpSvr: invalid msgSize for mpMotResetSync = %d != 12\n", msgSize);
                return -1;
            }
            grpNo = getInt32(inBuffer, 12);
            ret = mpMotResetSync(grpNo);
            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;

        default:
            fprintf(stderr, "tcpSvr: invalid mot function type = %d\n", type);
            return -1;
    }
    return 0;
}
Esempio n. 8
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;
}
Esempio n. 9
0
void *seghandler(void* arg) {
	seg_t seg_recv;
	while (1 == snp_recvseg(connection, &seg_recv)) {
		int i;
		unsigned short int client_portNum	= seg_recv.header.dest_port;
		unsigned short int type				= seg_recv.header.type;
		client_tcb_t *tcb = NULL;
		for (i = 0; i < MAX_TRANSPORT_CONNECTIONS; i++) {
			pthread_mutex_lock(lock[i]);
			if (NULL != tcb_table[i] && client_portNum == tcb_table[i]->client_portNum) {
				tcb = tcb_table[i];
				break;
			}
			pthread_mutex_unlock(lock[i]);
		}
		if (NULL == tcb) {
			printf("%s There is no TCB matching port number %d.\n", output, client_portNum);
		}
		else {
			switch (tcb->state) {
				case CLOSED:
					break;
				case SYNSENT:
					if (SYNACK == type) {
						printf("%s TCB[%d] Received SYNACK!\n", output, i);
						printf("%s TCB[%d] State (SYNSENT) ==> (CONNECTED)\n", output, i);
						tcb->state = CONNECTED;
					}
					break;
				case CONNECTED:
					if (DATAACK == type) {
						printf("%s TCB[%d] Received DATAACK! Server Expect %d.\n", output, i, seg_recv.header.ack_num);
						pthread_mutex_lock(tcb->bufMutex);
						while (NULL != tcb->sendBufHead && tcb->sendBufHead->seg.header.seq_num < seg_recv.header.ack_num) {
							printf("%s TCB[%d] Free %d.\n", output, i, tcb->sendBufHead->seg.header.seq_num);
							segBuf_t *temp = tcb->sendBufHead;
							tcb->sendBufHead = tcb->sendBufHead->next;
							free(temp);
							tcb->unAck_segNum--;
						}
						if (NULL != tcb->sendBufHead) {
							sendN(i);
						}
						pthread_mutex_unlock(tcb->bufMutex);
					}
					break;
				case FINWAIT:
					if (FINACK == type) {
						printf("%s TCB[%d] Received FINACK!\n", output, i);
						printf("%s TCB[%d] State (FINWAIT) ==> (CLOSED)\n", output, i);
						tcb->state = CLOSED;
					}
					break;
				default:
					break;
			}
			pthread_mutex_unlock(lock[i]);
		}
	}
	return NULL;
}
 CATCH_NEXTROW()
 {
     ActivityTimer t(totalCycles, timeActivities);
     OwnedConstThorRow ret;
     Owned<IException> exception;
     if (first) // only return 1!
     {
         try
         {
             first = false;
             initN();
             if (RCMAX==N) // indicates before start of dataset e.g. ds[0]
             {
                 RtlDynamicRowBuilder row(queryRowAllocator());
                 size32_t sz = helper->createDefault(row);
                 ret.setown(row.finalizeRowClear(sz));
                 N = 0; // return that processed all
             }
             else if (N)
             {
                 while (!abortSoon)
                 {
                     ret.setown(input->ungroupedNextRow());
                     if (!ret)
                         break;
                     N--;
                     {
                         SpinBlock block(spin);
                         if (lookaheadN<startN) // will not reach N==0, so don't bother continuing to read
                         {
                             N = startN-lookaheadN;
                             ret.clear();
                             break;
                         }
                     }
                     if (0==N)
                         break;
                 }
                 if ((N!=0)&&createDefaultIfFail)
                 {
                     N = 0; // return that processed all (i.e. none left)
                     RtlDynamicRowBuilder row(queryRowAllocator());
                     size32_t sz = helper->createDefault(row);
                     ret.setown(row.finalizeRowClear(sz));
                 }
             }
             if (startN && 0 == N)
                 seenNth = true;
         }
         catch (IException *e)
         {
             N=0;
             exception.setown(e);
         }
         sendN();
         if (exception.get())
             throw exception.getClear();
     }
     if (ret) 
         dataLinkIncrement();
     return ret.getClear();
 }