예제 #1
0
파일: module.c 프로젝트: MosaicHe/MT7620
/*
 * register module to server 
 */
int register2Server()
{
	int ret = -1;
	msg msgbuf;
	int counter=0;
	int srv_fd;
	struct timeval tv;
	tv.tv_sec=1;
	tv.tv_usec=0;

	srv_fd = socket(PF_INET,SOCK_STREAM,0);
	if(srv_fd < 0){
		perror("can't open socket\n");
		exit(1);
	}
	server_addr.sin_port = htons(SERVER_PORT);
	
	ret = connect(srv_fd, (struct sockaddr*)&server_addr, sizeof(struct sockaddr));
	if(ret < 0){
		printf("can not connect to server\n");
		close(srv_fd);
		return -1;
	}
	printf("connect to server\n");

	/*****************************/
	/******** REQ_REGISTER *******/
	/*****************************/
	printModuleInfo();
	ret = sendData(srv_fd, REQ_REGISTER, &g_moduleInfo, sizeof(moduleInfo));
	if(ret < 0){
		/* FIXME */
		printf("%s:sendData error",__FUNCTION__);
		return -1;
	}
	ret = recvData(srv_fd, &msgbuf, &tv);
	if(ret<0 || ret==0 || msgbuf.dataType != RESP_SUCCESS){
		return -1;
	}

	/***********************************/
	/******* REQ_FIRTWARE_UPDATE *******/
	/***********************************/
#ifndef DEBUG_PC
	ret = sendData(srv_fd, REQ_FIRTWARE_UPDATE, g_moduleInfo.fwVersion, 
					sizeof(g_moduleInfo.fwVersion));
#else

	ret = sendData(srv_fd, REQ_FIRTWARE_UPDATE, NULL, 0);
#endif
	if(ret < 0){
		/* FIXME */
		printf("%s:sendData error\n",__FUNCTION__);
		return -1;
	}
	tv.tv_sec=1;
	tv.tv_usec=0;
	ret = recvData(srv_fd, &msgbuf, &tv);
	if(ret<0 || ret==0  || msgbuf.dataType != REQ_FIRTWARE_UPDATE){
		printf("REQ_FIRTWARE_UPDATE response error\n");
		return -1;
	}
	if( *(int*)(msgbuf.dataBuf) == 1 ){
		recvFirmware(srv_fd);
	    //this function will reboot the module!!				
		updateFirmware();
		exit(0);
	}

	/**********************/
	/***** REQ_CONFIG *****/
	/**********************/
	ret = sendData(srv_fd, REQ_CONFIG, NULL, 0);
	if(ret < 0){
		/* FIXME */
		printf("%s:sendData error",__FUNCTION__);
		return -1;
	}
	tv.tv_sec=1;
	tv.tv_usec=0;
	ret = recvData(srv_fd, &msgbuf, &tv);
	if(ret<0 ||ret==0 || msgbuf.dataType != REQ_CONFIG){
		printf("REQ_FIRTWARE_UPDATE response error\n");
		return -1;
	}
	if( msgbuf.dataSize!=0 ){
		//doConfiguration(buf, buflen);
		return -1;
	}

	/***********************/
	/******* REQ_RUN ******/
	/**********************/
	ret = sendData(srv_fd, REQ_RUN, NULL, 0);
	if(ret < 0){
		/* FIXME */
		printf("%s:sendData error",__FUNCTION__);
		return -1;
	}
	tv.tv_sec=1;
	tv.tv_usec=0;
	ret = recvData(srv_fd, &msgbuf, &tv);
	if(ret<0 ||ret==0 || msgbuf.dataType != RESP_SUCCESS){
		printf(" REQ_RUN error\n");
		return -1;
	}
	g_state = STATE_RUN;
	close(srv_fd);
	srv_fd = -1;
	return 0;

}
예제 #2
0
static PyObject* voreenqt_info(PyObject* /*self*/, PyObject* /*args*/) {
    return printModuleInfo("voreenqt"/*, true, 0, 0, true*/);
}