int hw_net_erase_profiles() { int deleted = wlan_ioctl_del_profile(255); // power cycle hw_net_disable(); hw_wait_ms(10); hw_net_initialize(); ulCC3000Connected = 0; ulCC3000DHCP = 0; return deleted; }
void hw_net_initialize (void) { CC3000_START; SpiInit(4e6); hw_wait_us(10); wlan_init(CC3000_UsynchCallback, NULL, NULL, NULL, ReadWlanInterruptPin, WlanInterruptEnable, WlanInterruptDisable, WriteWlanPin); wlan_start(0); int r = wlan_ioctl_set_connection_policy(0, 0, 0); if (r != 0) { TM_DEBUG("Fail setting policy %i", r); } r = wlan_ioctl_set_scan_params(10000, 100, 100, 5, 0x7FF, -100, 0, 205, wifi_intervals); if (r != 0) { TM_DEBUG("Fail setting scan params %i", r); } r = wlan_ioctl_set_connection_policy(0, true, true); if (r != 0) { TM_DEBUG("Fail setting connection policy %i", r); } wlan_stop(); hw_wait_ms(10); wlan_start(0); // tm_sleep_ms(100); // TM_COMMAND('w',"setting event mask\n"); wlan_set_event_mask(HCI_EVNT_WLAN_KEEPALIVE|HCI_EVNT_WLAN_UNSOL_INIT|HCI_EVNT_WLAN_ASYNC_PING_REPORT); // TM_COMMAND('w',"done setting event mask\n"); unsigned long aucDHCP = 14400; unsigned long aucARP = 3600; unsigned long aucKeepalive = 10; unsigned long aucInactivity = 0; if (netapp_timeout_values(&aucDHCP, &aucARP, &aucKeepalive, &aucInactivity) != 0) { TM_DEBUG("Error setting inactivity timeout!"); } unsigned char version[2]; if (nvmem_read_sp_version(version)) { TM_ERR("Failed to read CC3000 firmware version."); } memcpy(hw_cc_ver, version, 2); CC3000_END; }
int hw_net_block_until_readable (int ulSocket, int timeout) { while (1) { if (hw_net_is_readable(ulSocket)) { break; } if (timeout > 0 && --timeout == 0) { return -1; } hw_wait_ms(100); } return 0; }
void dfu_req_handler(req_t *req) { U8 i; usb_pcb_t *pcb = usb_pcb_get(); switch (req->req) { case DFU_DETACH: if (req->type & (HOST_TO_DEVICE | TYPE_CLASS | RECIPIENT_INTF)) { // wvalue is wTimeout // wLength is zero // data is none dfu_status.bState = appDETACH; dfu_status.bStatus = OK; } break; case DFU_DNLOAD: if (req->type & (HOST_TO_DEVICE | TYPE_CLASS | RECIPIENT_INTF)) { // wvalue is wBlockNum // wlength is Length // data is firmware if( dfu_status.bState == dfuIDLE ) { if( req->len > 0 ) { hw_state_indicator( HW_STATE_TRANSFER ); dfu_status.bState = dfuDNLOAD_SYNC; } else { dfu_status.bState = dfuERROR; dfu_status.bStatus = errNOTDONE; hw_state_indicator( HW_STATE_ERROR ); ep_send_zlp(EP_CTRL); return; } } i = req->val; if( dfu_status.bState == dfuDNLOAD_IDLE ) { if( req->len > 0 ) { dfu_status.bState = dfuDNLOAD_SYNC; } else { if( flash_buffer_ptr > flash_buffer ) { need_to_write = 1; //flash_buffer_ptr = flash_buffer; } dfu_status.bState = dfuMANIFEST_SYNC; ep_send_zlp(EP_CTRL); return; } } SI32_USB_A_clear_out_packet_ready_ep0(SI32_USB_0); while(pcb->fifo[EP_CTRL].len < req->len) { //ep_read(EP_CTRL); i = pcb->fifo[EP_CTRL].len; } // clear the setup flag if needed pcb->flags &= ~(1<<SETUP_DATA_AVAIL); // send out a zero-length packet to ack to the host that we received // the new line coding U8* byte_buf_ptr = ( U8* )flash_buffer_ptr; U8 tmp_len = pcb->fifo[EP_CTRL].len; for(i = 0; i < tmp_len; i++) { *byte_buf_ptr = usb_buf_read(EP_CTRL); byte_buf_ptr++; } flash_buffer_ptr += i/4; if( flash_buffer_ptr == flash_buffer + BLOCK_SIZE_U32 ) { // Reset buffer pointer //flash_buffer_ptr = flash_buffer; need_to_write = 1; } if( flash_buffer_ptr > flash_buffer + BLOCK_SIZE_U32) { dfu_status.bState = dfuERROR; hw_state_indicator( HW_STATE_ERROR ); } ep_send_zlp(EP_CTRL); } break; case DFU_UPLOAD: if (req->type & (DEVICE_TO_HOST | TYPE_CLASS | RECIPIENT_INTF)) { // wvalue is zero // wlength is length // data is firmware // NOT SUPPORTED ep_set_stall(EP_CTRL); } break; case DFU_GETSTATUS: if (req->type & (DEVICE_TO_HOST | TYPE_CLASS | RECIPIENT_INTF)) { if( dfu_communication_started == 0 ) hw_state_indicator( HW_STATE_CONNECTED ); dfu_communication_started = 1; // If we're still transmitting blocks if( dfu_status.bState == dfuDNLOAD_SYNC ) { if( need_to_write == 0 ) { dfu_status.bState=dfuDNLOAD_IDLE; dfu_status.bwPollTimeout0 = 0x00; } else { dfu_status.bState=dfuDNBUSY; dfu_status.bwPollTimeout0 = 0x3F; } } else if( dfu_status.bState == dfuDNBUSY ) { if( need_to_write == 0) dfu_status.bState=dfuDNLOAD_SYNC; } else if( dfu_status.bState == dfuMANIFEST_SYNC) { dfu_status.bState=dfuMANIFEST; dfu_status.bwPollTimeout0 = 0xFF; hw_state_indicator( HW_STATE_DONE ); } else if( dfu_status.bState == dfuMANIFEST && need_to_write == 0) { // Finish erasing flash while( flash_target < SI32_MCU_FLASH_SIZE) { if( 0 != hw_flash_erase( flash_target, 1 ) ) { dfu_status.bState = dfuERROR; dfu_status.bStatus = errERASE; hw_state_indicator( HW_STATE_ERROR ); } flash_target += BLOCK_SIZE_U8; } dfu_status.bState=dfuMANIFEST_WAIT_RESET; } for (i=0; i<STATUS_SZ; i++) { usb_buf_write(EP_CTRL, *((U8 *)&dfu_status + i)); } ep_write(EP_CTRL); if( dfu_status.bState == dfuMANIFEST_WAIT_RESET ) { hw_wait_ms(200); hw_boot_image( 1 ); } if( need_to_write ) { if( 0 != hw_flash_erase( flash_target, 1 ) ) { dfu_status.bState = dfuERROR; dfu_status.bStatus = errERASE; hw_state_indicator( HW_STATE_ERROR ); } if( 0 != hw_flash_write( flash_target, ( U32* )flash_buffer, flash_buffer_ptr - flash_buffer, 1 ) ) { dfu_status.bState = dfuERROR; dfu_status.bStatus = errVERIFY; hw_state_indicator( HW_STATE_ERROR ); } flash_buffer_ptr = flash_buffer; flash_target += BLOCK_SIZE_U8; need_to_write = 0; if( dfu_status.bState != dfuMANIFEST ) dfu_status.bState=dfuDNLOAD_SYNC; } } break; case DFU_CLRSTATUS: if (req->type & (HOST_TO_DEVICE | TYPE_CLASS | RECIPIENT_INTF)) { // wvalue is zero // wlength is 0 // data is none if( dfu_status.bState == dfuERROR ) { dfu_status.bStatus = OK; dfu_status.bState = dfuIDLE; hw_state_indicator( HW_STATE_ERROR_CLR ); } } break; case DFU_GETSTATE: if (req->type & (DEVICE_TO_HOST | TYPE_CLASS | RECIPIENT_INTF)) { // wvalue is zero // wlength is 1 // data is state // Transition?: No State Transition usb_buf_write( EP_CTRL, dfu_status.bState ); ep_write(EP_CTRL); } break; case DFU_ABORT: if (req->type & (HOST_TO_DEVICE | TYPE_CLASS | RECIPIENT_INTF)) { // wvalue is zero // wlength is 0 // data is none if( dfu_status.bState == dfuIDLE ) { dfu_status.bStatus = OK; dfu_status.bState = dfuIDLE; } else if ( dfu_status.bState == dfuDNLOAD_IDLE ) { flash_target = FLASH_TARGET; if( 0 != hw_flash_erase( flash_target, 1 ) ) { dfu_status.bState = dfuERROR; dfu_status.bStatus = errERASE; hw_state_indicator( HW_STATE_ERROR ); } dfu_status.bStatus = OK; dfu_status.bState = dfuIDLE; ep_send_zlp(EP_CTRL); } } break; default: ep_set_stall(EP_CTRL); break; } }