/*Poll functions (when we awaiting for finger)*/ void build_poll_cmd(struct et_cmd* cmd) { memset(cmd,0,sizeof(*cmd)); cmd->flag1=0x200; cmd->cmd=ECMD_READ_SHORT; cmd->flag2=0x1A00; cmd->flag4=0xB0; cmd->flag5=0x100; fill_init_cmd(cmd); }
static int init(void) { unsigned char req_data[MAX_PACKET_LEN]; int len; int r; alloc_transfers(); wmlog_msg(2, "Continuous async read start..."); CHECK_DISCONNECTED(libusb_submit_transfer(req_transfer)); len = fill_protocol_info_req(req_data, USB_HOST_SUPPORT_SELECTIVE_SUSPEND | USB_HOST_SUPPORT_DL_SIX_BYTES_HEADER | USB_HOST_SUPPORT_UL_SIX_BYTES_HEADER | USB_HOST_SUPPORT_DL_MULTI_PACKETS); set_data(req_data, len); process_events_by_mask(500, WDS_PROTO_FLAGS); len = fill_mac_lowlevel_req(req_data); set_data(req_data, len); process_events_by_mask(500, WDS_OTHER); len = fill_init_cmd(req_data); set_data(req_data, len); len = fill_string_info_req(req_data); set_data(req_data, len); process_events_by_mask(500, WDS_CHIP | WDS_FIRMWARE); wmlog_msg(1, "Chip info: %s", wd_status.chip); wmlog_msg(1, "Firmware info: %s", wd_status.firmware); len = fill_diode_control_cmd(req_data, diode_on); set_data(req_data, len); len = fill_mac_req(req_data); set_data(req_data, len); process_events_by_mask(500, WDS_MAC); wmlog_msg(1, "MAC: %02x:%02x:%02x:%02x:%02x:%02x", wd_status.mac[0], wd_status.mac[1], wd_status.mac[2], wd_status.mac[3], wd_status.mac[4], wd_status.mac[5]); len = fill_string_info_req(req_data); set_data(req_data, len); process_events_by_mask(500, WDS_CHIP | WDS_FIRMWARE); len = fill_auth_policy_req(req_data); set_data(req_data, len); process_events_by_mask(500, WDS_OTHER); len = fill_auth_method_req(req_data); set_data(req_data, len); process_events_by_mask(500, WDS_OTHER); len = fill_auth_set_cmd(req_data, ssid); set_data(req_data, len); return 0; }
/*Enroll functions (When we capturing an image)*/ void build_enroll_cmd(struct et_cmd* cmd,int stage) { memset(cmd,0,sizeof(*cmd)); switch(stage) { case 1: cmd->cmd=ECMD_SETREG; cmd->flag2=0x20; cmd->flag3=0x8400; cmd->flag4=0x74; cmd->flag5=0x4110; break; case 2: case 3: case 4: case 34: case 39: cmd->flag1=0x600; cmd->cmd=ECMD_READ_LONG; cmd->flag2=0x21; cmd->flag4=0x3; break; case 5: case 6: case 7: case 8: case 9: case 10: case 11: case 12: case 13: case 14: case 15: cmd->cmd=ECMD_SETREG; cmd->flag2=0x20; cmd->flag3=0x8400; cmd->flag4=0x1074; cmd->flag5=0x4138; break; case 16: cmd->flag1=0x1800; cmd->cmd=ECMD_READ_LONG; cmd->flag2=0x21; cmd->flag4=0x0C; break; case 17: case 18: case 19: case 20: case 21: case 22: case 23: case 24: cmd->flag1=0xF000; cmd->cmd=ECMD_READ_LONG; cmd->flag2=0x21; cmd->flag4=0x78; break; case 25: cmd->flag1=0x200; cmd->cmd=ECMD_READ_SHORT; cmd->flag2=0x1300; cmd->flag3=0x300; cmd->flag5=0x100; break; case 26: cmd->flag1=0x200; cmd->cmd=ECMD_WRITE_SHORT; cmd->flag2=0x2300; cmd->flag3=0x300; cmd->flag5=0x100; break; case 27: case 32: case 37: cmd->flag1=0x200; cmd->cmd=ECMD_READ_SHORT; cmd->flag2=0x1200; cmd->flag4=0x21; cmd->flag5=0x100; break; case 28: cmd->flag1=0x200; cmd->cmd=ECMD_READ_SHORT; cmd->flag2=0x1300; cmd->flag3=0x300; cmd->flag4=0x05; cmd->flag5=0x100; break; case 29: cmd->flag1=0x200; cmd->cmd=ECMD_WRITE_SHORT; cmd->flag2=0x2300; cmd->flag3=0x300; cmd->flag4=0x05; cmd->flag5=0x100; break; case 30: cmd->flag1=0x200; cmd->cmd=ECMD_READ_SHORT; cmd->flag2=0x1300; cmd->flag3=0x300; cmd->flag4=0x04; cmd->flag5=0x100; break; case 31: cmd->flag1=0x200; cmd->cmd=ECMD_WRITE_SHORT; cmd->flag2=0x2300; cmd->flag3=0x300; cmd->flag4=0x04; cmd->flag5=0x100; break; case 33: case 38: cmd->cmd=ECMD_SETREG; cmd->flag2=0x20; cmd->flag3=0x8400; cmd->flag4=0x1074; cmd->flag5=0x4118; break; case 35: cmd->cmd=ECMD_SETREG; cmd->flag2=0x8128; cmd->flag3=0xC400; cmd->flag4=0x5D0; cmd->flag5=0xC0C0; break; case 36: case 41: cmd->flag1=0x200; cmd->cmd=ECMD_READ_SHORT; cmd->flag2=0x1A00; cmd->flag4=0xB0; cmd->flag5=0x100; break; case 40: cmd->cmd=ECMD_SETREG; cmd->flag2=0x8128; cmd->flag3=0xC400; cmd->flag4=0x5B0; cmd->flag5=0xC0C0; break; } fill_init_cmd(cmd); }
int et_write_init(struct fp_img_dev* dev,struct et_init* dinit,void* user_data) { struct et_cmd ecmd; static struct init_data adata; int r; adata.init=dinit; adata.ssm=user_data; build_init_cmd(&ecmd,dinit->stage); fill_init_cmd(&ecmd); //Send command to device struct libusb_transfer* transfer=libusb_alloc_transfer(0); if(!transfer) return -ENOMEM; switch(dinit->stage) { case 3: case 36: ret_buf[0]=0x48; goto _evi_w; case 5: case 7: ret_buf[0]=0x0C; goto _evi_w; case 11: case 40: case 42: case 48: case 50: goto _evi_w; case 13: ret_buf[0]=0x23; goto _evi_w; case 15: case 44: ret_buf[0]=0x4D; goto _evi_w; case 17: ret_buf[0]=0x52; goto _evi_w; case 46: ret_buf[0]=0x42; _evi_w: if(!dinit->rstage) libusb_fill_bulk_transfer(transfer,dev->udev,EP_OUT,(char*)&cmd_buf,31,et_write_init_cb,&adata,BULK_TIMEOUT); else { //fp_dbg("ret_buf: 0x%02hhX",ret_buf[0]); libusb_fill_bulk_transfer(transfer,dev->udev,EP_OUT,(char*)&ret_buf,512,et_write_init_cb,&adata,BULK_TIMEOUT); } break; default: libusb_fill_bulk_transfer(transfer,dev->udev,EP_OUT,(char*)&cmd_buf,31,et_write_init_cb,&adata,BULK_TIMEOUT); break; } //fp_dbg("->: %s",print_cmd_buf()); r=libusb_submit_transfer(transfer); if(r<0) { libusb_free_transfer(transfer); r=-EIO; } return r; }