⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 protocol.c.bak

📁 使用avr--cc2420模块程序,需要原理图的联系 QQ:120304948
💻 BAK
📖 第 1 页 / 共 2 页
字号:
#include <mega128.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>


#include "typedef.h"

#include "app.h"
#include "attention.h"
#include "Flash.h"
#include "g20modem.h"
#include "g20serialdrv.h"
#include "ombro.h"

#include "rtc.h"
#include "serialdrv.h"
#include "timer.h"
#include "UDP.h"
#include "protocol.h"

#include "key.h"
#include "lcdzk.h"
#include "print.h"
#include "ombrodb.h"

/* protocol pointer last and current */

unsigned int Protocol_pointer_last;
unsigned int Protocol_pointer_current;

#pragma warn-
eeprom OMBROSETTING my_ombset;
eeprom unsigned int MY_ID;
//eeprom unsigned long flash_addr;

eeprom float  g_lx0;
eeprom float  g_lx1;
eeprom float  g_l11;
eeprom float  g_l12;
eeprom float  g_l13;

eeprom float  g_l22;
eeprom float  g_l23;
eeprom float  g_l32;
eeprom float  g_l33;
#pragma warn+

unsigned char my_id_arr[2];

BYTE PROTOCOL_TEMP[64];
BYTE PROTOCOL_POINTER;
BYTE nPacketLength;
unsigned int nSync;

/*BYTE protocol_temp[256];
BYTE protocol_pointer;

bit GotProtocol;

bit bGetCC;
bit bGetBB;*/

bit bMobilePhone = FALSE;
bit bAlarmValue = FALSE;
bit bAlarmData = FALSE;


void SerialPortWrite(BYTE *pBuf, int nLength)
{
	while(nLength -- > 0)
	{
        wdr();
		sp_rcv_proc(*pBuf++);
		timer_set_sp();
	}
}

void initial_protocol(void)
{  
    protocol_pointer = 0;
    
//    MY_ID = 0x411;    //北京局三家店段官厅西工区
//    MY_ID = 0x711;    //北京局三家店段狼山工区
//    MY_ID = 0x611;    //北京局三家店段南口工区
//    MY_ID = 0x511;    //北京局三家店段沙河工区
    MY_ID = 0x911;    //北京局三家店段下花园工区
//    MY_ID = 0x211;    //北京局三家店段雁翅工区
//    MY_ID = 0x311;     //北京局三家店段珠窝工区
}

void ProtocolProc()
{
	unsigned int nLoop;
	unsigned int nTempLoop;
	BYTE CheckSum;
	nLoop = 0;
	
	while(udp_sp_not_empty())
	{
		PROTOCOL_TEMP[PROTOCOL_POINTER] = udp_sp_getchar();
		
		if(PROTOCOL_POINTER >= nSync + 2)
		{
			nPacketLength = ((unsigned int )PROTOCOL_TEMP[nSync + 2]) + 4;
			if((PROTOCOL_POINTER - nSync) == nPacketLength -1)
			{
				CheckSum = 0x00;
		
				for(nTempLoop = 1; nTempLoop < nPacketLength; nTempLoop ++)
				{
					CheckSum += (unsigned char)PROTOCOL_TEMP[nTempLoop + nSync];
				}
		
				if(CheckSum == 0xFF)
				{					
					switch((unsigned char) PROTOCOL_TEMP[nSync + 3])
					{
					case 0x22:
						SetThreshold();
						break;
					case 0x24:
						ReadThreshold();
						break;
					case 0x26:
						SetMobile();
						break;
					case 0x28:
						SetClock();
						break;
					case 0x2A:
						ReadHistoryData();
						break;
					case 0x2C:
						//waiting for reply
						ConfirmMobilePhone();
						break;
					case 0x2E:
						//waiting for reply
						ConfirmAlarmValue();
						break;
					case 0x42:
						//waiting for reply
						ConfirmAlarmData();
						break;
					}
					
					PROTOCOL_POINTER = 0;
					nSync = 0;
					continue;
				}
			}
		}
		
		if(PROTOCOL_POINTER > 40)
		{
			PROTOCOL_POINTER = 0;
			nSync = 0;
		}		
		
		if(PROTOCOL_TEMP[PROTOCOL_POINTER] == (BYTE)0x16)
		{
			if((PROTOCOL_POINTER - nSync) >= nPacketLength)
				nSync = nLoop + PROTOCOL_POINTER;
		}
		
		PROTOCOL_POINTER ++;		
	}
}

unsigned char validateID()
{
	unsigned int nID;
	unsigned char *pTemp;
	unsigned int ntemp;

	pTemp = (unsigned char*)&ntemp;

	*(pTemp + 0) = PROTOCOL_TEMP[nSync + 4];
	*(pTemp + 1) = PROTOCOL_TEMP[nSync + 5];
	nID = MY_ID;

	if(nID == ntemp)
	{
		my_id_arr[0] = *(pTemp + 0);
		my_id_arr[1] = *(pTemp + 1);
		return 1;
	}
	else
	{
		return 0;
	}	
}


void SetThreshold()
{
	char szreply[30];
	unsigned int nloop = 0;
	unsigned char szSum = 0;
	
	char *pTemp = NULL;
	unsigned int nTemp = 0;
	
	if(!validateID())
		return;

	memset(szreply, 0x00, 30);

	nTemp = 0;
	pTemp = (char*)&nTemp;

	*(pTemp + 0) = PROTOCOL_TEMP[nSync + 6];
	*(pTemp + 1) = PROTOCOL_TEMP[nSync + 7];

	g_lx0 = (float)nTemp /(float)10;

	nTemp = 0;
	pTemp = (char*)&nTemp;

	*(pTemp + 0) = PROTOCOL_TEMP[nSync + 8];
	*(pTemp + 1) = PROTOCOL_TEMP[nSync + 9];

	g_lx1 = (float)nTemp / (float) 10;

	nTemp = 0;
	pTemp = (char*)&nTemp;

	*(pTemp + 0) = PROTOCOL_TEMP[nSync + 10];
	*(pTemp + 1) = PROTOCOL_TEMP[nSync + 11];

	g_l11 = (float)nTemp /(float)10;

	nTemp = 0;
	pTemp = (char*)&nTemp;

	*(pTemp + 0) = PROTOCOL_TEMP[nSync + 12];
	*(pTemp + 1) = PROTOCOL_TEMP[nSync + 13];

	g_l12 = (float)nTemp / (float)10;

	nTemp = 0;
	pTemp = (char*)&nTemp;

	*(pTemp + 0) = PROTOCOL_TEMP[nSync + 14];
	*(pTemp + 1) = PROTOCOL_TEMP[nSync + 15];

	g_l13 = (float)nTemp/(float)10;

	nTemp = 0;
	pTemp = (char*)&nTemp;

	*(pTemp + 0) = PROTOCOL_TEMP[nSync + 16];
	*(pTemp + 1) = PROTOCOL_TEMP[nSync + 17];

	g_l22 = (float)nTemp/(float)10;

	nTemp = 0;
	pTemp = (char*)&nTemp;

	*(pTemp + 0) = PROTOCOL_TEMP[nSync + 18];
	*(pTemp + 1) = PROTOCOL_TEMP[nSync + 19];

	g_l23 = (float)nTemp / (float) 10;

	nTemp = 0;
	pTemp = (char*)&nTemp;

	*(pTemp + 0) = PROTOCOL_TEMP[nSync + 20];
	*(pTemp + 1) = PROTOCOL_TEMP[nSync + 21];

	g_l32 = (float)nTemp / (float) 10;

	nTemp = 0;
	pTemp = (char*)&nTemp;

	*(pTemp + 0) = PROTOCOL_TEMP[nSync + 22];
	*(pTemp + 1) = PROTOCOL_TEMP[nSync + 23];

	g_l33 = (float)nTemp / (float) 10;

	//send reply
	szreply[0] = 0x16;
	szreply[1] = 0x00;
	szreply[2] = 0x03;
	szreply[3] = 0xA2;
	szreply[4] = my_id_arr[0];
	szreply[5] = my_id_arr[1];

	szSum = 0x00;
	for(nloop = 1; nloop < 6; nloop ++)
	{
		szSum += szreply[nloop];
	}
	szreply[6] = 0xFF - szSum;

	SerialPortWrite(szreply, 7);
}

void ReadThreshold()
{
	char szreply[40];
	char szsum = 0x00;
	unsigned int nloop;
	char *pTemp;
	unsigned int ntemp;

	if(!validateID())
		return;

	memset(szreply, 0x00, 40);

	szreply[0] = 0x16;
	szreply[1] = 0x00;
	szreply[2] = 0x15;
	szreply[3] = 0xA4;
	szreply[4] = my_id_arr[0];
	szreply[5] = my_id_arr[1];
	
	ntemp = (unsigned int)(g_lx0 * 10.0);
	pTemp = (char*)&ntemp;
	szreply[6] = *(pTemp + 0);
	szreply[7] = *(pTemp + 1);

	ntemp = (unsigned int)(g_lx1 * 10.0);
	pTemp = (char*)&ntemp;
	szreply[8] = *(pTemp + 0);
	szreply[9] = *(pTemp + 1);

	ntemp = (unsigned int)(g_l11 * 10.0);
	pTemp = (char*)&ntemp;
	szreply[10] = *(pTemp + 0);
	szreply[11] = *(pTemp + 1);

	ntemp = (unsigned int)(g_l12 * 10.0);
	pTemp = (char*)&ntemp;
	szreply[12] = *(pTemp + 0);
	szreply[13] = *(pTemp + 1);

	ntemp = (unsigned int)(g_l13 * 10.0);
	pTemp = (char*)&ntemp;
	szreply[14] = *(pTemp + 0);
	szreply[15] = *(pTemp + 1);

	ntemp = (unsigned int)(g_l22 * 10.0);
	pTemp = (char*)&ntemp;
	szreply[16] = *(pTemp + 0);
	szreply[17] = *(pTemp + 1);

	ntemp = (unsigned int)(g_l23 * 10.0);
	pTemp = (char*)&ntemp;
	szreply[18] = *(pTemp + 0);
	szreply[19] = *(pTemp + 1);

	ntemp = (unsigned int)(g_l32 * 10.0);
	pTemp = (char*)&ntemp;
	szreply[20] = *(pTemp + 0);
	szreply[21] = *(pTemp + 1);

	ntemp = (unsigned int)(g_l33 * 10.0);
	pTemp = (char*)&ntemp;
	szreply[22] = *(pTemp + 0);
	szreply[23] = *(pTemp + 1);

	szsum = 0x00;
	for(nloop = 1; nloop < 24; nloop++)
	{
		szsum += szreply[nloop];
	}
	szreply[24] = 0xFF - szsum;
	
	SerialPortWrite(szreply, 25);
}

void SetMobile()
{
	char szreply[20];
	unsigned int nloop = 0;
	unsigned char szSum = 0;
	if(!validateID())
		return;
		
	MobilePhone[0] = PROTOCOL_TEMP[nSync + 6];
	MobilePhone[1] = PROTOCOL_TEMP[nSync + 7];
	MobilePhone[2] = PROTOCOL_TEMP[nSync + 8];
	MobilePhone[3] = PROTOCOL_TEMP[nSync + 9];
	MobilePhone[4] = PROTOCOL_TEMP[nSync + 10];
	MobilePhone[5] = PROTOCOL_TEMP[nSync + 11];
	MobilePhone[6] = PROTOCOL_TEMP[nSync + 12];
	MobilePhone[7] = PROTOCOL_TEMP[nSync + 13];
	MobilePhone[8] = PROTOCOL_TEMP[nSync + 14];
	MobilePhone[9] = PROTOCOL_TEMP[nSync + 15];
	MobilePhone[10] = PROTOCOL_TEMP[nSync + 16];
	MobilePhone[11] = 0x00;

	//send reply
	szreply[0] = 0x16;
	szreply[1] = 0x00;
	szreply[2] = 0x03;
	szreply[3] = 0xA6;
	szreply[4] = my_id_arr[0];
	szreply[5] = my_id_arr[1];

	szSum = 0x00;
	for(nloop = 1; nloop < 6; nloop ++)
	{
		szSum += szreply[nloop];
	}
	szreply[6] = 0xFF - szSum;

	SerialPortWrite(szreply, 7);
}

void SetClock()
{
	unsigned char nyear, nmonth, nday, nhour, nmin, nsec;
	char szreply[20];
	unsigned int nloop = 0;
	unsigned char szSum = 0;	
	char szBuffer[8];
	if(!validateID())
		return;
	
	nyear = PROTOCOL_TEMP[nSync + 6];
	nmonth = PROTOCOL_TEMP[nSync + 7];
	nday = PROTOCOL_TEMP[nSync + 8];
	
	nhour = PROTOCOL_TEMP[nSync + 9];
	nmin = PROTOCOL_TEMP[nSync + 10];
	nsec = PROTOCOL_TEMP[nSync + 11];

	szBuffer[0] = hex2bcd(nsec);
	szBuffer[1] = hex2bcd(nmin);
	szBuffer[2] = hex2bcd(nhour);	
	szBuffer[3] = hex2bcd(nday);	
	szBuffer[4] = hex2bcd(nmonth);	
	szBuffer[5] = 0x00;	
	szBuffer[6] = hex2bcd(nyear);
	szBuffer[7] = 0x00;
	
	rtc_set_flag = TRUE;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -