/* 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; }
/* * 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); } }
/* * 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); }