int check_private_part(int keyvalue) { int ret; ret = wBoot_part_info("DISK", "private", &part_info); if(!ret) { // int buffer[1024/4]; // int i; __inf("find private part\n"); // if(!wBoot_block_read(part_info.addr + 1024 * 1024/512, 2, buffer)) // { // for(i=0;i<1024/4;i++) // { // if(!(buffer[i] == -1)) // { // __inf("value is bad\n"); // return -1; // } // } // } if(!usb_decect_key(keyvalue)) { usb_start(1); usb_run(); } } return 0; }
/* M0 Core Manage USB */ int main(void) { iap_cmd_res_t iap_cmd_res; usb_descriptor_serial_number_t serial_number; airspy_usb_req_init(); usb_set_configuration_changed_cb(usb_configuration_changed); usb_peripheral_reset(); usb_device_init(0, &usb_device); usb_queue_init(&usb_endpoint_control_out_queue); usb_queue_init(&usb_endpoint_control_in_queue); usb_queue_init(&usb_endpoint_bulk_out_queue); usb_queue_init(&usb_endpoint_bulk_in_queue); usb_endpoint_init(&usb_endpoint_control_out); usb_endpoint_init(&usb_endpoint_control_in); /* Read IAP Serial Number Identification */ iap_cmd_res.cmd_param.command_code = IAP_CMD_READ_SERIAL_NO; iap_cmd_call(&iap_cmd_res); if(iap_cmd_res.status_res.status_ret == CMD_SUCCESS) { /* Only retrieve 2 last 32bits for Serial Number */ serial_number.sn_32b[0] = iap_cmd_res.status_res.iap_result[2]; serial_number.sn_32b[1] = iap_cmd_res.status_res.iap_result[3]; usb_descriptor_fill_string_serial_number(serial_number); } nvic_set_priority(NVIC_USB0_IRQ, 255); nvic_set_priority(NVIC_M4CORE_IRQ, 1); nvic_enable_irq(NVIC_M4CORE_IRQ); usb_run(&usb_device); while(true) { signal_wfe(); if( (get_usb_buffer_offset() >= 16384) && (phase == 1) ) { usb_transfer_schedule_block(&usb_endpoint_bulk_in, &usb_bulk_buffer[0x0000], 0x4000, NULL, NULL); phase = 0; } if( (get_usb_buffer_offset() < 16384) && (phase == 0) ) { usb_transfer_schedule_block(&usb_endpoint_bulk_in, &usb_bulk_buffer[0x4000], 0x4000, NULL, NULL); phase = 1; } } }
void push_over_usb(uint8 *string, int len) { send_usbmessage(string,len); /* What does this do? Who knows really. */ usb_run(); deca_sleep(1000); }
void usb_init(void) { usb_queue_init(&usb_endpoint_control_in_queue); usb_queue_init(&usb_endpoint_control_out_queue); usb_queue_init(&usb_endpoint_bulk_cmd_in_queue); usb_queue_init(&usb_endpoint_bulk_cmd_out_queue); usb_queue_init(&usb_endpoint_bulk_data_in_queue); usb_set_configuration_changed_cb(usb_configuration_changed); usb_peripheral_reset(); usb_device_init(0, &usb_device); usb_endpoint_init(&usb_endpoint_control_out); usb_endpoint_init(&usb_endpoint_control_in); nvic_set_priority(NVIC_USB0_IRQ, 255); usb_run(&usb_device); }
/* ******************************************************************************* * BootMain * * Description: * BOOT主应用程序 * * Parameters: * void * * Return value: * void * * note: * void * ******************************************************************************* */ int BootMain(int argc, char **argv) { __s32 ret; int erase_flash; MBR mbr_info; boot_global_info_t *global_info; DMSG_INFO("big firmware! here we go !\n"); DMSG_INFO("Sprite start\n"); { char ch; ch = wBoot_getc_delay( 1 ); // 27000000 __inf("%d\n", ch); switch(ch) { case '1': { usb_start(); usb_run(); break; } case '2': { __inf("Jump to fel\n"); wBoot_jump_fel( ); break; } case '-': { __u32 dbg = 0x55; __inf("hold\n"); while(dbg == 0x55); break; } case '+': { force_debug = 1; break; } default: break; } } *(volatile unsigned int *)(0x1c20C00 + 0x118) = 0; *(volatile unsigned int *)(0x1c20C00 + 0x11C) = 3; //数据初始化 memset(&board_res, 0, sizeof(boot_hardware_res)); //申请内存,填充第一个启动脚本 global_info = (boot_global_info_t *)wBoot_malloc(sizeof(boot_global_info_t)); if(!global_info) { __wrn("unable to malloc memory for bootini\n"); return -1; } //填充启动脚本 memset(global_info, 0, sizeof(boot_global_info_t)); ret = script_patch("c:\\boot.ini", global_info, 0); if(ret < 0) { __wrn("unable to parser boot.ini\n"); return -1; } //初始化显示设备 __inf("display init\n"); cue = -1; if(boot_ui_init(global_info->display_device, global_info->display_mode) >= 0) { //开启字符显示 __inf("char init\n"); boot_ui_char_init(0); cue = 0; } sprite_led_init(); sprite_wrn_init(); //获取MBR信息 __inf("mbr fetch\n"); ret = card_mbr_info((void *)&mbr_info); if(ret < 0) { __wrn("unable to get mbr info\n"); return -1; } boot_ui_check_device_open(); ret = wBoot_script_parser_fetch("platform", "eraseflag", &erase_flash, 1); if((!ret) && (erase_flash)) { erase_flash = 1; } else { erase_flash = 0; } //开始准备系统数据 ret = card_sprite((void *)&mbr_info,erase_flash, cue); sprite_wrn_exit(); sprite_led_exit(ret); if(!ret) { char buffer[512]; board_res.led_status[0] = CARD_SPRITE_SUCCESSED; sprite_wrn("CARD OK\n"); __inf("get work mode\n"); memset(buffer, 0, 512); wBoot_block_dread(15, 1, buffer); if(strcmp(buffer, "1234567890abcdefghijklmnopqrstuvwxyz")) { __inf("try to close\n"); wBoot_timer_delay(3000); wBoot_power_set_off(); } else { int ret; __inf("try to format\n"); wBoot_timer_delay(500); ret = FormatDisk(); __inf("format %d\n", ret); WATCHDOG_REG_MODE = 0x0; wBoot_timer_delay(500); WATCHDOG_REG_MODE = 0x3; } } else { board_res.led_status[0] = CARD_SPRITE_FAIL; } { __u32 dbg = 0x55; while(dbg == 0x55); } return 0; }