Esempio n. 1
0
boolean processPIDCrit(BowlerPacket * Packet){
	uint8_t i=0;
	switch (Packet->use.head.RPC){
	case KPID:
		for(i=0;i<getNumberOfPidChannels();i++){
			getPidGroupDataTable(i)->config.Enabled = true; 
			setOutput(i,0.0);
			getPidGroupDataTable(i)->config.Enabled = false; 
			getPidVelocityDataTable(i)->enabled=false; 
			getPidGroupDataTable(i)->Output=0.0;
		}
		READY(Packet,zone,0);
		break;
	case CPID:
		if(ConfigPID(Packet)){
			READY(Packet,zone,1);
		}else
			ERR(Packet,zone,1);
		break;
	case CPDV:
		if(ConfigPDVelovity(Packet)){
			READY(Packet,zone,1);
		}else
			ERR(Packet,zone,1);
		break;
	default:
		return false; 
	}
	return true; 
}
BOOL SetChanelValueFromPacket(BowlerPacket * Packet){
	BYTE pin = Packet->use.data[0];
	BYTE mode = GetChannelMode(pin);
	if(isStremChannelMode(mode)){
		if(setChanelValueHWPtr!=NULL)
			// Load the data directly into the packet as the buffer
			//Data pointer is offset by one to start after the pin index
			setChanelValueHWPtr(pin,
								Packet->use.head.DataLegnth-(4+1),
								(INT32 *)(Packet->use.data+1),
								(float)0);
			READY(Packet,1,3);
	}else{
		INT32 data = 0;
		INT32 time = 0;

		if(isSingleByteMode(mode)){
			data = Packet->use.data[1];
			if (Packet->use.head.DataLegnth>(4+2)){
				time = get16bit(Packet,2);
			}else{
				time=0;
			}
		}else if(isTwoByteMode(mode)){
			data=get16bit(Packet,1);
			if (Packet->use.head.DataLegnth>(4+3)){
				time= get32bit(Packet,3);
			}else{
				time=0;
			}
		}else{
			data=get32bit(Packet,1);
			if (Packet->use.head.DataLegnth>(4+5)){
				time= get32bit(Packet,5);
			}else{
				time=0;
			}
		}
		getBcsIoDataTable()[pin].PIN.currentValue = data;
		if(setChanelValueHWPtr!=NULL)
			setChanelValueHWPtr(pin,1,&data,(float)time);
		READY(Packet,2,3);
	}

	return TRUE;
}
boolean processRunAutoCal(BowlerPacket * Packet) {
    int group = Packet->use.data[0];

    runPidHysterisisCalibration(group);

    READY(Packet, 0, 0);
    return true;
}
Esempio n. 4
0
boolean processPIDPost(BowlerPacket * Packet){
    int chan, val;
    float time;
	switch (Packet->use.head.RPC){
	case APID:

		time = (float)get32bit(Packet,0);
		uint8_t i=0;
		for(i=0;i<Packet->use.data[4];i++){

			SetPIDTimed(i,get32bit(Packet,5+(i*4)),time);
		}
		READY(Packet,zone,3);
		break;
	case _VPD:
		chan = Packet->use.data[0];
		val = get32bit(Packet,1);
		time=get32bit(Packet,5);
		StartPDVel(chan,val,time);

		READY(Packet,zone,4);
		break;
	case _PID:
		chan = Packet->use.data[0];
		val = get32bit(Packet,1);
		time=get32bit(Packet,5);
		SetPIDTimed(chan,val,time);
		READY(Packet,zone,5);
		break;
	case RPID:
		chan = Packet->use.data[0];
  		b_println("Resetting PID channel from packet:",ERROR_PRINT);printBowlerPacketDEBUG(Packet,ERROR_PRINT);

                pidReset(chan, get32bit(Packet,1));
		READY(Packet,zone,6);
		break;
        default:
		return false; 
	}
	return true; 
}
Esempio n. 5
0
void ConfigPPM(BowlerPacket * Packet){
	int i;
	for(i=0;i<NUM_PPM_CHAN;i++){
		ppmLink[i]=Packet->use.data[i+1];
		if(ppmLink[i]>= GetNumberOfIOChannels()){
			ppmLink[i]=INVALID_PPM_LINK;
		}else{
			unlockServos();
		}
	}
	writeLinks=true;
	READY(Packet,66,0);
}
Esempio n. 6
0
void plu(int nbi, int nbj)
{
	int i, j;
	for (i = 0; i < nbi; ++i) {
		for (j = 0; j < nbj; ++j) {
			args[i][j].bi = i;
			args[i][j].bj = j;
			args[i][j].nbi = nbi;
			args[i][j].nbj = nbj;
		}
	}
#define USE_FORK 1
#define RBOUNDS(__x) (0 <= (__x) && (__x) < nbi)
#define CBOUNDS(__x) (0 <= (__x) && (__x) < nbj)
#define READY(_x, _y) ( \
		(!RBOUNDS((_x)-1) || DONE == status[(_x)-1][(_y)]) && \
		(!CBOUNDS((_y)-1) || DONE == status[(_x)][(_y)-1]))
	memset(status, 0, sizeof(status));
	while (!alldone(nbi, nbj)) {
		for (i = 0; i < nbi; ++i) {
			for (j = 0; j < nbj; ++j) {
				if (!READY(i, j) || DONE == status[i][j])
					continue;
				status[i][j] = RUNNING;
#if USE_FORK
				pthread_create(&threads[nbj * i + j], NULL, lu, &args[i][j]);
#endif
			}
		}
		for (i = 0; i < nbi; ++i) {
			for (j = 0; j < nbj; ++j) {
				if (RUNNING != status[i][j])
					continue;
#if USE_FORK
				pthread_join(threads[nbj * i + j], NULL);
#endif
				status[i][j] = DONE;
			}
		}
	}
	/* Clear bottom of A (which is now U) and make L's diagonals 1s. */
	for (i = 0; i < n; ++i) {
		for (j = 0; j < n; ++j) {
			if (i > j)
				VAL(A,i,j) = 0;
			if(i == j)
				VAL(L,i,i) = 1;
		}
	}
}
Esempio n. 7
0
int main()
{
    int T=0;
    scanf("%d",&T);
    for(int i=1;i<=T;i++)
    {
		read();
		READY();
		DP();
		solve();
		printf("%s\n",ans.letter);
    }
    return 0;
}
BOOL bcsSafeProcessor_p(BowlerPacket * Packet){
	//BYTE temp0;
	UINT16_UNION timeUnion;
	BYTE zone =5;
	switch (Packet->use.head.RPC){

	case SAFE:
		timeUnion.byte.SB=Packet->use.data[1];
		timeUnion.byte.LB=Packet->use.data[2];
		setHeartBeatState(Packet->use.data[0],timeUnion.Val);
		READY(Packet,zone,7);
		break;
	default:
		return FALSE;
	}
	return TRUE;
}
boolean SetChanelStreamFromPacket(BowlerPacket * Packet) {
    uint8_t pin = Packet->use.data[0];
    uint8_t mode = GetChannelMode(pin);
    if (_isStremChannelMode(mode)) {
        if (setStreamHWPtr != NULL)
            // Load the data directly into the packet as the buffer
            //Data pointer is offset by one to start after the pin index
            setStreamHWPtr(	pin,
							Packet->use.data[1],
							&Packet->use.data[2]);

    } else {
        ERR(Packet, 2, 3);
    }
    READY(Packet, 2, 3);
    return true;
}
Esempio n. 10
0
BOOL onCartesianPost(BowlerPacket *Packet){
    Print_Level l = getPrintLevel();
    switch(Packet->use.head.RPC){
        case _SLI:
            if(FifoGetPacketSpaceAvailible(&packetFifo)>0){
                if(Packet->use.data[0]==1){
                    processLinearInterpPacket(Packet);
                }else{
                    println_I("Cached linear Packet ");p_int_I(FifoGetPacketSpaceAvailible(&packetFifo));
                    FifoAddPacket(&packetFifo,Packet);
                }
                Packet->use.head.Method = BOWLER_STATUS;
                INT32_UNION tmp;
                tmp.Val=FifoGetPacketSpaceAvailible(&packetFifo);
                Packet->use.data[0]=tmp.byte.FB;
                Packet->use.data[1]=tmp.byte.TB;
                Packet->use.data[2]=tmp.byte.SB;
                Packet->use.data[3]=tmp.byte.LB;

                tmp.Val=SIZE_OF_PACKET_BUFFER;
                Packet->use.data[4]=tmp.byte.FB;
                Packet->use.data[5]=tmp.byte.TB;
                Packet->use.data[6]=tmp.byte.SB;
                Packet->use.data[7]=tmp.byte.LB;

                Packet->use.head.DataLegnth=4+4+4;
                if(tmp.Val == 0){
                    full=TRUE;
                }

                setPrintLevel(l);
            }else{
                println_I("###ERROR BUFFER FULL!!");p_int_I(FifoGetPacketSpaceAvailible(&packetFifo));
                setPrintLevel(l);
                ERR(Packet,33,33);
            }
            return TRUE;
        case PRCL:
            cancelPrint();
            READY(Packet,35,35);
            return TRUE;

    }
    return FALSE;
}
boolean configAdvancedAsync(BowlerPacket * Packet){
	INT32_UNION val;
	INT32_UNION time;
	uint8_t pin = Packet->use.data[0];
	uint8_t type = Packet->use.data[1];
	time.byte.FB= Packet->use.data[2];
	time.byte.TB= Packet->use.data[3];
	time.byte.SB= Packet->use.data[4];
	time.byte.LB= Packet->use.data[5];
	// this sets default async mode and clears and setting of async mode
	setAsyncLocal(Packet->use.data[0],true) ;

	//printPacket(Packet,ERROR_PRINT);
	switch(type){
	case AUTOSAMP:
		configAdvancedAsyncAutoSample(pin,time.Val);
		break;
	case NOTEQUAL:
		configAdvancedAsyncNotEqual(pin,time.Val);
		break;
	case DEADBAND:
		val.byte.FB= Packet->use.data[6];
		val.byte.TB= Packet->use.data[7];
		val.byte.SB= Packet->use.data[8];
		val.byte.LB= Packet->use.data[9];
		configAdvancedAsyncDeadBand(pin,time.Val,val.Val);
		break;
	case THRESHHOLD:
		val.byte.FB= Packet->use.data[6];
		val.byte.TB= Packet->use.data[7];
		val.byte.SB= Packet->use.data[8];
		val.byte.LB= Packet->use.data[9];
		configAdvancedAsyncTreshhold(pin,time.Val,val.Val,Packet->use.data[10]);
		break;
	default:
		ERR(Packet,45,0);
		break;
	}
	getBcsIoDataTable(pin)->PIN.asyncDataPreviousVal=0xffffffff;// invalid previous, forces a value update
	READY(Packet,45,0);
	return true; 
}
BOOL SetChannelValue(BowlerPacket * Packet){
	BOOL ret=FALSE;
	BYTE pin = Packet->use.data[0];
	BYTE mode = GetChannelMode(pin);
	BYTE bval;
	UINT16_UNION wval;
	BYTE zone=128;
	//println_I("Setting Value of mode: ");printMode(mode);print_I(" on pin:");p_int_I(pin);
	if (isASetableMode(mode)){
		bval = Packet->use.data[1];
		if (Packet->use.head.DataLegnth>6){
			wval.byte.SB = Packet->use.data[2];
			wval.byte.LB = Packet->use.data[3];
		}else{
			//println_I("Packet was 6 or less data bytes");
			wval.Val=0;
		}
		SetChanVal(pin,bval,(float)wval.Val);
		ret = TRUE;
		READY(Packet,zone,0);
	}else if ( (mode == IS_ANALOG_OUT)){
		wval.byte.SB=Packet->use.data[1];
		wval.byte.LB=Packet->use.data[2];
		switch (mode){
			default:
				return FALSE;
			}
		ret = TRUE;
	}else if ((mode == IS_UART_TX) || (mode == IS_UART_RX)){
		//Number of bytes in the stream to be sent
		BYTE i;
		bval = Packet->use.head.DataLegnth-5;
		for (i=0;i<bval;i++){
			WriteAVRUART1(Packet->use.data[i+1]);
		}
		return TRUE;
	}
	return ret;
}
boolean SetChanelValueFromPacket(BowlerPacket * Packet) {
    uint8_t pin = Packet->use.data[0];
    uint8_t mode = GetChannelMode(pin);

	int32_t data = 0;
	int32_t time = 0;

	data = get32bit(Packet, 1);

	time =  get32bit(Packet, 5);
	//println_W("Setting on pin=");p_int_W(pin); print_W(" value= ");p_int_W(data); print_W(" time= ");p_fl_W(time);
	if(mode == IS_SERVO)
		data = (data&0x000000ff) | (time<<16);

	if (setChanelValueHWPtr != NULL)
		setChanelValueHWPtr(pin, 1, &data, (float)time);

	//println_E(__FILE__);println_E("SetChanelValueFromPacket");
	setDataTableCurrentValue(pin,data);

    READY(Packet, 1, 3);
    return true;
}
BOOL SetAllChannelValueFromPacket(BowlerPacket * Packet){
	INT32 * data = (INT32 *)(Packet->use.data+4);
	UINT32 tmp;
	if(setAllChanelValueHWPtr!=NULL){
		UINT32_UNION time;
		BYTE i;

		time.byte.FB=Packet->use.data[0];
		time.byte.TB=Packet->use.data[1];
		time.byte.SB=Packet->use.data[2];
		time.byte.LB=Packet->use.data[3];
		for(i=0;i<GetNumberOfIOChannels();i++){
			tmp = get32bit(Packet, i*4);
			getBcsIoDataTable()[i].PIN.currentValue = tmp;
			data[i]=tmp;
		}
		setAllChanelValueHWPtr(data,time.Val);
		READY(Packet,3,3);
		FixPacket(Packet);
	}else{
		return FALSE;
	}
	return TRUE;
}
Esempio n. 15
0
int listen_for_code(void){

  int sockfd, new_sockfd, port=PORT, yes=1, recvlength=1;
  socklen_t sin_size;
  char buffer[TRANSMISSION_SIZE];
  struct sockaddr_in srv_addr, cli_addr;

  if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) == -1)
    fatal("in socket");

  if (setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, &yes, sizeof(int)) == -1)
    fatal("setting socket option SO_REUSEADDR");

  srv_addr.sin_family = AF_INET;   // host byte order
  srv_addr.sin_port = htons(port); // short, network byte order
  srv_addr.sin_addr.s_addr = 0;    // automatically fill with my ip address

  memset(&(srv_addr.sin_zero), '\0', 8); // zero out the rest of the struct

  if (bind(sockfd, (struct sockaddr *)&srv_addr, sizeof(struct sockaddr)) == -1)
    fatal("binding to socket");

  if (listen(sockfd, 5) == -1)
    fatal("listening on socket");

  /**
   * Main loop
   **/

  unsigned char *codebuffer;
  unsigned char *result;
  char *sexp;
  int codelength, actual_sexp_length;
  
  codebuffer = malloc(MAX_CODE_SIZE);
  result = malloc(SYSREG_BYTES);
  sexp = malloc(SEXP_LENGTH);
  
  while (1) {
    sin_size = sizeof(struct sockaddr_in);
    
    if ((new_sockfd =
         accept(sockfd, (struct sockaddr *) &cli_addr, &sin_size)) == -1)
      fatal("accepting connection");

    printf("SERVER: ACCEPTED CONNECTION FROM %s PORT %d\n",
           inet_ntoa(cli_addr.sin_addr), ntohs(cli_addr.sin_port));

    //send(new_sockfd, "Hello, world!\n\r", 13, 0); // just for testing

    recvlength = recv(new_sockfd, &buffer, TRANSMISSION_SIZE, 0);
    
    /** 
     * Clean the buffers
     **/
    memset(codebuffer, 0, MAX_CODE_SIZE);
    memset(result, 0, SYSREG_BYTES);
    memset(sexp, 0, SEXP_LENGTH);
    
    codelength = 0;
    
    while (recvlength > 0) {
      printf("RECV: %d bytes\n", recvlength);
      if (DUMP) fdump(stdout, buffer, recvlength);

      //      memcpy(codebuffer+codelength, buffer, recvlength);
      codelength = codecopy(codebuffer, buffer,
                            codelength, recvlength);
      //      codelength += recvlength;

      printf("code length = %d\n", codelength);

      if (READY(codelength)){
        hatch_code(codebuffer, NULL, result);
        actual_sexp_length = lisp_encode(result, sexp);
        send(new_sockfd, sexp, actual_sexp_length, 0);
        break;
      } else {      
        recvlength = recv(new_sockfd, &buffer, TRANSMISSION_SIZE, 0);
      }
    }

    close(new_sockfd);
  }
  free(codebuffer);
  free(result);
  free(sexp);
}