/******************** (C) COPYRIGHT 2011 野火嵌入式开发工作室 ********************
 * 文件名       ：main.c

**********************************************************************************/

#include "common.h"
#include "include.h"
//#include "ov7725.h"
u8  nrf_buff[CAMERA_SIZE + MAX_ONCE_TX_NUM];     //预多
u8 *img_bin_buff = (u8 *)(((u8 *)&nrf_buff) + COM_LEN);  //二值化图像的buf指针，由于开头有 COM_LEN 个字节是留给校验，所以需要加 COM_LEN
u8 	img_buf[CAMERA_W*CAMERA_H];					//非压缩的二值化图像（用于识别）


//这些变量都是测试用，有需要，请自行修改
//可以是其他文件定义，不一定是这个文件里定义，然后把
u8  var1,var2;
u16 var3,var4;
u32 var5,var6;

//压缩二值化图像解压（空间 换 时间 解压）
void img_extract(u8 * dst,u8 * src,u32 srclen)
{
	u8 colour[2]={0,1};	//0 和 1 分别对应的颜色
				//注：野火的摄像头 0 表示 白色，1表示 黑色
	u8 tmpsrc;
	while(srclen --)
	{
		tmpsrc = *src++;
		*dst++ = colour[ (tmpsrc >> 7 ) & 0x01 ];
		*dst++ = colour[ (tmpsrc >> 6 ) & 0x01 ];
		*dst++ = colour[ (tmpsrc >> 5 ) & 0x01 ];
		*dst++ = colour[ (tmpsrc >> 4 ) & 0x01 ];
		*dst++ = colour[ (tmpsrc >> 3 ) & 0x01 ];
		*dst++ = colour[ (tmpsrc >> 2 ) & 0x01 ];
		*dst++ = colour[ (tmpsrc >> 1 ) & 0x01 ];
		*dst++ = colour[ (tmpsrc >> 0 ) & 0x01 ];
	}
}
	
void main(void)
{
    u8 status = 0;	                            //用于判断接收/发送状态
        crtl_e  com;
    u32 tmpdata;
    pyLCD_Init();
    NRF_Init();                         		//无线模块初始化       					
    Ov7725_Init(img_bin_buff);          		//摄像头初始化

        
    while(1)
    {
       // disable_irq(PIT0+ 68);                  //关闭PIT中断，避免影响图像采集
        
        ov7725_get_img();			            //采集图像
        img_extract(img_buf , img_bin_buff, CAMERA_SIZE);	//恢复压缩的二值化图像为非压缩图像(纯示范，没啥作用)
    
       oled_img(img_buf);
        
		NRF_MSG_send(COM_IMG,nrf_buff);    		//发送数据，发送长度由com对应的函数决定 

		//这里可以添加其他处理任务，一边处理，一边发送（中断发送）
		//但务必注意，此任务被中断后继续执行必须不影响效果，例如对图像进行识别
		//而且在发送完成前，不能对 nrf_buff 进行写操作，不然会破坏掉发送缓冲区的数据
		
		//如下示范就是不会破坏缓存区的操作：（只对缓存区进行读操作）
        do
        {
            status = NRF_MSG_send_state();		//获取发送状态
        }while( status == TX_ISR_SEND);       	//如果图像发送中，则需要继续等待发送完成

		//这里可以查询是否接收到数据（由于发送完成后会自动转入接收状态，所以可能接收到数据的）
		status = NRF_MSG_receive(&com,nrf_buff);	//接收数据,并进行处理
		if(status == NRF_RESULT_RX_VALID )				//接收到有效数据
        {
            if(com == COM_EVENT_INFORM)
            {
                get_var((var_tab_e)last_var_num,&tmpdata);      //
                printf("\n接收到变量，变量代号为%d,值为：%d",last_var_num,tmpdata);
            }
        }
     
    }     
}

