📄 protocol.c.bak
字号:
#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 + -