void firmware() { /* Thread code to be added here */ unsigned char print = 0xff; open_drivers(); attach_drivers(); set_uart_baudrate(hUART); vos_delay_msecs(1500); //write_uart(hUART,&print,1); tcbUSBBRI = vos_create_thread_ex(30,2048,USBBRI_attach,"USBBRI_attach",0); tcbUSBTMC = vos_create_thread_ex(30,2048,USBTMC_attach,"USBTMC_attach",0); }
void firmware() { int i; char bufmgk[20]; int idxMgk = 0; FILE *pf; /* Thread code to be added here */ vos_delay_msecs(4000); // 4 second delay for USB key to boot open_drivers(); InitializeUART(); flash_init(); InitializeHID(); printf("DekaBoard Rev: 1B\n"); vfWriteFlash = 0; PROGRAM: if (FOpenUSBKey()) { pf = fopen("deka.svf", "r"); if (pf != NULL) { ProgramFPGA(pf); fclose(pf); } CloseUSBKey(); } else { ProgramFPGA(FILE_FLASH); } while(1) { char tmp; // First check if PROG button pressed vos_dev_read(hGPIO_PORT_B, &tmp, 1, NULL); if (!(tmp & 0x20)) goto PROGRAM; // Else handle input if (FUartData()) { fread(bufmgk, 1, 1, stdin); if (bufmgk[0] == STR_MAGIC[idxMgk]) { idxMgk++; } else { idxMgk = 0; } if(idxMgk == 20) { fwrite(UART_ACK, 1, 3, stdout); fgets(bufmgk, 20, stdin); if (strcmp(bufmgk, "PROG XSVF") == 0) { fgets(bufmgk, 20, stdin); vfWriteFlash = (strcmp(bufmgk, "FLASH") == 0); fwrite(UART_ACK, 1, 3, stdout); ProgramFPGA(stdin); vfWriteFlash = 0; printf("DONE\n"); } else { printf(UART_NACK); } idxMgk = 0; } } } }
void firmware() { /* Thread code to be added here */ // communications ioctl request blocks common_ioctl_cb_t uart_iocb; usbHostHID_ioctl_t hid_iocb; usbhost_device_handle ifDev; // device handle usbhost_ioctl_cb_t hc_iocb; // Host Controller ioctl request block unsigned char byteCount,status; unsigned short num_read; do { open_drivers(); // UART set baud rate uart_iocb.ioctl_code = VOS_IOCTL_UART_SET_BAUD_RATE; uart_iocb.set.uart_baud_rate = DEF_UART_BAUD; vos_dev_ioctl(hUART, &uart_iocb); do { vos_delay_msecs(1000); // wait for enumeration to complete // message("Waiting for enumeration\r\n"); status = usbhost_connect_state(hUSBHOST_2); } while (status != PORT_STATE_ENUMERATED); if (status == PORT_STATE_ENUMERATED) { // message("Enumeration complete\r\n"); vos_gpio_set_port_mode(GPIO_PORT_A, 0b00000100); // A2 на выход vos_gpio_write_port(GPIO_PORT_A, 0b00000100); // зажечь светодиод attach_drivers(); if (hUSBHOST_HID == NULL) { // message("No Wingman Found - code "); // number(status); // message(eol); break; } // get report descriptor hid_iocb.descriptorType = USB_DESCRIPTOR_TYPE_REPORT; hid_iocb.descriptorIndex = USB_HID_DESCRIPTOR_INDEX_ZERO; hid_iocb.Length = 0x40; hid_iocb.get.data=&buf[0]; hid_iocb.ioctl_code = VOS_IOCTL_USBHOSTHID_GET_DESCRIPTOR; status = vos_dev_ioctl(hUSBHOST_HID, &hid_iocb); if (status != USBHOSTHID_OK) { // message("Get report descriptor failed - code "); // number(status); // message(eol); break; } // set idle hid_iocb.reportID = USB_HID_REPORT_ID_ZERO; hid_iocb.idleDuration = 0x20; hid_iocb.ioctl_code = VOS_IOCTL_USBHOSTHID_SET_IDLE; status = vos_dev_ioctl(hUSBHOST_HID, &hid_iocb); if (status != USBHOSTHID_OK) { // message("Set Idle failed - code "); // number(status); // message(eol); break; } // get idle hid_iocb.reportID = USB_HID_REPORT_ID_ZERO; hid_iocb.get.data=&buf[0]; hid_iocb.ioctl_code = VOS_IOCTL_USBHOSTHID_GET_IDLE; status = vos_dev_ioctl(hUSBHOST_HID, &hid_iocb); if (status != USBHOSTHID_OK) { // message("Get Idle failed - code "); // number(status); // message(eol); break; } if (status == USBHOSTHID_OK) { while (1) { if (vos_dev_read(hUSBHOST_HID, buf, 8, &num_read) == USBHOSTHID_OK) { for (byteCount = 0; byteCount < num_read; byteCount++) { number(buf[byteCount]); } // message(eol); } else { // message("USB Read Failed - code "); // number(status); // message(eol); break; } } } // message("Disconnected!\r\n"); vos_gpio_write_port(GPIO_PORT_A, 0b00000000); // погасить все } // end of if PORT_STATE_ENUMERATED vos_dev_close(hUSBHOST_HID); close_drivers(); } while (1); }