void SendPack_Camera(int father, int child, uint8 *camerabuff, int camera_size)
{
    char buffer[DATA_PACKET];
    char buff_end[DATA_PACKET];
    char tmpbuff[10];
    int count_i = 0;
    
    //============================================
    buffer[count_i++]='0';
    
    buffer[count_i++]='#';
    
    buffer[count_i++]='|';
    buffer[count_i++]=48 + father;
    buffer[count_i++]='|';
    buffer[count_i++]=48 + child;
    buffer[count_i++]='|';
    
    //CCD发送格式    
    sprintf(tmpbuff, "(80+60)");
    strcat(buffer, tmpbuff);
    count_i += strlen(tmpbuff);
    
    buffer[count_i++]='\0';
    buffer[0]=strlen(buffer) - 1;
    
    //NRF send buffer
    if(buffer[0] < 31)
    {
        if(nrf_tx((uint8*)buffer, DATA_PACKET)==1)
        {
            while(nrf_tx_state() == NRF_TXING);         //等待发送完成
        }
    }
    else
    {
        printf("in NRF_DIY.c of \"SendPack_Short\" is overflow!!");
    }
    
    //Camera数据的发送
    SendPack_Long(camerabuff, camera_size, 31);
    
    count_i = 0;
    buff_end[count_i++]=1;
    buff_end[count_i++]='|';
    buff_end[count_i++]='$';
    buff_end[count_i++]='\0';
    buff_end[0]=strlen(buff_end) - 1;
    
    if(nrf_tx((uint8*)buff_end, DATA_PACKET)==1)
    {
      while(nrf_tx_state() == NRF_TXING);         //等待发送完成
    }
}
Beispiel #2
0
//data--要发送的数据 ;actualLen--需要发送数据的长度;sendlen,一次性发送的长度 (定值):DATA_PACKET - 1 = 31
void SendPack_Long(unsigned char *data, int actualLen, int sendlen)
{
  //test
  //int count = 0;
  //=====

  uint8 buffer[DATA_PACKET] = {0};
  
  if (data != NULL && sendlen < DATA_PACKET)
  {
    //int send_length = strlen((char*)data);

    for (int i = 0; i < actualLen; i++)
    {
      buffer[i % sendlen + 1] = data[i];

      if ((i% sendlen + 1== sendlen))
      {
        buffer[0] = sendlen;
        if(nrf_tx(buffer, DATA_PACKET)==1)
        {
          while(nrf_tx_state() == NRF_TXING);         //等待发送完成
        }
        memset(buffer, 0, sizeof(buffer) / sizeof(char));
      }
      if ((i == actualLen - 1) && actualLen%sendlen != 0)
      {
        //添加结束符?
        buffer[0] = i % sendlen + 1;
        if(nrf_tx(buffer, DATA_PACKET)==1)
        {
          while(nrf_tx_state() == NRF_TXING);         //等待发送完成
        }
        memset(buffer, 0, sizeof(buffer) / sizeof(char));
      }

      //Do your job here
      //Dosomething();
    }
  }
  else
  {
    //reporte an error
  }
}
Beispiel #3
0
//value全部放大1000倍后回发电脑;(float报错也是醉了————万恶的IAR)
void SendPack_Short(int father, int child, float value, int hasHead, int hasEnd)
{
    char buffer[DATA_PACKET];
    char value_string[20];
    int count_i = 0;
    
    sprintf(value_string, "%4d|", (int)(1000*value));
    buffer[count_i++]='0';
    
    if(hasHead) //设置是否需要加数据头
      buffer[count_i++]='#';
    
    buffer[count_i++]='|';
    if(father > 10)
    {
        buffer[count_i++]=48 + father/10;
        buffer[count_i++]=48 + father%10;
    }
    else
    {
        buffer[count_i++]=48 + father;
    }
    buffer[count_i++]='|';
    
    //child 为两位,分情况进行添加
    if(child > 10)
    {
        buffer[count_i++]=48 + child/10;
        buffer[count_i++]=48 + child%10;
    }
    else
    {
        buffer[count_i++]=48 + child;
    }
    buffer[count_i++]='|';
    buffer[count_i++]='\0';
    strcat(buffer, value_string);
    if(hasEnd)  //添加结束符
      strcat(buffer, "$");
    buffer[0]=strlen(buffer)-1;
    
    //printf("%d---%s", (int)buffer[0], buffer);
    if(buffer[0] < 31)
    {
        if(nrf_tx((uint8*)buffer, DATA_PACKET)==1)
        {
            while(nrf_tx_state() == NRF_TXING);         //等待发送完成
        }
    }
    else
    {
        printf("in NRF_DIY.c of \"SendPack_Short\" is overflow!!");
    }
}
Beispiel #4
0
//发送命令。前两个字节用在命令识别,后面就是需要传输的内容
nrf_result_e nrf_msg_tx(com_e  com, uint8 *sendbuf)
{
    ASSERT(com < COM_MAX);          //命令不能超过最大的数目

    //把命令写进数据缓冲区
    sendbuf[0] =  com;
    sendbuf[1] = ~com;
    sendbuf[nrf_com_size[com] + 2 * COM_LEN - 2] = ~com;
    sendbuf[nrf_com_size[com] + 2 * COM_LEN - 1] = com;

    while( !nrf_tx(sendbuf , nrf_com_size[com] + 2 * COM_LEN)); //发送数据

    return NRF_RESULT_NULL;
}
Beispiel #5
0
//value全部放大1000倍后回发电脑;(float报错也是醉了————万恶的IAR)
void SendPack_Echo(int father, int child, char *sendACK)
{
    char buffer[DATA_PACKET];
    int count_i = 0;
    
    buffer[count_i++]='0';
    
    buffer[count_i++]='#';
    
    buffer[count_i++]='|';
    if(father > 10)
    {
        buffer[count_i++]=48 + father/10;
        buffer[count_i++]=48 + father%10;
    }
    else
    {
        buffer[count_i++]=48 + father;
    }
    buffer[count_i++]='|';
    
    //child 为两位,分情况进行添加
    if(child > 10)
    {
        buffer[count_i++]=48 + child/10;
        buffer[count_i++]=48 + child%10;
    }
    else
    {
        buffer[count_i++]=48 + child;
    }
    buffer[count_i++]='|';
    buffer[count_i++]='\0';
    strcat(buffer, sendACK);
      strcat(buffer, "|$");
    buffer[0]=strlen(buffer)-1;
    
    //printf("%d---%s", (int)buffer[0], buffer);
    if(buffer[0] < 31)
    {
        if(nrf_tx((uint8*)buffer, DATA_PACKET)==1)
        {
            while(nrf_tx_state() == NRF_TXING);         //等待发送完成
        }
    }
    else
    {
        printf("in NRF_DIY.c of \"SendPack_Short\" is overflow!!");
    }
}
Beispiel #6
0
int main (void)
{
	unsigned char AP;	
	unsigned char i = 0,bit;
	flag = RX;
	AP = 0;
//若为第一个节点则AP = 0,第二个节点AP = 1
	if (AP == 1)
	{
		for (i = 0; i< TX_ADR_WIDTH; i++)
		{
			TX_ADDRESS[i] = TX_AP0[i];
		}
	}
	init_uart (BAUD_SETTING);
	stdout = &mystdout;
	SPI_Init ();
	for (i = 0; i < 32; i++)
	{
		tx_buf[i] = 0xff;
	}
	while (1)
	{
		if (flag==RX)
		{
			bit = nrf_rx (TX_ADDRESS);
			if (bit)
			{
				printf ("the data are: \n");
				for (i = 0; i < 32; i++)
				{
					printf ("%4d", rx_buf[i]);
					rx_buf[i] = '\0';
					if ((i+1) % 10 == 0)
					printf ("\n");
				}
				printf ("\n");
			}
			else 
				printf ("the data error\n");
		}
		else
		{
			nrf_tx (TX_ADDRESS);
		}
		_delay_ms (1000);
	}
}
NrfErrorType_e NrfSendStr(uint8 * str,uint32 len)
{
	if (nrf_tx(str, DATA_PACKET) == 1)         //发送一个数据包:buff(包为32字节)
	{
		//等待发送过程中,此处可以加入处理任务

		while (nrf_tx_state() == NRF_TXING);         //等待发送完成

		if (NRF_TX_OK == nrf_tx_state())
		{
			return Nrf_AllGreen;
		}
		else
		{
			return Nrf_SendFail;
		}
	}
	else
	{
		return Nrf_SendFail;
	}
}
Beispiel #8
0
void SendPack_CCD(int father, int child, uint8 *ccdbuff, int ccdwidth, int hasHead, int hasEnd)//一次发送只能小于32为的数组
{
    char buffer[DATA_PACKET];
    char buff_end[DATA_PACKET];
    int count_i = 0;
    
    //============================================
    buffer[count_i++]='0';
    
    if(hasHead) //设置是否需要加数据头
      buffer[count_i++]='#';
    
    buffer[count_i++]='|';
    //数字大于10时候的单独处理
    if(father > 10)
    {
        buffer[count_i++]=48 + father/10;
        buffer[count_i++]=48 + father%10;
    }
    else
    {
        buffer[count_i++]=48 + father;
    }
    buffer[count_i++]='|';
    
    //child 为两位,分情况进行添加
    if(child > 10)
    {
        buffer[count_i++]=48 + child/10;
        buffer[count_i++]=48 + child%10;
    }
    else
    {
        buffer[count_i++]=48 + child;
    }
    buffer[count_i++]='|';
    
    //CCD发送格式
    buffer[count_i++]='(';
    //child 为两位,分情况进行添加
    if(ccdwidth > 100)
    {
        buffer[count_i++]=48 + ccdwidth/100;
        buffer[count_i++]=48 + ccdwidth/10%10;
        buffer[count_i++]=48 + ccdwidth%10;
    }
    else if(ccdwidth >10)
    {
        buffer[count_i++]=48 + ccdwidth/10;
        buffer[count_i++]=48 + ccdwidth%10;
    }
    else{}
    buffer[count_i++]=')';
    buffer[count_i++]='\0';
    buffer[0]=strlen(buffer) - 1;
    
    //NRF send buffer
    if(buffer[0] < 31)
    {
        if(nrf_tx((uint8*)buffer, DATA_PACKET)==1)
        {
            while(nrf_tx_state() == NRF_TXING);         //等待发送完成
        }
    }
    else
    {
        printf("in NRF_DIY.c of \"SendPack_Short\" is overflow!!");
    }
    
    //CCD数据的发送
    SendPack_Long(ccdbuff, ccdwidth, 31);
    
    count_i = 0;
    buff_end[count_i++]=1;
    buff_end[count_i++]='|';
    buff_end[count_i++]='\0';
    buff_end[0]=strlen(buff_end) - 1;
    
    //NRF send buffer
    if(buff_end[0] < 31)
    {
        if(nrf_tx((uint8*)buff_end, DATA_PACKET)==1)
        {
            while(nrf_tx_state() == NRF_TXING);         //等待发送完成
        }
    }
    
    count_i = 0;
    buff_end[count_i++]=1;
    buff_end[count_i++]='$';
    buff_end[count_i++]='\0';
    
    if(hasEnd)  //添加结束符
    {
        if(nrf_tx((uint8*)buff_end, DATA_PACKET)==1)
          {
              while(nrf_tx_state() == NRF_TXING);         //等待发送完成
          }
    }
    
    //printf("%d---%s", (int)buffer[0], buffer);
}
Beispiel #9
0
void SendPack_PID(int father, int child, float P, float I, float D, int hasHead, int hasEnd)//一次发送只能小于32为的数组
{
    char buffer[DATA_PACKET];
    char value_string[20];
    int count_i = 0;
    
    //============================================
    buffer[count_i++]='0';
    
    if(hasHead) //设置是否需要加数据头
      buffer[count_i++]='#';
    
    buffer[count_i++]='|';
    //数字大于10时候的单独处理
    if(father > 10)
    {
        buffer[count_i++]=48 + father/10;
        buffer[count_i++]=48 + father%10;
    }
    else
    {
        buffer[count_i++]=48 + father;
    }
    buffer[count_i++]='|';
    
    //child 为两位,分情况进行添加
    if(child > 10)
    {
        buffer[count_i++]=48 + child/10;
        buffer[count_i++]=48 + child%10;
    }
    else
    {
        buffer[count_i++]=48 + child;
    }
    buffer[count_i++]='|';
    buffer[count_i++]='\0';
    //添加P
    sprintf(value_string, "P%4d", (int)(1000*P));
    strcat(buffer, value_string);
    //添加I
    sprintf(value_string, "I%4d", (int)(1000*I));
    strcat(buffer, value_string);
    //添加D
    sprintf(value_string, "D%4d|", (int)(1000*D));
    strcat(buffer, value_string);
    
    if(hasEnd)  //添加结束符
      strcat(buffer, "$");
    
    buffer[0]=strlen(buffer)-1;
    
    //printf("%d---%s", (int)buffer[0], buffer);
    if(buffer[0] < 31)
    {
        if(nrf_tx((uint8*)buffer, DATA_PACKET)==1)
        {
            while(nrf_tx_state() == NRF_TXING);         //等待发送完成
        }
    }
    else
    {
        printf("in NRF_DIY.c of \"SendPack_Short\" is overflow!!");
    }
}
Beispiel #10
0
int main(void)
{
	// USB BEGIN //
	SetupHardware();
	/* Create a regular character stream for the interface so that it can be used with the stdio.h functions */
	CDC_Device_CreateStream(&VirtualSerial_CDC_Interface, &USBSerialStream);
	
	TCCR0B = (1<<CS02)|(1<<CS00); // Set up timer to handle USB stuff.
	TIMSK0 = (1<<TOIE0);
	
	sei();
	// USB END //
	
	
	while(rxByte != 0x20)
	{
		fputs(".", &USBSerialStream);
		delay_ms(100);
	}
	rxByte = 0;
	nrf_init();

	delay_ms(500);
	
	nrf_spillRegisters();
	
	uint16_t number = 0;
	
	fputs("Last transmission: ",&USBSerialStream);
	itoa(number, buffer, 10);
	fputs(buffer,&USBSerialStream);
			
	
	for (;;)
	{	
		/*while(!rxByte)
		{
			fputs(".", &USBSerialStream);
			delay_ms(100);
		}*/
		number++;
		nrf_tx((uint16_t)number);
		
		fputs("\rLast transmission: ",&USBSerialStream);
		itoa(number, buffer, 10);
		fputs(buffer,&USBSerialStream);
		
		//rxByte = 0;
		
		GET_STATUS;
		if(nrf_last_status & (1<<MAX_RT))
		{
			fputs("\r\nPacket transmission failed. Clearing MAX_RT...\r\n",&USBSerialStream);
			delay_us(1);
			SS_DOWN;
			SPI_WRITE(W_REGISTER | NRG_STATUS);
			SPI_WRITE(1<<MAX_RT);
			SS_UP;
		}
		else
		{
			
		}
		
		delay_ms(500);
		
		//nrf_spillRegisters();
	}
}