int w99685_v4l1_ioctl(w685cf_t *priv, unsigned int cmd, void * buf) { int err = 0; CmdParameters_t *paramsp = NULL; CmdReturns_t *retsp = NULL; Firmware_t ifirmware; UINT8 *datap; int i; #ifdef W865THREAD int whichselect; ImageContainer_t *containerp = priv->images; #endif if (down_interruptible2(&priv->lock)) { printk("Device has been locked\n"); err = -EINTR; goto out; } //printk("Cmd: %x, getclass: %x, IOCTLSETFW_CAMERA = %x\n", cmd, IOCTLGETCLASS,IOCTLSETFW_CAMERA); if(cmd == IOCTLGETCLASS) { if(!buf) { printk("Illegal buffer address\n"); err = -EINVAL; goto outup; } if(copy_to_user(buf, DEVICECLALSS, (strlen(DEVICECLALSS)+1))) { printk("Cannot put data to user\n"); err = -EFAULT; } err = (strlen(DEVICECLALSS)+1); printk("Get Class name: %s\n", DEVICECLALSS); goto outup; } else if(cmd == IOCTLGETSTATUS) { if(!buf) { printk("Illegal buffer address\n"); err = -EINVAL; goto outup; } if(copy_to_user(buf, (char *)&(FREG7), sizeof(FREG7))) { printk("Cannot put data to user\n"); err = -EFAULT; } goto outup; } else if(cmd == IOCTLSETFW_CAMERA) { diag_printf("IOCTLSETFW_CAMERA = %x\n",IOCTLSETFW_CAMERA); if(copy_from_user(&ifirmware, (void *)buf, sizeof(Firmware_t))) { printk("Cannot copy data from user\n"); err = -EFAULT; goto outup; } printk("Firmware size: %d, %x\n", ifirmware.Length, ifirmware.Data); datap = (UINT8 *)malloc(ifirmware.Length*sizeof(UINT8)); diag_printf("datap %p\n",datap); if(!datap) { printk("No enough memory\n"); err = -ENOMEM; goto outup; } if(copy_from_user(datap, (void *)ifirmware.Data, ifirmware.Length*sizeof(UINT8))) { printk("Cannot copy data from user\n"); free(datap); err = -EFAULT; goto outup; } InitCFI(0); DownLoadFirmware2Camera(datap, ifirmware.Length); free(datap); for(i=0;i<100;i++) wait_ms(20); printk("DownLoad Firmware ok\n"); InitCFI(0); wait_ms(40); //CardDection(); //W99685CMD_Suspand(); //wait_ms(40); #if 1//ndef __OUTPUT2TV__ W99685CMD_SetOpMode(OP_SINGLE, PPC_YUV422, 0); W99685CMD_SetLCMNums(LCD1_ON_685,LCD_BUS_16); //KDEBUG("Have set LCMNUMS"); W99685CMD_SelectLCM(LCM_1ST); //KDEBUG("Have selected LCM\n"); W99685CMD_SetLCMRes(128, 161); //KDEBUG("Have set LCM resolution\n"); LCM_FillChar(lcm_buf, LEN_LCMBF); //wait_ms(100000); //memset(lcm_buf, 0xff, LEN_LCMBF); //LCM_FillChar(lcm_buf, LEN_LCMBF); //KDEBUG("Have Filled LCM with char\n"); W99685CMD_SetLCMWndPos(0, 32); W99685CMD_SetLCMWndSize(128, 96); #endif goto outup; } else if(cmd == IOCTLSETFW_USBBRIDGE) { DownLoadFirmware2Camera(W685BRIDGEFW, sizeof(W685BRIDGEFW)); printk("Have DownLoad Bridge Firmware to W99685\n"); goto outup; } else if(cmd == IOCTLDRAWINBYPASS) { #if 1 if(copy_from_user(&ifirmware, (void *)buf, sizeof(Firmware_t))) { diag_printf("Cannot copy data from user\n"); err = -EFAULT; goto outup; } printk("Image size: %d\n", ifirmware.Length); datap = (UINT8 *)malloc(ifirmware.Length*sizeof(UINT8)); if(!datap) { printk("No enough memory\n"); err = -ENOMEM; goto outup; } if(copy_from_user(datap, (void *)ifirmware.Data, ifirmware.Length*sizeof(UINT8))) { printk("Cannot copy data from user\n"); free(datap); err = -EFAULT; goto outup; } InitCFI(1); wait_ms(20); DrawInByPassMode(datap, ifirmware.Length); InitCFI(0); wait_ms(20); free(datap); #else InitCFI(1); wait_ms(20); ByPass_Test(); InitCFI(0); wait_ms(20); #endif goto outup; } if (copy_from_user(&priv->m_req, (void *)buf, sizeof(CmdReq_t))) { diag_printf("Cannot copy data from user\n"); err = -EFAULT; goto outup; } if(priv->m_req.cmd_params) { if (copy_from_user(&priv->m_cmdparams, (void *)priv->m_req.cmd_params, sizeof(CmdParameters_t))) { diag_printf("Cannot copy data from user\n"); err = -EFAULT; goto outup; } paramsp = &priv->m_cmdparams; } // allow no parameters // else { // printk("Command has not parameters\n"); // err = -EINVAL; // goto outup; // } //printk("priv->m_req.cmd_rets: %x, %d\n", priv->m_req.cmd_rets, __LINE__); if(priv->m_req.cmd_rets) { retsp = &priv->m_cmdrets; memset(retsp, 0, sizeof(CmdReturns_t)); } // printk("priv->m_req.cmd_rets: %x, %d\n", priv->m_req.cmd_rets, __LINE__); // CommandDump(&priv->m_req, &priv->m_cmdparams); #ifdef W865THREAD if(priv->m_req.subcmd == CMD_GETJPGBITS) { err = GetImageLenFromContainer(containerp); TDEBUG("Get Image len: %d, which: %d", err, containerp->reading); if(err >= 0) { RETVAL4(retsp) = ABYTE(err); RETVAL3(retsp) = BBYTE(err); RETVAL2(retsp) = CBYTE(err); RETVAL1(retsp) = DBYTE(err); } if(priv->m_req.cmd_rets) { if(copy_to_user(priv->m_req.cmd_rets, retsp, sizeof(CmdReturns_t))) { err = -EFAULT; goto outup; } } up(&priv->lock); return err; } #endif // printk("subcmd: 0x%x, priv->m_req.cmd_rets: %x, %d\n", priv->m_req.subcmd, priv->m_req.cmd_rets, __LINE__); err = SendCommand2W685(cmd, priv->m_req.subcmd, paramsp, retsp, priv->m_req.flag, NULL); if(err < 0) { printf("W99685: send command erro\n"); goto outup; } if(priv->m_req.cmd_rets) { // printk("Copy to user retvals: %x, val: %x, %x, %x, %x\n", priv->m_req.cmd_rets,\ // RETVAL4(retsp), RETVAL3(retsp), RETVAL2(retsp), RETVAL1(retsp)); if(copy_to_user(priv->m_req.cmd_rets, retsp, sizeof(CmdReturns_t))) { diag_printf("Cannot copy data to user\n"); err = -EFAULT; goto outup; } } outup: up(&priv->lock); // printk("return value: %d\n", err); out: return err; }
/** * Checks if given stroke colour is already set in PDF gstate and if not, * update the gstate accordingly. * \param page PDF page where the update needs to happen. * \param col Wanted stroke colour. */ void pdfw_gs_strokecolour(HPDF_Page page, colour col) { if (col == pdfw_gs[pdfw_gs_level].strokeColour) return; pdfw_gs[pdfw_gs_level].strokeColour = col; if (RBYTE(col) == GBYTE(col) && GBYTE(col) == BBYTE(col)) HPDF_Page_SetGrayStroke(pdf_page, R(col)); else HPDF_Page_SetRGBStroke(pdf_page, R(col), G(col), B(col)); }
/** * Checks if given fill colour is already set in PDF gstate and if not, * update the gstate accordingly. * \param page PDF page where the update needs to happen. * \param col Wanted fill colour. */ void pdfw_gs_fillcolour(HPDF_Page page, colour col) { if (col == pdfw_gs[pdfw_gs_level].fillColour) return; pdfw_gs[pdfw_gs_level].fillColour = col; if (RBYTE(col) == GBYTE(col) && GBYTE(col) == BBYTE(col)) HPDF_Page_SetGrayFill(pdf_page, R(col)); else HPDF_Page_SetRGBFill(pdf_page, R(col), G(col), B(col)); }