示例#1
0
/* manage space in lobby */
int lobby_menu(int input_character)
{
    if (loc_player->state != PS_JOINED)
        return 0;
    switch (input_character) {
        case KEY_LEFT:
            loc_player->ability_id--;
            if (Abilities.count == 0) {
                loc_player->ability_id++;
                break;
            }
            if (find_ability(loc_player->ability_id) == NULL) {
                struct ability *tmp_a = dyn_arr_get(&Abilities,
                        Abilities.count-1);
                loc_player->ability_id = tmp_a->id;
            }
            break;
        case KEY_RIGHT:
            loc_player->ability_id++;
            if (Abilities.count == 0) {
                loc_player->ability_id--;
                break;
            }
            if (find_ability(loc_player->ability_id) == NULL) {
                struct ability *tmp_a = dyn_arr_get(&Abilities, 0);
                loc_player->ability_id = tmp_a->id;
            }
            break;
        case K_SET_READY:
            if (loc_player->state == PS_JOINED) {
                send_int8(sock, C_SET_ABILITY);
                send_int16(sock, loc_player->ability_id);
                send_int8(sock, C_READY);
                fetch_changes();
            }
            break;
        default:
            return 0;
    }
    debug_d(1, "LocAbilityID", loc_player->ability_id);
    /* add SCR_LOBBY to screen update queue */
    ScreenUpdate u_lobby = SCR_LOBBY;
    dyn_arr_append(&ScrUpdates, &u_lobby);
    return 1;
}
示例#2
0
/*
 * Send bind message. "conn" should be at the point right after the message kind
 * was read.
 */
void
process_bind(char *buf, PGconn *conn)
{
	int			len;
	char	   *stmt;
	char	   *portal;
	short		nparams;
	short		ncodes;
	short		codes[MAXENTRIES];
	int			paramlens[MAXENTRIES];
	char	   *paramvals[MAXENTRIES];
	short		nresult_formatcodes;
	short		result_formatcodes[MAXENTRIES];
	int			i;
	char	   *bufp;

	SKIP_TABS(buf);

	len = sizeof(int);

	portal = buffer_read_string(buf, &bufp);
	buf = bufp;
	len += strlen(portal) + 1;

	SKIP_TABS(buf);

	stmt = buffer_read_string(buf, &bufp);
	buf = bufp;
	len += strlen(stmt) + 1;

	fprintf(stderr, "FE=> Bind(stmt=\"%s\", portal=\"%s\")", stmt, portal);

	SKIP_TABS(buf);

	ncodes = buffer_read_int(buf, &bufp);
	len += sizeof(short) + sizeof(short) * ncodes;
	buf = bufp;

	SKIP_TABS(buf);

	if (ncodes > MAXENTRIES)
	{
		fprintf(stderr, "Too many codes for bind message (%d)\n", ncodes);
		exit(1);
	}

	if (ncodes > 0)
	{
		for (i = 0; i < ncodes; i++)
		{
			codes[i] = buffer_read_int(buf, &bufp);
			buf = bufp;
			SKIP_TABS(buf);
		}
	}

	nparams = buffer_read_int(buf, &bufp);
	len += sizeof(short) + sizeof(short) * nparams;
	buf = bufp;
	SKIP_TABS(buf);

	if (nparams > MAXENTRIES)
	{
		fprintf(stderr, "Too many params for bind message (%d)\n", nparams);
		exit(1);
	}

	for (i = 0; i < nparams; i++)
	{
		paramlens[i] = buffer_read_int(buf, &bufp);
		len += sizeof(int);

		if (paramlens[i] > 0)
		{
			buf = bufp;
			paramvals[i] = buffer_read_string(buf, &bufp);
			buf = bufp;
			SKIP_TABS(buf);
			len += paramlens[i];
		}
	}

	SKIP_TABS(buf);

	nresult_formatcodes = buffer_read_int(buf, &bufp);
	buf = bufp;
	len += sizeof(short) + sizeof(short) * nresult_formatcodes;
	SKIP_TABS(buf);

	if (nresult_formatcodes >= 2)
	{
		for (i = 0; i < nresult_formatcodes; i++)
		{
			result_formatcodes[i] = buffer_read_int(buf, &bufp);
			buf = bufp;
			SKIP_TABS(buf);
		}
	}
	fprintf(stderr, "\n");

	send_char('B', conn);
	send_int(len, conn);
	send_string(portal, conn);
	send_string(stmt, conn);
	send_int16(ncodes, conn);
	for (i = 0; i < ncodes; i++)
	{
		send_int16(codes[i], conn);
	}

	send_int16(nparams, conn);
	for (i = 0; i < nparams; i++)
	{
		if (paramlens[i] != -1)
		{
			if (ncodes == 0 || codes[i] == 0)
			{
				send_string(paramvals[i], conn);
			}
			else
			{
				send_int(atoi(paramvals[i]), conn);
			}
		}
	}

	send_int16(nresult_formatcodes, conn);
	for (i = 0; i < nresult_formatcodes; i++)
	{
		send_int16(result_formatcodes[i], conn);
	}
}
示例#3
0
/*
 * Send parse messae. "conn" should at the point right after the message kind
 * was read.
 */
void
process_parse(char *buf, PGconn *conn)
{
	char	   *query;
	int			len;
	char	   *stmt;
	short		noids;
	int			oids[MAXENTRIES];
	int			i;
	char	   *bufp;

	SKIP_TABS(buf);

	len = sizeof(int);

	stmt = buffer_read_string(buf, &bufp);
	buf = bufp;
	len += strlen(stmt) + 1;

	SKIP_TABS(buf);

	query = buffer_read_string(buf, &bufp);
	buf = bufp;
	len += strlen(query) + 1;

	SKIP_TABS(buf);

	fprintf(stderr, "FE=> Parse(stmt=\"%s\", query=\"%s\")", stmt, query);

	noids = buffer_read_int(buf, &bufp);
	buf = bufp;

	if (noids > MAXENTRIES)
	{
		fprintf(stderr, "Too many oid params for parse message (%d)\n", noids);
		exit(1);
	}

	len += sizeof(short) + noids * sizeof(int);

	if (noids > 0)
	{
		fprintf(stderr, ", oids={");

		for (i = 0; i < noids; i++)
		{
			oids[i] = buffer_read_int(buf, &bufp);
			fprintf(stderr, "%d", oids[i]);
			if ((i + 1) != noids)
				fprintf(stderr, ",");
			buf = bufp;
		}
	}
	fprintf(stderr, "\n");

	send_char('P', conn);
	send_int(len, conn);
	send_string(stmt, conn);
	free(stmt);
	send_string(query, conn);
	free(query);
	send_int16(noids, conn);
	if (noids > 0)
	{
		for (i = 0; i < noids; i++)
		{
			send_int(oids[i], conn);
		}
	}
}
int main(int argc, char** argv) {
    //    WDT resetea pic, pic revive y reset antena, PWRGD reset pic y jejeje
    /////////Configuración de Clock/////////
    CLKDIVbits.ROI = 0;
    CLKDIVbits.DOZEN = 0;
    CLKDIVbits.RCDIV = 0b000;
    CLKDIVbits.CPDIV = 0b00;
    CLKDIVbits.PLLEN = 1;

    /////////Secuencia Cambio de Oscilador/////////
    //    OSCCONH = 0x78;
    //    OSCCONH = 0x9A;
    //    OSCCONbits.NOSC = 0b001;
    //    OSCCONL = 0x46;
    //    OSCCONL = 0x57;
    //    OSCCONbits.OSWEN = 1;
    //    __delay_ms(500);
    //    while(OSCCONbits.OSWEN);
    //////////////////////////////////////////////

    //Inicialización de Variables//

//    ///////////////////////////////
//    TRISBbits.TRISB5 = 1;
////    LATBbits.LATB5 = 0;
    AD1PCFGbits.PCFG11 = 1;
    AD1PCFGbits.PCFG10 = 1;
    AD1PCFGbits.PCFG9 = 1;
    AD1PCFGbits.PCFG8 = 1;
    AD1PCFGbits.PCFG7 = 1;
    AD1PCFGbits.PCFG5 = 1;
    TRISAbits.TRISA2 = 0;
    TRISAbits.TRISA3 = 0;
    TRISBbits.TRISB4 = 0;
    TRISAbits.TRISA4 = 0;
    TRISBbits.TRISB3 = 0;
    ///////////Asignación de Pines////////////
    OSCCON = 0x46; //Desbloqueo Fase 1
    OSCCON = 0x57; //Desbloqueo Fase 2
    OSCCONbits.IOLOCK = 0; //Desbloqueo Fase 3
    RPINR18bits.U1RXR = 5; //Asignación Input U1RX a RP5
    RPOR6bits.RP13R = 3; //Asignación Output RP13 a U1TX
    RPINR7bits.IC1R = 7; //Asignación Input IC1 a RP7
    RPINR7bits.IC2R = 8; //Asignación Input IC2 a RP8
    RPINR8bits.IC3R = 9; //Asignación Input IC3 a RP9
    RPINR8bits.IC4R = 10; //Asignación Input IC4 a RP10
    RPINR9bits.IC5R = 11; //Asignación Input IC5 a RP11
    OSCCON = 0x46; //Rebloqueo Fase 1
    OSCCON = 0x57; //Rebloqueo Fase 2
    OSCCONbits.IOLOCK = 1; //Rebloqueo Fase 3

    /////////Configuración timer 1/////////
    T1CONbits.TSIDL = 1;
    T1CONbits.TCS = 0;
    T1CONbits.TGATE = 0;
    T1CONbits.TCKPS = 0b01; //1:8 PreScaller 0.5 us per ++
    PR1 = 65535; //periodo del timer 1
    IPC0bits.T1IP = 7; // Prioridad 1 para inttimer1
    IFS0bits.T1IF = 0; // limpiar flag de interrupcion 1
    IEC0bits.T1IE = 0; // habilitar interrupcion del timer1
    T1CONbits.TON = 1; // iniciar timer 1

//    /////////Configuración timer 2/////////
//    //    T2CONbits.TSIDL = 1;
//    //    T2CONbits.TCS = 0;
//    //    T2CONbits.TGATE = 0;
//    //    T2CONbits.TCKPS = 0b01; //1:8 PreScaller 0.5us per ++
//    //    PR2 = 10000; //periodo del timer 2 = 5 _ms
//    //    IPC1bits.T2IP = 2; // Prioridad 1 para inttimer2
//    //    IFS0bits.T2IF = 0; // limpiar flag de interrupcion 2
//    //    IEC0bits.T2IE = 0; // habilitar interrupcion del timer2
//    //    T2CONbits.TON = 1; // iniciar timer 2

    ////////////configuración de ICx///////
    IC1CON2bits.SYNCSEL = 0b00000; //free-Running Mode  //0b10100; //IC1 Trig Souce  = IC1 pin
    IC2CON2bits.SYNCSEL = 0b00000; //free-Running Mode  //0b10101; //IC2 Trig Souce  = IC2 pin
    IC3CON2bits.SYNCSEL = 0b00000; //free-Running Mode  //0b10101; //IC3 Trig Souce  = IC3 pin
    IC4CON2bits.SYNCSEL = 0b00000; //free-Running Mode  //0b10101; //IC4 Trig Souce  = IC4 pin
    IC5CON2bits.SYNCSEL = 0b00000; //free-Running Mode  //0b10101; //IC5 Trig Souce  = IC5 pin
    IC1CON1bits.ICSIDL = 1; //IC1 halts on idle
    IC2CON1bits.ICSIDL = 1; //IC2 halts on idle
    IC3CON1bits.ICSIDL = 1; //IC3 halts on idle
    IC4CON1bits.ICSIDL = 1; //IC4 halts on idle
    IC5CON1bits.ICSIDL = 1; //IC5 halts on idle
    IC1CON1bits.ICTSEL = 0b100; //IC1 Captute Timer = Timer1
    IC2CON1bits.ICTSEL = 0b100; //IC2 Captute Timer = Timer1
    IC3CON1bits.ICTSEL = 0b100; //IC3 Captute Timer = Timer1
    IC4CON1bits.ICTSEL = 0b100; //IC4 Captute Timer = Timer1
    IC5CON1bits.ICTSEL = 0b100; //IC4 Captute Timer = Timer1
    IC1CON1bits.ICI = 0b00; //Interrupt on every capture event
    IC2CON1bits.ICI = 0b00; //Interrupt on every capture event
    IC3CON1bits.ICI = 0b00; //Interrupt on every capture event
    IC4CON1bits.ICI = 0b00; //Interrupt on every capture event
    IC5CON1bits.ICI = 0b00; //Interrupt on every capture event
    IC1CON2bits.ICTRIG = 0; //free-Running Mode  //1; //Trigger IC1 from Source Designated in SYNCSEL
    IC2CON2bits.ICTRIG = 0; //free-Running Mode  //1; //Trigger IC2 from Source Designated in SYNCSEL
    IC3CON2bits.ICTRIG = 0; //free-Running Mode  //1; //Trigger IC3 from Source Designated in SYNCSEL
    IC4CON2bits.ICTRIG = 0; //free-Running Mode  //1; //Trigger IC4 from Source Designated in SYNCSEL
    IC5CON2bits.ICTRIG = 0; //free-Running Mode  //1; //Trigger IC4 from Source Designated in SYNCSEL
    IC1CON2bits.TRIGSTAT = 0; //Clear TRIGSTAT
    IC2CON2bits.TRIGSTAT = 0; //Clear TRIGSTAT
    IC3CON2bits.TRIGSTAT = 0; //Clear TRIGSTAT
    IC4CON2bits.TRIGSTAT = 0; //Clear TRIGSTAT
    IC5CON2bits.TRIGSTAT = 0; //Clear TRIGSTAT
    IC1TMR = 0;
    IC2TMR = 0;
    IC3TMR = 0;
    IC4TMR = 0;
    IC5TMR = 0;
    IPC0bits.IC1IP = 5; // Prioridad 1 para Captura1
    IPC1bits.IC2IP = 5; // Prioridad 1 para Captura2
    IPC9bits.IC3IP = 5; // Prioridad 1 para Captura3
    IPC9bits.IC4IP = 5; // Prioridad 1 para Captura4
    IPC9bits.IC5IP = 5; // Prioridad 1 para Captura4
    IFS0bits.IC1IF = 0; // limpiar flag de interrupcion IC1
    IFS0bits.IC2IF = 0; // limpiar flag de interrupcion IC2
    IFS2bits.IC3IF = 0; // limpiar flag de interrupcion IC3
    IFS2bits.IC4IF = 0; // limpiar flag de interrupcion IC4
    IFS2bits.IC5IF = 0; // limpiar flag de interrupcion IC4
    IEC0bits.IC1IE = 1; // inhabilitar interrupcion de Captura1
    IEC0bits.IC2IE = 1; // inhabilitar interrupcion de Captura2
    IEC2bits.IC3IE = 1; // inhabilitar interrupcion de Captura3
    IEC2bits.IC4IE = 1; // inhabilitar interrupcion de Captura4
    IEC2bits.IC5IE = 1; // inhabilitar interrupcion de Captura4
    IC1CON1bits.ICM = 0b001; //Capture on every Edge (R/F)
    IC2CON1bits.ICM = 0b001; //Capture on every Edge (R/F)
    IC3CON1bits.ICM = 0b001; //Capture on every Edge (R/F)
    IC4CON1bits.ICM = 0b001; //Capture on every Edge (R/F)
    IC5CON1bits.ICM = 0b001; //Capture on every Edge (R/F)
    while (IC1CON1bits.ICBNE) clean = IC1BUF;
    while (IC2CON1bits.ICBNE) clean = IC2BUF;
    while (IC3CON1bits.ICBNE) clean = IC3BUF;
    while (IC4CON1bits.ICBNE) clean = IC4BUF;
    while (IC5CON1bits.ICBNE) clean = IC5BUF;

    /////////Configuración UART 1/////////
    //    U1BRG = 25; //BaudRate = 38400;
    U1BRG = 8; //BaudRate = 115200;
    U1MODEbits.UARTEN = 1;
    U1MODEbits.USIDL = 0;
    U1MODEbits.IREN = 0;
    U1MODEbits.RTSMD = 1;
    U1MODEbits.UEN = 0b00;
    U1MODEbits.WAKE = 0;
    U1MODEbits.LPBACK = 0;
    U1MODEbits.ABAUD = 0;
    U1MODEbits.RXINV = 0;
    U1MODEbits.BRGH = 0;
    U1MODEbits.PDSEL = 0b00;
    U1MODEbits.STSEL = 0;
    U1STAbits.UTXISEL1 = 0;
    U1STAbits.UTXISEL0 = 1;
    U1STAbits.UTXINV = 0;
    U1STAbits.UTXBRK = 0;
    U1STAbits.UTXEN = 1;
    U1STAbits.URXISEL = 0b01;
    U1STAbits.ADDEN = 0;
    U1STAbits.RIDLE = 0;
    IPC2bits.U1RXIP = 2; // Prioridad 1 para inttimer1
    IFS0bits.U1RXIF = 0;
    IEC0bits.U1RXIE = 1;
    //    U1STAbits.UTXBF //recurso, buffer vacio
    //    U1STAbits.URXDA //recurso, datos recibidos

//    //Protocolo Inicial
//    printf("\r\nLT8-WL");
//    printf("\r\nSensores:");
//    printf("\r\nFuncionamiento Correcto");
//    printf("\r\nEsperando Comandos.....");
//    ///////////////////

    while (1) {
//        putch(65);
//        delay_ms(500);
        LATAbits.LATA2 = 1;
        LATAbits.LATA4 = 1;
        delay_us(8);
        IC1TMR = 0;
        IC2TMR = 0;
        IC3TMR = 0;
        IC4TMR = 0;
        IC5TMR = 0;
        delay_us(2);
        LATAbits.LATA2 = 0;
        LATAbits.LATA4 = 0;
        delay_ms(40);
        LATBbits.LATB4 = 1;
        LATAbits.LATA3 = 1;
        delay_us(8);
        IC1TMR = 0;
        IC2TMR = 0;
        IC3TMR = 0;
        IC4TMR = 0;
        IC5TMR = 0;
        delay_us(2);
        LATBbits.LATB4 = 0;
        LATAbits.LATA3 = 0;
        delay_ms(40);
        LATBbits.LATB3 = 1;
        delay_us(8);
        IC1TMR = 0;
        IC2TMR = 0;
        IC3TMR = 0;
        IC4TMR = 0;
        IC5TMR = 0;
        delay_us(2);
        LATBbits.LATB3 = 0;
        delay_ms(40);
        putch(13);
        send_int16((unsigned short)(float)s1th / 11.6);
//        putch(10);
//        putch(13);
        send_int16((unsigned short)(float)s2th / 11.6);
//        putch(10);
//        putch(13);
        send_int16((unsigned short)(float)s3th / 11.6);
//        putch(10);
//        putch(13);
        send_int16((unsigned short)(float)s4th / 11.6);
//        putch(10);
//        putch(13);
        send_int16((unsigned short)(float)s5th / 11.6);
        putch(10);
    }
    return (EXIT_SUCCESS);
}