亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? camera.c

?? 一個機器人開發的相關嵌入式開發源碼
?? C
字號:
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
 *  camera.c - interface code for C328 camera module
 *    Copyright (C) 2005-2006  Surveyor Corporation
 *
 *  This program is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License as published by
 *  the Free Software Foundation; either version 2 of the License, or
 *  (at your option) any later version.
 *
 *  This program is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details (www.gnu.org/licenses)
 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
#include "camera.h"

unsigned char initial_80[] =   { 0xAA, 0x01, 0x00, 0x07, 0x01, 0x01 };
unsigned char initial_160[] =  { 0xAA, 0x01, 0x00, 0x07, 0x03, 0x03 };
unsigned char initial_320[] =  { 0xAA, 0x01, 0x00, 0x07, 0x05, 0x05 };
unsigned char initial_640[] =  { 0xAA, 0x01, 0x00, 0x07, 0x07, 0x07 };
unsigned char reset[] =        { 0xAA, 0x08, 0x01, 0x00, 0x00, 0xFF };
unsigned char set_baud_921k[] ={ 0xAA, 0x07, 0x01, 0x01, 0x00, 0x00 };
unsigned char get_preview[] =  { 0xAA, 0x04, 0x05, 0x00, 0x00, 0x00 };  
unsigned char set_pkg_size[] = { 0xAA, 0x06, 0x08, 0x00, 0x02, 0x00 };
unsigned char sync[] =         { 0xAA, 0x0D, 0x00, 0x00, 0x00, 0x00 };
unsigned char ack[] =          { 0xAA, 0x0E, 0x00, 0x00, 0x00, 0x00 };
  
unsigned char recv_buf[6];

/*****************************************************************************
 *
 * Description:
 *    Wait for ACK from C328
 *
 ****************************************************************************/
unsigned char
wait_for_ack(unsigned char *rbuf)
{
  unsigned int ix, t0;
  unsigned char rChar;
  
  // look for ACK
  for (ix=0; ix<6; ix++)
    rbuf[ix] = 0;
  ix = 0;
  t0 = TIMER0_TC;
    
  while (ix < 6 && ((TIMER0_TC-t0) < 100)) 
  {  
    if (uart1GetChar(&rChar) == TRUE) 
    {
      //uart0SendChar('a');
      //printNumber(16, 2, FALSE, '0', rChar);
      if (ix == 0 && rChar != 0xAA)
        continue;
      else
          rbuf[ix++] = rChar; 
    }
  }
  
  if ((ix < 6) || (rbuf[1] != 0x0E))
    return 0;
  else
    return rbuf[2];
}

/*****************************************************************************
 *
 * Description:
 *    Wait for SYNC from C328
 *
 ****************************************************************************/
unsigned char
wait_for_sync(unsigned char *rbuf)
{
  unsigned int ix, t0;
  unsigned char rChar;
  
  for (ix=0; ix<6; ix++)
    rbuf[ix] = 0;
  ix = 0;
  t0 = TIMER0_TC;
    
  while (ix < 6 && ((TIMER0_TC - t0) < 100)) // 100 millisecond timeout
  {  
    if (uart1GetChar(&rChar) == TRUE) 
    {
      //uart0SendChar('s');
      //printNumber(16, 2, FALSE, '0', rChar);
      if (ix == 0 && rChar != 0xAA)
        continue;
      else
          rbuf[ix++] = rChar; 
    }
  }
  
  if ((ix < 6) || (rbuf[1] != 0x0D))
    return 0;
  else
    return 1;
}

/*****************************************************************************
 *
 * Description:
 *    Wait for DATA packet from C328
 *
 ****************************************************************************/
unsigned int
wait_for_data(unsigned char *rbuf)
{
  unsigned int ix, t0;
  unsigned char rChar;
  
  for (ix=0; ix<6; ix++)
    rbuf[ix] = 0;
  ix = 0;
  t0 = TIMER0_TC;
    
  while (ix < 6 && ((TIMER0_TC - t0) < 250)) // 200 millisecond timeout
  {  
    if (uart1GetChar(&rChar) == TRUE) 
    {
      //uart0SendChar('d');
      //printNumber(16, 2, FALSE, '0', rChar);
      if (ix == 0 && rChar != 0xAA)
        continue;
      else
          rbuf[ix++] = rChar; 
    }
  }
  
  if ((ix < 6) || (rbuf[1] != 0x0A))
    return 0;
  else
    return (rbuf[3] + 256*(unsigned int)rbuf[4]);
}


/*****************************************************************************
 *
 * Description:
 *    reset C328
 *
 ****************************************************************************/

void camera_reset(unsigned char *sv)
{
  int ix, t0;
  
  for (ix=0; ix<3; ix++) 
  {
    uart1SendChars(reset, 6);
    if (wait_for_ack(recv_buf) == 0x08) 
    {
      // uart0SendString("reset\n");
      break;
    }
    else
      delayUs(1000000);
  }
  
  // set up camera
  t0 = TIMER0_TC;
  while (1)
  {
    delayUs(10000);
    // uart0SendChar('.');
    
    // send SYNC
    uart1SendChars(sync, 6);

    if (wait_for_ack(recv_buf) != 0x0D) 
      continue;
    
    if (wait_for_sync(recv_buf)) 
    {
      // send ACK back to camera
      ack[2] = 0x0D;
      uart1SendChars(ack, 6);
      break;
    }
  }

  uart1SendChars(set_baud_921k, 6);
  while (wait_for_ack(recv_buf) != 0x07)
  {
    // uart0SendChar(',');
    delayUs(10000);
    uart1SendChars(set_baud_921k, 6);
  }

  initUart1(B921600((CRYSTAL_FREQUENCY * PLL_FACTOR) / VPBDIV_FACTOR), UART_8N1, UART_FIFO_16);
  
  delayUs(100000);

  switch (sv[3])
  {
    case '1':
      uart1SendChars(initial_80, 6);
      while (wait_for_ack(recv_buf) != 0x01) 
        uart1SendChars(initial_80, 6);
      break;
    case '3':
      uart1SendChars(initial_160, 6);
      while (wait_for_ack(recv_buf) != 0x01) 
        uart1SendChars(initial_160, 6);
      break;
    case '5':
      uart1SendChars(initial_320, 6);
      while (wait_for_ack(recv_buf) != 0x01) 
        uart1SendChars(initial_320, 6);
      break;
    }

  uart1SendChars(set_pkg_size, 6);
  while (wait_for_ack(recv_buf) != 0x06) 
    uart1SendChars(set_pkg_size, 6);

}


/*****************************************************************************
 *
 * Description:
 *    Set C328 JPEG resolution
 *
 ****************************************************************************/
unsigned int camera_set_resolution(unsigned char cx)
{
  int t0;

  switch (cx)
  {
    case '1':   
      uart1SendChars(initial_80, 6);
      t0 = TIMER0_TC;
      while (wait_for_ack(recv_buf) != 0x01) 
      {
        uart1SendChars(initial_80, 6);
        if ((TIMER0_TC - t0) > 1000)
          return RESTART;
      }
      return SUCCESS;
    case '3':
      uart1SendChars(initial_160, 6);
      t0 = TIMER0_TC;
      while (wait_for_ack(recv_buf) != 0x01) 
      {
        uart1SendChars(initial_160, 6);
        if ((TIMER0_TC - t0) > 1000)
          return RESTART;
      }
      return SUCCESS;      
    case '5':
      uart1SendChars(initial_320, 6);
      t0 = TIMER0_TC;
      while (wait_for_ack(recv_buf) != 0x01) 
      {
        uart1SendChars(initial_320, 6);
        if ((TIMER0_TC - t0) > 1000)
          return RESTART;
      }
      return SUCCESS;      
    default:
      return RESTART;
  }
}


/*****************************************************************************
 *
 * Description:
 *    grab JPEG frame from C328
 *
 ****************************************************************************/
int camera_grab_frame(unsigned char *cam_buf)
{
  unsigned int jpeg_size, jpeg_pkg, jpeg_runt, last_pkg;

  unsigned int ix, jx, t0;
  unsigned char rxChar;  
  
  jpeg_size = 0;
    
  uart1SendChars(get_preview, 6);
  rxChar = wait_for_ack(recv_buf);
  if (rxChar == 0x04) 
  {
    t0 = TIMER0_TC;
    while (!(jpeg_size=wait_for_data(recv_buf)))
      if ((TIMER0_TC - t0) > 500)
        return RETRY;
  }
  else if (rxChar == 0x05)  // bug in older C328 firmware returns jpeg_size too soon
  {
    jpeg_size = recv_buf[3] + 256*(unsigned int)recv_buf[4];  
  }      
  else 
    return RETRY;
    
  // get picture after first clearing buffer
  for (ix=0; ix<C328_BUFSIZE; ix++)
    cam_buf[ix] = 0;
      
  jpeg_size = (jpeg_size + 3) & 0xFFFFFFFC;  // size is always a multiple of 4

  ack[2] = 0;
  uart1SendChars(ack, 6);
    
  ix = 0;
  last_pkg = jpeg_size / 506;
  jpeg_runt = (jpeg_size % 506) + 6;
  for (jpeg_pkg=0; jpeg_pkg<(last_pkg+1); jpeg_pkg++)
  {
    if (jpeg_pkg < last_pkg)
    {
      jx = 0;
      t0 = TIMER0_TC;
      while ((jx < 512) && ((TIMER0_TC - t0) < 500))
      //while ((jx < 512))
      {
        if (uart1GetChar(&rxChar))
        {
          jx++;
          if ((jx > 4) && (jx < 511))
          {
            cam_buf[ix++] = rxChar;
          }
        }
      }
    }
    else
    {
      jx = 0;
      t0 = TIMER0_TC;
      while ((jx < jpeg_runt) && ((TIMER0_TC - t0) < 500))
      //while ((jx < jpeg_runt))
      {
        if (uart1GetChar(&rxChar))
        {
          jx++;
          if ((jx > 4) && (jx < (jpeg_runt-1)))
          {
            cam_buf[ix++] = rxChar;
          }
          if ((cam_buf[ix-2] == 0xFF) && (cam_buf[ix-1] == 0xD9))  // end of image
          {
            while (jx++ < jpeg_runt)  // send nulls to fill out frame
              cam_buf[ix++] = 0x00;
            break;
          }
        }
      }
    }
  
    ack[4] = jpeg_pkg + 1;
    uart1SendChars(ack, 6);
  }

  ack[4] = 0xF0;
  ack[5] = 0xF0;
  uart1SendChars(ack, 6);
  ack[4] = 0;
  ack[5] = 0;  // reset ack packet
  

  return (int)jpeg_size;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
男女视频一区二区| 欧美一区三区四区| 亚洲男同1069视频| 在线观看免费视频综合| 亚洲不卡一区二区三区| 91精品在线免费| 精品一区二区三区免费毛片爱| 精品捆绑美女sm三区| 国产精品夜夜爽| 国产精品免费aⅴ片在线观看| 不卡欧美aaaaa| 亚洲va欧美va人人爽| 精品国产91亚洲一区二区三区婷婷| 免费看日韩a级影片| 欧美电影免费观看高清完整版在 | 中文无字幕一区二区三区| 成人午夜在线视频| 亚洲成人黄色影院| 久久先锋影音av鲁色资源| 91麻豆免费视频| 蜜桃视频一区二区| 亚洲欧洲综合另类在线| 日韩一区二区电影| 9i在线看片成人免费| 免费观看成人av| 亚洲欧洲99久久| 欧美高清激情brazzers| 成人免费看视频| 日韩精品电影在线| 日韩伦理av电影| 精品久久五月天| 欧美亚洲综合色| 国产成人亚洲综合色影视| 亚洲综合无码一区二区| 国产欧美日韩激情| 日韩欧美国产系列| 欧美在线你懂得| 成人黄色片在线观看| 免费在线一区观看| 亚洲一区中文日韩| 亚洲国产精品传媒在线观看| 欧美日韩国产a| 国产精品影视天天线| 五月天亚洲婷婷| 亚洲黄色录像片| 久久久国产一区二区三区四区小说| 欧美日韩精品一区二区在线播放| 成人激情电影免费在线观看| 麻豆精品视频在线观看免费| 性久久久久久久久| 一区二区三区在线观看视频 | 国产91综合一区在线观看| 日韩有码一区二区三区| 亚洲最大成人综合| 亚洲男人都懂的| 国产精品日产欧美久久久久| 精品国产免费一区二区三区四区| 911精品国产一区二区在线| 在线观看欧美日本| 91视频xxxx| 91玉足脚交白嫩脚丫在线播放| 国产成人综合在线| 国产福利精品一区| 国产suv一区二区三区88区| 国产乱一区二区| 韩日av一区二区| 美美哒免费高清在线观看视频一区二区| 亚洲欧美日韩在线播放| 亚洲婷婷综合色高清在线| 国产亚洲精品超碰| 日本一区二区三级电影在线观看 | 国产欧美日韩精品在线| 久久亚洲捆绑美女| 久久女同性恋中文字幕| 久久青草国产手机看片福利盒子 | 国产a级毛片一区| 成人av高清在线| 色婷婷一区二区| 欧美亚洲禁片免费| 在线不卡免费av| 欧美成人精品3d动漫h| 精品久久国产字幕高潮| 久久久久国产精品免费免费搜索| 久久久久久久网| 国产精品美女一区二区| 亚洲女同一区二区| 亚洲超丰满肉感bbw| 麻豆免费看一区二区三区| 国产在线看一区| 床上的激情91.| 91激情五月电影| 91精品国产综合久久蜜臀| 精品三级在线观看| 国产精品美女一区二区在线观看| 亚洲精品ww久久久久久p站| 亚洲国产精品久久艾草纯爱| 蜜臀久久久99精品久久久久久| 韩国成人在线视频| 99久久久国产精品| 欧美色网站导航| 欧美精品一区二区三| 中文字幕在线不卡视频| 亚洲成人动漫精品| 国内久久精品视频| 色94色欧美sute亚洲线路一ni | 日韩一区二区免费视频| 久久精品一区二区三区不卡牛牛| 亚洲欧洲制服丝袜| 奇米777欧美一区二区| 成人蜜臀av电影| 欧美麻豆精品久久久久久| 国产亚洲欧美激情| 亚洲国产中文字幕在线视频综合 | 国产精品一级二级三级| 91同城在线观看| 日韩一级二级三级精品视频| 欧美国产精品一区二区| 三级欧美韩日大片在线看| 高清在线成人网| 欧美一区二区三区在线视频| 国产精品你懂的| 美美哒免费高清在线观看视频一区二区 | 美女精品一区二区| 色综合欧美在线视频区| 欧美videos大乳护士334| 国产精品理论片在线观看| 蜜臀av一区二区在线观看| 99re8在线精品视频免费播放| 欧美一区二区视频网站| 亚洲日本在线视频观看| 极品销魂美女一区二区三区| 91行情网站电视在线观看高清版| 久久久久久麻豆| 欧美a级一区二区| 欧美天天综合网| 1区2区3区国产精品| 久久精品国产一区二区三区免费看| 色狠狠色噜噜噜综合网| 国产精品女人毛片| 黑人精品欧美一区二区蜜桃| 欧美最新大片在线看| 日本一区二区三区视频视频| 久久99国产精品免费网站| 欧美精品vⅰdeose4hd| 亚洲精品一二三| 97成人超碰视| 国产精品视频免费| 国产在线视视频有精品| 欧美一级理论性理论a| 亚欧色一区w666天堂| 在线观看成人免费视频| 亚洲日本欧美天堂| av电影天堂一区二区在线观看| 26uuu另类欧美亚洲曰本| 蜜桃av噜噜一区二区三区小说| 欧美日韩一区精品| 性久久久久久久| 欧美蜜桃一区二区三区| 午夜视频一区在线观看| 欧美日韩一级黄| 亚洲大片精品永久免费| 欧美在线色视频| 亚洲国产欧美在线人成| 欧美日韩精品一区二区三区四区 | 3751色影院一区二区三区| 亚洲成av人片| 7777精品久久久大香线蕉| 日韩av中文字幕一区二区| 91精品欧美久久久久久动漫| 日本成人在线看| 精品日韩成人av| 国产**成人网毛片九色| 中文字幕在线播放不卡一区| 97久久精品人人澡人人爽| 亚洲精品va在线观看| 欧美日韩国产美| 天天影视涩香欲综合网| 日韩一区二区免费在线电影| 精品一区二区三区在线观看| 久久久久国产精品免费免费搜索| 国产乱码精品一区二区三区五月婷 | 亚洲成年人影院| 91精品国产丝袜白色高跟鞋| 国精产品一区一区三区mba桃花 | 精品蜜桃在线看| 国产传媒一区在线| 中文字幕在线视频一区| 在线精品国精品国产尤物884a| 婷婷久久综合九色国产成人| 欧美一级精品在线| 成人综合在线网站| 亚洲图片欧美视频| 欧美精品一区二| 99精品热视频| 五月婷婷综合在线| 国产午夜精品美女毛片视频| 成人毛片老司机大片| 亚洲一区视频在线观看视频| 欧美一级一级性生活免费录像| 国产成人在线视频网站|