Exemplo n.º 1
0
int main(int argc, const char *argv[])
{
	int fd  = -1;
	int ret = -1;
	unsigned int pos;
	unsigned int zp;
	unsigned short reg_value;
	MOTOR_DIR_E dir;

	if (argc < 2)
	{
		usage();
		return 0;
	}

	fd = open(dev_name, O_RDWR);
	if (fd < 0)
	{
		printf("open %s failed!\n", dev_name);
		return -1;
	}

	if (!strcmp(argv[1], "-i"))
	{
		ret = WriteCalData();
		ret = ReadCalData();
		if (ret < 0 )
		{
			printf("read cal data failed!\n");
			return -1;
		}
		sleep(1);
		//ret = write(fd, (unsigned char *)foc_cal_tbl, sizeof(foc_cal_tbl));
		//if (ret != sizeof(foc_cal_tbl))
		//{
		//	printf("write cal data failed!\n");
		//	return -1;
		//}

		ret = ioctl(fd, LENS_IOC_INIT);
		if (ret < 0)
		{
			printf("ioctl: LENS_IOC_INIT failed.\n");
			goto err;
		}
	}
	else if (!strcmp(argv[1], "-fp"))
	{
		if (argc < 3)
		{
			usage();
			goto err;
		}

		pos = atoi(argv[2]);
		ret = ioctl(fd, LENS_IOC_FOCPLUS, &pos);
		if (ret < 0)
		{
			printf("ioctl: LENS_IOC_FOCPLUS failed.\n");
			goto err;
		}
	}
	else if (!strcmp(argv[1], "-fm"))
	{
		if (argc < 3)
		{
			usage();
			goto err;
		}

		pos = atoi(argv[2]);
		ret = ioctl(fd, LENS_IOC_FOCMINUS, &pos);
		if (ret < 0)
		{
			printf("ioctl: LENS_IOC_FOCMINUS failed.\n");
			goto err;
		}
	}
	else if (!strcmp(argv[1], "-zp"))
	{
		ret = ioctl(fd, LENS_IOC_ZOOMPLUS);
		if (ret < 0)
		{
			printf("ioctl: LENS_IOC_ZOOMPLUS failed.\n");
			goto err;
		}
	}
	else if(!strcmp(argv[1], "-zm"))
	{
		ret = ioctl(fd, LENS_IOC_ZOOMMINUS);
		if (ret < 0)
		{
			printf("ioctl: LENS_IOC_ZOOMMINUS failed.\n");
			goto err;
		}
	}
	else if(!strcmp(argv[1], "-fd"))
	{
		if (argc < 3)
		{
			usage();
			goto err;
		}

		dir = atoi(argv[2]);
		ret = ioctl(fd, LENS_IOC_SETFOCDIR, &dir);
		if (ret < 0)
		{
			printf("ioctl: LENS_IOC_SETFOCDIR failed.\n");
			goto err;
		}
	}
	else if(!strcmp(argv[1], "-gd"))
	{
		ret = ioctl(fd, LENS_IOC_GETFOCDIR, &dir);
		if (ret < 0)
		{
			printf("ioctl: LENS_IOC_GETFOCDIR failed.\n");
			goto err;
		}
		printf("Get focus dir is: %d\n", dir);
	}
	else if(!strcmp(argv[1], "-sf"))
	{
		if (argc < 3)
		{
			usage();
			goto err;
		}

		pos = atoi(argv[2]);
		ret = ioctl(fd, LENS_IOC_SETFOCPOS, &pos);
		if (ret < 0)
		{
			printf("ioctl: LENS_IOC_SETFOCPOS failed.\n");
			goto err;
		}
	}
	else if(!strcmp(argv[1], "-gf"))
	{
		ret = ioctl(fd, LENS_IOC_GETFOCPOS, &pos);
		if (ret < 0)
		{
			printf("ioctl: LENS_IOC_GETFOCPOS failed.\n");
			goto err;
		}
		printf("Get focus pos is: %d\n", pos);
	}
	else if(!strcmp(argv[1], "-sz"))
	{
		if (argc < 3)
		{
			usage();
			goto err;
		}

		zp = atoi(argv[2]);
		ret = ioctl(fd, LENS_IOC_SETZOOMPOINT, &zp);
		if (ret < 0)
		{
			printf("ioctl: LENS_IOC_SETZOOMPOINT failed.\n");
			goto err;
		}
	}
	else if(!strcmp(argv[1], "-gz"))
	{
		ret = ioctl(fd, LENS_IOC_GETZOOMPOINT, &zp);
		if (ret < 0)
		{
			printf("ioctl: LENS_IOC_GETZOOMPOINT failed.\n");
			goto err;
		}
		printf("Get zoom point is: %d\n", zp);
	}
	else if(!strcmp(argv[1], "-fr"))
	{
		ret = ioctl(fd, LENS_IOC_GETFOCREG, &reg_value);
		if (ret < 0)
		{
			printf("ioctl: LENS_IOC_GETFOCREG failed.\n");
			goto err;
		}
		printf("Get focus reg value is:%#x\n", reg_value);
	}
	else
	{
		usage();
		goto err;
	}

err:
	close(fd);

	return 0;
}
Exemplo n.º 2
0
/**
  BurnIn main loop

  BurnIn main loop
  [CalBurnIn internal API]

  @param UINT32 uiOperation: Which operation you want to run
    BURNIN_OP_BURNIN            (Burn In)
    BURNIN_OP_ZOOMAF            (ZoomAF Lasting)
    BURNIN_OP_FLASH             (Flash Lasting)
    BURNIN_OP_168H              (168H)
  @return void
*/
static void Cal_BurnIn(UINT32 uiOperation)
{
    UINT32      uiTimerID, uiFlag;
    UINT32      uiKeyFlagID, uiKeyEvent;
//    UINT32      uiOldPressConfig, uiOldReleaseConfig;
    UINT32      uiTotalIteration;
    UINT32      uiInterval;
    UINT32      uiEventCnt;
    PSIM_EVENT  pSimEvent, pStartEvent;
    UINT8       uiKeyStatus, uiRepeatCnt;

    if(i2c_getLockStatus())
        i2c_unlock();

    // Open timer
    if (TIMEROpen((UINT *)&uiTimerID, Cal_BurnInTimerISR) != E_OK)
    {
        /*
        set_scankey_press_config(uiOldPressConfig);
        set_scankey_release_config(uiOldReleaseConfig);
        */
        return;
    }

    switch (uiOperation)
    {
    case BURNIN_OP_BURNIN:
        //read cal status for check finish item
        ReadCalData();
        FilesysFormat(Primary_GetStorageObj(PRIMARY_STGTYPE_NAND), TRUE);
        FilesysWaitCmdFinish(FST_TIME_INFINITE);
        FilesysFormat(Primary_GetStorageObj(PRIMARY_STGTYPE_NAND), TRUE);

        //if(Cal_CheckStatus()!= 0)
        //    return ;
        uiTotalIteration    = 40; //2hour    //10 ;   // 10*3 min = 30 mins
        pStartEvent         = (PSIM_EVENT)&BurnInEvent;
        Primary_ChangeMode(PRIMARY_MODE_PHOTO);
        break;

    case BURNIN_OP_ZOOMAF:
        uiTotalIteration    = 1000;
        pStartEvent         = (PSIM_EVENT)&ZoomAFEvent;
        Primary_ChangeMode(PRIMARY_MODE_PHOTO);
        break;

    case BURNIN_OP_FLASH:
        FilesysWaitCmdFinish(FST_TIME_INFINITE);
        FilesysFormat(Primary_GetStorageObj(PRIMARY_STGTYPE_NAND), TRUE);
        uiTotalIteration    = 8;  //15 min * 8 = 2 hr
        pStartEvent         = (PSIM_EVENT)&FlashEvent;
        Primary_ChangeMode(PRIMARY_MODE_PHOTO);
        SysSetFlag(FL_FLASH, FLASH_ON);
        break;

    case BURNIN_OP_168H:
        //read cal status for check finish item
        ReadCalData();
        FilesysWaitCmdFinish(FST_TIME_INFINITE);
        FilesysFormat(Primary_GetStorageObj(PRIMARY_STGTYPE_NAND), TRUE);

        //if(Cal_CheckStatus()!= 0)
        //     return ;
        uiTotalIteration    = 0xFFFFFFFF;
        pStartEvent         = (PSIM_EVENT)&BurnInEvent;
        Primary_ChangeMode(PRIMARY_MODE_PHOTO);
        break;

    case BURNIN_OP_10MIN:
        //read cal status for check finish item
        ReadCalData();
        FilesysWaitCmdFinish(FST_TIME_INFINITE);
        FilesysFormat(Primary_GetStorageObj(PRIMARY_STGTYPE_NAND), TRUE);

        //if(Cal_CheckStatus()!= 0)
        //     return ;
        uiTotalIteration    = 10; // 3 min * 10 =30 mins
        pStartEvent         = (PSIM_EVENT)&BurnInEvent;
        Primary_ChangeMode(PRIMARY_MODE_PHOTO);
        break;

    }

    // Init variable
    uiTimeoutValue  = 0;

    // Enable timer and clear all flags
    clr_flg(FLG_ID_BURNIN, FLGBURNIN_ALL);
    TIMERSet(uiTimerID, TIMER_INTERVAL, _TIMER_CTRL_FREE_RUN | _TIMER_CTRL_INT_ENABLE, _TIMER_PLAY);

    for (uiIteration=1; uiIteration<=uiTotalIteration; uiIteration++)
    {
        debug_ind(("\n\r ***Loop = %ld,Event= %ld ***\r\n", uiIteration, uiEventCnt));
        pSimEvent   = pStartEvent;
        uiRepeatCnt = 0;
        uiInterval  = 0;
        uiEventCnt  = 0;

        if(uiOperation == BURNIN_OP_FLASH)
        {
            Ux_SendEvent(&UIPlayObjCtrl,NVTEVT_EXE_SLIDE,1,SLIDE_5SEC);
            ImageInfoTable = FlashImageInfoTable;
        }
        else
            ImageInfoTable = BurnInImageInfoTable;
        Delay_DelayMs(2000);
        Cal_SetImageInfor_Value(uiRepeatCnt);
        while (1)
        {
            wai_flg((UINT *)&uiFlag, FLG_ID_BURNIN, FLGBURNIN_TIMER, TWF_ORW | TWF_CLR);
            uiInterval += TIMER_INTERVAL;

            //avoid display msg too much
            if(uiInterval%2000 == 0)
                Cal_BurnInShowLoop(uiIteration, uiEventCnt,uiRepeatCnt);

            //accumlate time until to interval;the post event
            if (uiInterval >= pSimEvent->uiInterval)
            {
                uiInterval = 0;
                #if 0
                if((uiOperation == BURNIN_OP_BURNIN || uiOperation == BURNIN_OP_10MIN ) && (uiIteration == 4))   //about 10 min,run dark dp
                {
                    Cal_BurnInLog(uiIteration,uiEventCnt,999);
                    if(uiOperation == BURNIN_OP_10MIN)
                        Cal_DPinBurnIn(FALSE);  //not check dp status
                    else
                        Cal_DPinBurnIn(TRUE);   // check dp status
                    break;
                }
                #endif

                // End of event
                if (pSimEvent->uiKeyFlagID == SIM_END)
                {
                    break;
                }
                // Wait for specific flag, or change mode
                else if (pSimEvent->uiKeyFlagID == FLG_ID_BURNIN)
                {
                    if (pSimEvent->uiKeyEvent == FLGBURNIN_WAITING)
                    {
                        // Enable timeout
                        uiTimeoutValue  = pSimEvent->uiInterval;
                        uiTimerCnt      = 0;
                        clr_flg(FLG_ID_BURNIN, FLGBURNIN_TIMEOUT);

                        Cal_BurnInLog(uiIteration,uiEventCnt,uiRepeatCnt);
                        wai_flg((UINT *)&uiFlag, FLG_ID_BURNIN, pSimEvent->uiKeyEvent | FLGBURNIN_TIMEOUT, TWF_ORW | TWF_CLR);

                        if (uiFlag & FLGBURNIN_TIMEOUT)
                        {
                            debug_err(("Wait for specific flag timeout  %d\r\n",pSimEvent->uiInterval));
                        }

                        // Disable timeout
                        uiTimeoutValue = 0;

                        // Clear timer flag
                        clr_flg(FLG_ID_BURNIN, FLGBURNIN_TIMER);

                        uiRepeatCnt = 0;
                        pSimEvent++;
                        uiEventCnt++;
                        debug_ind(("\n\rFLGBURNIN_WAITING  ***Loop = %ld,Event= %ld ***\r\n", uiIteration, uiEventCnt));
                        continue;
                    }


                }
                else // FLG_ID_KEY
                {
                    //log current event
                    Cal_BurnInLog(uiIteration,uiEventCnt,uiRepeatCnt);

                    uiKeyFlagID = pSimEvent->uiKeyFlagID;
                    uiKeyEvent  = pSimEvent->uiKeyEvent;
                    uiKeyStatus = pSimEvent->uiKeyStatus;

                    // Set key event
                    if (uiKeyFlagID != NULL && uiKeyEvent != NULL)
                    {
                        //change key event to post message
                        if(uiKeyFlagID == FLG_ID_KEY)
                        {
                        /*
                            NVTMSG msg;

                            if(uiKeyStatus == KEY_STATUS_PRESS)
                                SET_COMMAND(&msg, NVTEVT_KEY_PRESS);
                            else
                                SET_COMMAND(&msg, NVTEVT_KEY_RELEASE);

                            debug_ind(("uiKeyEvent %x nvtcmd %x \r\n",uiKeyEvent ,Get_NVTCMD(uiKeyEvent)));
                            SET_KEY_EVENT(&msg,Get_NVTCMD(uiKeyEvent));
                            PostMessage(&msg);
                        */
                            if(uiKeyEvent & (Input_GetKeyMask(KEY_PRESS)))
                            {
                                debug_err(("Ux_PostEvent %d \r\n",uiKeyEvent));
                                Ux_PostEvent(Get_NVTCMD(uiKeyEvent), 1, Get_NVTCMD(uiKeyEvent));
                            }

                        }
                        else
                        {
                            set_flg(uiKeyFlagID, uiKeyEvent);
                        }
                    }
                }

                uiRepeatCnt++;


                // Move to next event
                if (uiRepeatCnt == pSimEvent->uiRepeatCnt)
                {
                    uiRepeatCnt = 0;
                    pSimEvent++;
                    uiEventCnt++;
                    debug_ind(("*****next event*Loop = %ld,Event= %ld ***************\r\n", uiIteration, uiEventCnt));
                }

                if ((pSimEvent == pStartEvent)&&((uiOperation==BURNIN_OP_10MIN)||(uiOperation==BURNIN_OP_BURNIN) || (uiOperation==BURNIN_OP_168H) || (uiOperation==BURNIN_OP_FLASH)) )
                {
                     Delay_DelayMs(2000);
                     //for set flash charg,so set capture index first
                     Cal_SetImageInfor_Value(uiRepeatCnt);

                }

            }

        }
    }

    TIMERClose(uiTimerID);

    //tmp write to AAA for read cal data
    AAA_Adjust.ISO_Status = _ISO_Status;
    WriteCalData();

    if(uiOperation == BURNIN_OP_FLASH)
        sprintf(LogStringBuf,"Flash O\r\n");
    else
        sprintf(LogStringBuf,"BurnIn O\r\n");
    Cal_ShowStringWithColor((INT8 *)LogStringBuf, 64,170, _OSD_INDEX_GREEN);

#if 0
    Menu_PowerOff(POWER_OFF);
#endif
    while(1)
        ;;


    /*
    set_scankey_press_config(uiOldPressConfig);
    set_scankey_release_config(uiOldReleaseConfig);
    */

    // Power off DSC after burn in done
    // Premier don't want to power off now (2005.10.16)
    /*
    if (uiOperation == BURNIN_OP_BURNIN)
    {
        PowerOffFlow(TRUE, FALSE);
    }
    */
}
Exemplo n.º 3
0
Arquivo: hk.c Projeto: BlastTNG/flight
void PhaseControl()
{
  static int first_time = 1;
  static struct NiosStruct* phaseNiosAddr[N_DAC_BUS][N_DAC];
  static struct NiosStruct* phaseStepEnaAddr[N_DAC_BUS];
  static struct NiosStruct* phaseStepStartAddr[N_DAC_BUS];
  static struct NiosStruct* phaseStepEndAddr[N_DAC_BUS];
  static struct NiosStruct* phaseStepNstepsAddr[N_DAC_BUS];
  static struct NiosStruct* phaseStepTimeAddr[N_DAC_BUS];

  char field[20];
  int i, j;
  static int step_size = 1;
  static unsigned int k = 0;
  static unsigned int dk = 1;
  static int end = 0;
  static int start = 0;
  int phase = 0;

  if (first_time) {
    first_time = 0;
    for (j = 0; j < N_DAC_BUS; j++) {
      for(i = 0; i < N_DAC; i++) {
        sprintf(field, "dac%1d%02d_phase", j+1, i);
        phaseNiosAddr[j][i] = GetNiosAddr(field);
      }
      sprintf(field, "step%1d_ena_phase", j+1);
      phaseStepEnaAddr[j] = GetNiosAddr(field);
      sprintf(field, "step%1d_start_phase", j+1);
      phaseStepStartAddr[j] = GetNiosAddr(field);
      sprintf(field, "step%1d_end_phase", j+1);
      phaseStepEndAddr[j] = GetNiosAddr(field);
      sprintf(field, "step%1d_nsteps_phase", j+1);
      phaseStepNstepsAddr[j] = GetNiosAddr(field);
      sprintf(field, "step%1d_time_phase", j+1);
      phaseStepTimeAddr[j] = GetNiosAddr(field);

    }	
  }

  for (j = 0; j < N_DAC_BUS; j++) {
    if(CommandData.Phase[j].step.do_step) {
      if (k == 0) {
        start = CommandData.Phase[j].step.start;
        end = CommandData.Phase[j].step.end;
        step_size = (end - start)/CommandData.Phase[j].step.nsteps;

        if(step_size == 0) { // minimum step size is 1
          if (end >= start) step_size = 1;
          if (end < start) step_size = -1;
        }
        end += step_size;
        dk = CommandData.Phase[j].step.dt*SR/1000/FAST_PER_SLOW;
        if (dk == 0) dk = 1;
      }

      phase = start + (k++/dk)*step_size;

      if (step_size > 0) {
        if (phase > PHASE_MAX) phase = PHASE_MAX;
        if (phase >= end || phase == PHASE_MAX)
          CommandData.Phase[j].step.do_step=0;
      } else {
        if (phase < PHASE_MIN) phase = PHASE_MIN;
        if (phase <= end || phase == PHASE_MIN)
          CommandData.Phase[j].step.do_step=0; 
      }

      WriteData(phaseStepEnaAddr[j],
          CommandData.Phase[j].step.do_step, NIOS_QUEUE);
      WriteCalData(phaseStepStartAddr[j],
          CommandData.Phase[j].step.start, NIOS_QUEUE);
      WriteCalData(phaseStepEndAddr[j],
          CommandData.Phase[j].step.end, NIOS_QUEUE);
      WriteData(phaseStepNstepsAddr[j],
          CommandData.Phase[j].step.nsteps, NIOS_QUEUE);
      WriteData(phaseStepTimeAddr[j],
          CommandData.Phase[j].step.dt, NIOS_QUEUE);
      for(i = 0; i < N_DAC; i++)
        WriteData(phaseNiosAddr[j][i], phase, NIOS_QUEUE);
    } else {
      for(i = 0; i < N_DAC; i++)
        WriteData(phaseNiosAddr[j][i],
            CommandData.Phase[j].phase[i], NIOS_QUEUE);
      k = 0;
    }
  }
}