void receive_msg() { unsigned int16 ip, lbody, index, pl; unsigned int8 msg[USB_EP1_RX_SIZE - 1], code, *body; unsigned int1 hasBody; usb_get_packet(1, msg, USB_EP1_RX_SIZE - 1); ip = (msg[0] + (msg[1] * 256)); hasBody = bit_test(msg[2], 7); code = msg[2]; bit_clear(code, 7); #ifdef DEBUG_STREAM_A fprintf(A, "receive_msg IP: %Lu - Code: %u - HasBody: %u\n\r", ip, code, hasBody); #endif if (hasBody) { lbody = (msg[3] + (msg[4] * 256)); body = calloc(lbody - 1, sizeof(unsigned int8)); pl = lbody; if (pl > USB_EP1_RX_SIZE - 6) pl = USB_EP1_RX_SIZE - 6; copy_array(msg, 5, body, 0, pl); index = pl; while(index < lbody - 1) { pl = lbody - index; if (pl > USB_EP1_RX_SIZE - 1) pl = USB_EP1_RX_SIZE - 1; while (!usb_kbhit(1)); usb_get_packet(1, msg, USB_EP1_RX_SIZE - 1); copy_array(msg, 0, body, index, pl); index += pl; } process_msg(ip, code, lbody, body); if (body) { free(body); } } else { process_msg(ip, code, 0, body); } }
void main() { setup_timer_3 (T3_DISABLED|T3_DIV_BY_1); usb_init (); lcd_init (); lcd_putc ('\f'); delay_ms (1); while (TRUE) { lcd_refresh (); usb_task (); if (usb_enumerated ()) { if (usb_kbhit (1)) rxdata_len = usb_get_packet (1, rxdata, sizeof (rxdata)); } delay_ms (100); } }
void USB(void){ for(;;){ if(usb_enumerated()){ //True si el USB ha sido enumerado. if(usb_kbhit(1)){ //(endpoint=1 EP1)= TRUE si el EP1 tiene datos //en su buffer de recepcion. //-- (endpoint,ptr,max)=Reads up to max bytes from //-- the specified endpoint buffer and saves it to the pointer ptr //-- Returns the number of bytes saved to ptr usb_get_packet(1,RecibirByte,20); //-- revisa en orden logico el contenido de //-- RecibirByte[0],[1],[2],[3],[4].... //-- *2, OSA usa el doble de pulsos numPulsosX = (RecibirByte[0]*256+RecibirByte[1])*2; numPulsosY = (RecibirByte[2]*256+RecibirByte[3])*2; numPulsosZ = (RecibirByte[4]*256+RecibirByte[5])*2; numPulsosE = (RecibirByte[6]*256+RecibirByte[7])*2; periodoPulsosX = (RecibirByte[8]*256+RecibirByte[9]); periodoPulsosY = (RecibirByte[10]*256+RecibirByte[11]); periodoPulsosZ = RecibirByte[12]; periodoPulsosE = RecibirByte[13]; dirMotorX = RecibirByte[14]; dirMotorY = RecibirByte[15]; dirMotorZ = RecibirByte[16]; dirMotorE = RecibirByte[17]; GlaoGlc = RecibirByte[18]; valorR = RecibirByte[19]; } //-- reviso en orden logico EnviarByte[0],[1] y envio por usb ADC(); //esta funcion contiene los valores de EnviarByte[0;1] if( (numPulsosX || numPulsosY || numPulsosZ || numPulsosE) != 0) {EnviarByte[2]=1; output_high(PIN_B6);} else {EnviarByte[2]=0; output_low(PIN_B6);} //-- (endpoint,data,len,tgl)=Places the packet of data //-- into the specified endpoint buffer. //-- Returns TRUE if success, FALSE if the buffer //-- is still full with the last packet. usb_put_packet(1,EnviarByte,3,USB_DTS_TOGGLE); } OS_Delay(10); OS_Yield(); } }
void main() { setup_adc_ports(AN0); setup_adc(ADC_CLOCK_INTERNAL); set_adc_channel(0); set_tris_b(0x00); output_b(0x00); LED_ON(LEDR); LED_OFF(LEDV); usb_init(); usb_task(); //Monitorea el estado de la coneccion conectandose y desconectandose automaticamente usb_wait_for_enumeration(); //espera infinitamente hasta que el dispositivo fue enumerado LED_ON(LEDV); LED_OFF(LEDR); while (TRUE) { usb_task(); if (usb_enumerated()) { Salida[0]=read_adc(); usb_put_packet(1, Salida, 1, USB_DTS_TOGGLE); if (usb_kbhit(1)) { usb_get_packet(1, Entrada, 1); if (Entrada[0]==1) { LED_ON(PIN_B0); } else LED_OFF(PIN_B0); } } } }
void main () { setup_timer_3 (T3_DISABLED|T3_DIV_BY_1); pwm_init (0); pwm_duty (0, 50); usb_init (); lcd_init (); lcd_putc ('\f'); delay_ms (1); lcd_refresh (); while (TRUE) { usb_task (); if (usb_enumerated ()) { if (usb_kbhit (1)) { rx_msg_len = usb_get_packet (1, &rx_msg, sizeof (rx_msg)); process_usb_data (); } } lcd_refresh (); delay_ms (100); } }
static void usb_receive(int n) { int len; if (endpoints[n].halt[DIR_RX] || !endpoints[n].enabled[DIR_RX] || endpoints[n].in_min_len < 0 || !endpoints[n].in_ack) return; endpoints[n].in_ack = 0; usb_select_endpoint(ep_index(n, DIR_RX)); len = usb_get_packet(endpoints[n].in_buf + endpoints[n].in_ptr, endpoints[n].in_max_len - endpoints[n].in_ptr); endpoints[n].in_ptr += len; if (endpoints[n].in_ptr >= endpoints[n].in_min_len) { endpoints[n].in_min_len = -1; if (endpoints[n].in_done) (*(endpoints[n].in_done))(n, endpoints[n].in_buf, endpoints[n].in_ptr); } }
void main() { // mod, added to patch config bits patch_config(); output_high(LEDR); output_low(LEDG); usb_init(); setup_timer_0(RTCC_INTERNAL|RTCC_DIV_4); set_timer0(0x8ad0); enable_interrupts(GLOBAL); enable_interrupts(INT_TIMER0); while(1) { #if defined (BOARD_AVRUSB12_32) //Mod here we check pin status to see if we must reset device if(!input(PIN_B7)) { delay_ms(25); //debounce if(!input(PIN_B7)) { //its a press output_bit(LEDG,1); delay_ms(500); //for long press detection, if(!input(PIN_B7)) { //its still a press after 1 sec PINRST_BTL(); //reset device } output_bit(LEDG,0); } } #endif usb_task(); usb_isr(); if(DelayCount) continue; if(Connect) { if(UADDR != HubAddress) { usb_set_address(HubAddress); } DevicePort = Connect; port_status[Connect - 1] = PORT_FULL; port_change[Connect - 1] = C_PORT_CONN; TxBuf[0] = 1 << Connect; if(Force0DTS) usb_put_packet(1, TxBuf, 1, 0); else usb_put_packet(1, TxBuf, 1, USB_DTS_TOGGLE); Connect = 0; Force0DTS = 0; } if(Reset) { TxBuf[0] = 1 << Reset; usb_put_packet(1, TxBuf, 1, USB_DTS_TOGGLE); Reset = 0; } if(Disconnect) { if(UADDR != HubAddress) usb_set_address(HubAddress); DevicePort = Disconnect; port_status[Disconnect - 1] = PORT_EMPTY; port_change[Disconnect - 1] = C_PORT_CONN; TxBuf[0] = 1 << Disconnect; usb_put_packet(1, TxBuf, 1, USB_DTS_TOGGLE); Disconnecting = Disconnect; Disconnect = 0; } if(WaitJig) { if(WaitJig == 1) { if(usb_kbhit(2)) { unsigned char c; Chirp(); c = usb_get_packet(2, TxBuf, 8); nJigs++; EP_BDxST_I(1) = 0x40; //Clear IN endpoint if(nJigs == 8) { nJigs = 0; WaitJig = 2; Delay10ms(50); } } } else { int n = 0; for(n = 0; n < 8; ++n) { TxBuf[n] = jig_response[8 * nJigs + n]; } if(usb_put_packet(1, TxBuf, 8, nJigs == 0 ? 0 : USB_DTS_TOGGLE)) { Delay10ms(1); nJigs++; Chirp(); if(nJigs == 8) { nJigs = 0; WaitJig = 0; Delay10ms(15); Disconnect = 3; } } } } if(Address != -1) { delay_ms(1); usb_set_address(Address); Address = -1; } } }
void main(void) { int8 recibe[3]; //declaramos variables int8 envia[1]; setup_adc_ports( ALL_ANALOG ); //Configuramos el puerto a como analogo setup_adc( ADC_CLOCK_INTERNAL ); set_adc_channel( 0 ); LED_OFF(LEDV); //encendemos led rojo LED_ON(LEDR); usb_init(); //inicializamos el USB usb_task(); //habilita periferico usb e interrupciones usb_wait_for_enumeration(); //esperamos hasta que el PicUSB sea configurado por el host LED_OFF(LEDR); LED_ON(LEDV); //encendemos led verde /* while(TRUE){ envia[0] = (int8)Read_ADC(); if (envia[0] > 0x7F){ LED_ON(LEDR); LED_ON(LEDV); //encendemos led verde }else{ LED_OFF(LEDR); LED_OFF(LEDV); //otra acción } } */ while (TRUE) { if(usb_enumerated()) //si el PicUSB está configurado { if (usb_kbhit(1)) //si el endpoint de salida contiene datos del host { usb_get_packet(1, recibe, 3); //cojemos el paquete de tamaño 3bytes del EP1 y almacenamos en recibe if (modo == 0) // Modo_Suma { envia[0] = (int8)Read_ADC(); usb_put_packet(1, envia, 1, USB_DTS_TOGGLE); //enviamos el paquete de tamaño 1byte del EP1 al PC if (envia[0] > 0x7F){ LED_ON(LEDR); LED_ON(LEDV); //encendemos led verde }else{ LED_OFF(LEDR); LED_OFF(LEDV); //otra acción } } if (modo == 1) // Modo_Led { if (param1 == 0) {LED_OFF(LEDV); LED_OFF(LEDR);} //apagamos los leds if (param1 == 1) {LED_ON(LEDV); LED_OFF(LEDR);} //encendemos led verde if (param1 == 2) {LED_OFF(LEDV); LED_ON(LEDR);} //encendemos led rojo } } } } }
void main(void) { int8 recibe[5]; //declaramos variables int8 send2[1]; LED_OFF(LED_OK); //encendemos led rojo LED_ON(LED_FAIL); usb_init(); //inicializamos el USB setup_adc_ports(AN0); //Configura canais analógico setup_adc(ADC_CLOCK_INTERNAL); //De acordo com relógio interno. /*SETUP_TIMER_1 (T1_INTERNAL|T1_DIV_BY_2); //Configurar timer1 para clock iterno/8 enable_interrupts (INT_TIMER1); //Habilitar Interrupções enable_interrupts (global);*/ usb_task(); //habilita periferico usb e interrupciones usb_wait_for_enumeration(); //esperamos hasta que el PicUSB sea configurado por el host enable_interrupts (global); LED_OFF(LED_FAIL); //desligo o LED vermelho LED_ON(LED_OK); //acendo o LED verde move_x('S'); move_y('S'); while (true) { if(usb_enumerated()) //si el PicUSB está configurado { if (usb_kbhit(1)) //si el endpoint de salida contiene datos del host { LED_ON(LED_DATA); usb_get_packet(1, recibe, 5); //cojemos el paquete de tamaño 3bytes del EP1 y almacenamos en recibe if(modo == 1) { if(dir_x == 1 && value_x == 1){ move_x('R'); } if(dir_x == 2 && value_x == 1){ move_x('L'); } if(dir_y == 1 && value_y == 1){ move_y('F'); } if(dir_y == 2 && value_y == 1){ move_y('B'); } delay_ms(20); } if (modo == 4) { status = 1; usb_put_packet(1, send2, 1, USB_DTS_TOGGLE); //enviada a informação para o PC com o status } LED_OFF(LED_DATA); } } } }