解析天气的函数内容如下
void parse_2days_weather(void)
//parse and display
{
unsigned int i = 0, k = 0;
unsigned char dis_buf[20] = {0};
S_RTC_TIME_DATA_T time;
unsigned int len, offset;
unsigned char whichday_flag = 0;
unsigned char utf[64] = {0};
unsigned char gbk[64] = {0};
unsigned char sdata[4] = {0};
unsigned char temp = 0;
CleanLCD();
CleanLCD_2();
for(i=0;i<uart1_recv_offset;i++)
{
if(uart1_recv_buf[i] == 'n' &&
uart1_recv_buf[i+1] == 'a' &&
uart1_recv_buf[i+2] == 'm' &&
uart1_recv_buf[i+3] == 'e')
{
len = 0;
offset = 0;
memset(utf, 0x00, sizeof(utf));
memset(gbk, 0x00, sizeof(gbk));
while(uart1_recv_buf[i+7+offset] != '"')
{
utf[offset] = uart1_recv_buf[i+7+offset];
offset++;
if(offset >= sizeof(utf))
{
break;
}
}
SwitchToGbk(utf, offset, gbk, NULL);
memset(city_gbk, 0x00, sizeof(city_gbk));
memcpy(city_gbk, gbk, sizeof(gbk));
DisplayCity(gbk);
}
//english letter's UTF8 is the same as ASCII
//由于有
//"last_update"
//的关键字,所以这里用
//"date"
//来过滤
if(uart1_recv_buf[i] == '"' &&
uart1_recv_buf[i+1] == 'd' &&
uart1_recv_buf[i+2] == 'a' &&
uart1_recv_buf[i+3] == 't' &&
uart1_recv_buf[i+4] == 'e' &&
uart1_recv_buf[i+5] == '"')
{
time.u32Year = (uart1_recv_buf[i+8]-0x30)*1000 +
(uart1_recv_buf[i+9]-0x30)*100 +
(uart1_recv_buf[i+10]-0x30)*10 +
(uart1_recv_buf[i+11]-0x30)*1;
time.u32Month = (uart1_recv_buf[i+13]-0x30)*10 +
(uart1_recv_buf[i+14]-0x30)*1;
time.u32Day = (uart1_recv_buf[i+16]-0x30)*10 +
(uart1_recv_buf[i+17]-0x30)*1;
trace("time.year = %d, month = %d, day = %d \r\n",
time.u32Year, time.u32Month, time.u32Day);
DisplayDate(time);
if((i >= 150) && (i <= 250))
{
whichday_flag = Today;
//today
}
else
{
whichday_flag = Tomorrow;
//tomorrow
}
}
if(uart1_recv_buf[i] == 't' &&
uart1_recv_buf[i+1] == 'e' &&
uart1_recv_buf[i+2] == 'x' &&
uart1_recv_buf[i+3] == 't' &&
uart1_recv_buf[i+4] == '_' &&
uart1_recv_buf[i+5] == 'd' &&
uart1_recv_buf[i+6] == 'a' &&
uart1_recv_buf[i+7] == 'y')
{
len = 0;
offset = 0;
memset(utf, 0x00, sizeof(utf));
memset(gbk, 0x00, sizeof(gbk));
while(uart1_recv_buf[i+11+offset] != '"')
{
utf[offset] = uart1_recv_buf[i+11+offset];
offset++;
if(offset >= sizeof(utf))
{
break;
}
}
SwitchToGbk(utf, offset, gbk, NULL);
DisplayDayWeather(gbk);
if(gbk[0] == Qing_0 && gbk[1] == Qing_1)
{
sdata[0] = Qing;
display1616_2(6, 0, icon_sunny);
}
else if(gbk[0] == Yin_0 && gbk[1] == Yin_1)
{
sdata[0] = Yin;
display1616_2(6, 0, icon_cloudy);
}
else if(gbk[0] == Duo_0 && gbk[1] == Duo_1)
{
sdata[0] = DuoYun;
display1616_2(6, 0, icon_cloudy);
}
else if(gbk[0] == Xiao_0 && gbk[1] == Xiao_1 &&
gbk[2] == Yu_0 && gbk[3] == Yu_1)
{
sdata[0] = XiaoYu;
display1616_2(6, 0, icon_rainy);
}
else if(gbk[0] == Zhong_0 && gbk[1] == Zhong_1 &&
gbk[2] == Yu_0 && gbk[3] == Yu_1)
{
sdata[0] = ZhongYu;
display1616_2(6, 0, icon_rainy);
}
else if(gbk[0] == Da_0 && gbk[1] == Da_1 &&
gbk[2] == Yu_0 && gbk[3] == Yu_1)
{
sdata[0] = DaYu;
display1616_2(6, 0, icon_heavyrainy);
}
else if(gbk[0] == Bao_0 && gbk[1] == Bao_1 &&
gbk[2] == Yu_0 && gbk[3] == Yu_1)
{
sdata[0] = BaoYu;
display1616_2(6, 0, icon_heavyrainy);
}
else if(gbk[0] == Da_0 && gbk[1] == Da_1 &&
gbk[2] == Bao_0 && gbk[3] == Bao_1 &&
gbk[4] == Yu_0 && gbk[5] == Yu_1)
{
sdata[0] = DaBaoYu;
display1616_2(6, 0, icon_heavyrainy);
}
else if(gbk[0] == Te_0 && gbk[1] == Te_1 &&
gbk[2] == Da_0 && gbk[3] == Da_1 &&
gbk[4] == Bao_0 && gbk[5] == Bao_1 &&
gbk[6] == Yu_0 && gbk[7] == Yu_1)
{
sdata[0] = TeDaBaoYu;
display1616_2(6, 0, icon_heavyrainy);
}
else if(gbk[0] == Zhen_0 && gbk[1] == Zhen_1 &&
gbk[2] == Yu_0 && gbk[3] == Yu_1)
{
sdata[0] = ZhenYu;
display1616_2(6, 0, icon_rainy);
}
else if(gbk[0] == Lei_0 && gbk[1] == Lei_1 &&
gbk[2] == Zhen_0 && gbk[3] == Zhen_1 &&
gbk[4] == Yu_0 && gbk[5] == Yu_1)
{
sdata[0] = LeiZhenYu;
display1616_2(6, 0, icon_leizhen_rainy);
}
else if(gbk[0] == Bing_0 && gbk[1] == Bing_1 &&
gbk[2] == Bao_0 && gbk[3] == Bao_1)
{
sdata[0] = BingBao;
display1616_2(6, 0, icon_rainy);
}
else if(gbk[0] == Mai_0 && gbk[1] == Mai_1)
{
sdata[0] = Mai;
display1616_2(6, 0, icon_cloudy);
}
else
{
sdata[0] = 0x00;
}
}
if(uart1_recv_buf[i] == 't' &&
uart1_recv_buf[i+1] == 'e' &&
uart1_recv_buf[i+2] == 'x' &&
uart1_recv_buf[i+3] == 't' &&
uart1_recv_buf[i+4] == '_' &&
uart1_recv_buf[i+5] == 'n' &&
uart1_recv_buf[i+6] == 'i' &&
uart1_recv_buf[i+7] == 'g' &&
uart1_recv_buf[i+8] == 'h' &&
uart1_recv_buf[i+9] == 't')
{
len = 0;
offset = 0;
memset(utf, 0x00, sizeof(utf));
memset(gbk, 0x00, sizeof(gbk));
while(uart1_recv_buf[i+13+offset] != '"')
{
utf[offset] = uart1_recv_buf[i+13+offset];
offset++;
if(offset >= sizeof(utf))
{
break;
}
}
SwitchToGbk(utf, offset, gbk, NULL);
DisplayNightWeather(gbk);
if(gbk[0] == Qing_0 && gbk[1] == Qing_1)
{
sdata[1] = Qing;
display1616_2(6, 4*16, icon_sunny);
}
else if(gbk[0] == Yin_0 && gbk[1] == Yin_1)
{
sdata[1] = Yin;
display1616_2(6, 4*16, icon_cloudy);
}
else if(gbk[0] == Duo_0 && gbk[1] == Duo_1)
{
sdata[1] = DuoYun;
display1616_2(6, 4*16, icon_cloudy);
}
else if(gbk[0] == Xiao_0 && gbk[1] == Xiao_1 &&
gbk[2] == Yu_0 && gbk[3] == Yu_1)
{
sdata[1] = XiaoYu;
display1616_2(6, 4*16, icon_rainy);
}
else if(gbk[0] == Zhong_0 && gbk[1] == Zhong_1 &&
gbk[2] == Yu_0 && gbk[3] == Yu_1)
{
sdata[1] = ZhongYu;
display1616_2(6, 4*16, icon_rainy);
}
else if(gbk[0] == Da_0 && gbk[1] == Da_1 &&
gbk[2] == Yu_0 && gbk[3] == Yu_1)
{
sdata[1] = DaYu;
display1616_2(6, 4*16, icon_heavyrainy);
}
else if(gbk[0] == Bao_0 && gbk[1] == Bao_1 &&
gbk[2] == Yu_0 && gbk[3] == Yu_1)
{
sdata[1] = BaoYu;
display1616_2(6, 4*16, icon_heavyrainy);
}
else if(gbk[0] == Da_0 && gbk[1] == Da_1 &&
gbk[2] == Bao_0 && gbk[3] == Bao_1 &&
gbk[4] == Yu_0 && gbk[5] == Yu_1)
{
sdata[1] = DaBaoYu;
display1616_2(6, 4*16, icon_heavyrainy);
}
else if(gbk[0] == Te_0 && gbk[1] == Te_1 &&
gbk[2] == Da_0 && gbk[3] == Da_1 &&
gbk[4] == Bao_0 && gbk[5] == Bao_1 &&
gbk[6] == Yu_0 && gbk[7] == Yu_1)
{
sdata[1] = TeDaBaoYu;
display1616_2(6, 4*16, icon_heavyrainy);
}
else if(gbk[0] == Zhen_0 && gbk[1] == Zhen_1 &&
gbk[2] == Yu_0 && gbk[3] == Yu_1)
{
sdata[1] = ZhenYu;
display1616_2(6, 0, icon_rainy);
}
else if(gbk[0] == Lei_0 && gbk[1] == Lei_1 &&
gbk[2] == Zhen_0 && gbk[3] == Zhen_1 &&
gbk[4] == Yu_0 && gbk[5] == Yu_1)
{
sdata[1] = LeiZhenYu;
display1616_2(6, 0, icon_leizhen_rainy);
}
else if(gbk[0] == Bing_0 && gbk[1] == Bing_1 &&
gbk[2] == Bao_0 && gbk[3] == Bao_1)
{
sdata[1] = BingBao;
display1616_2(6, 0, icon_rainy);
}
else if(gbk[0] == Mai_0 && gbk[1] == Mai_1)
{
sdata[1] = Mai;
display1616_2(6, 0, icon_cloudy);
}
else
{
sdata[0] = 0x00;
}
}
if(uart1_recv_buf[i] == 'h' &&
uart1_recv_buf[i+1] == 'i' &&
uart1_recv_buf[i+2] == 'g' &&
uart1_recv_buf[i+3] == 'h')
{
memset(dis_buf, 0x00, sizeof(dis_buf));
//start
if(uart1_recv_buf[i+6] == '"')
{
//temperature first bit
dis_buf[0] = uart1_recv_buf[i+7];
if(uart1_recv_buf[i+8] == '"')
{
//end
}
else
{
//temperature second bit
dis_buf[1] = uart1_recv_buf[i+8];
}
}
DisplayHighTemp(dis_buf);
if(dis_buf[0] != 0x00)
{
temp = dis_buf[0] - 0x30;
if(dis_buf[1] != 0x00)
{
temp = (temp * 10) + (dis_buf[1] - 0x30);
}
}
sdata[2] = temp;
}
if(uart1_recv_buf[i] == 'l' &&
uart1_recv_buf[i+1] == 'o' &&
uart1_recv_buf[i+2] == 'w')
{
memset(dis_buf, 0x00, sizeof(dis_buf));
//start
if(uart1_recv_buf[i+5] == '"')
{
//temperature first bit
dis_buf[0] = uart1_recv_buf[i+6];
if(uart1_recv_buf[i+7] == '"')
{
//end
}
else
{
//temperature second bit
dis_buf[1] = uart1_recv_buf[i+7];
}
}
DisplayLowTemp(dis_buf);
if(dis_buf[0] != 0x00)
{
temp = dis_buf[0] - 0x30;
if(dis_buf[1] != 0x00)
{
temp = (temp * 10) + (dis_buf[1] - 0x30);
}
}
sdata[3] = temp;
}
//由于含有
//"wind_direction_degree"的关键字,所以将其过滤掉
if(uart1_recv_buf[i] == '"' &&
uart1_recv_buf[i+1] == 'w' &&
uart1_recv_buf[i+2] == 'i' &&
uart1_recv_buf[i+3] == 'n' &&
uart1_recv_buf[i+4] == 'd' &&
uart1_recv_buf[i+5] == '_' &&
uart1_recv_buf[i+6] == 'd' &&
uart1_recv_buf[i+7] == 'i' &&
uart1_recv_buf[i+8] == 'r' &&
uart1_recv_buf[i+9] == 'e' &&
uart1_recv_buf[i+10] == 'c' &&
uart1_recv_buf[i+11] == 't' &&
uart1_recv_buf[i+12] == 'i' &&
uart1_recv_buf[i+13] == 'o' &&
uart1_recv_buf[i+14] == 'n' &&
uart1_recv_buf[i+15] == '"')
{
len = 0;
offset = 0;
memset(utf, 0x00, sizeof(utf));
memset(gbk, 0x00, sizeof(gbk));
while(uart1_recv_buf[i+18+offset] != '"')
{
utf[offset] = uart1_recv_buf[i+18+offset];
offset++;
if(offset >= sizeof(utf))
{
break;
}
}
SwitchToGbk(utf, offset, gbk, NULL);
DisplayWindDirection(gbk);
}
if(uart1_recv_buf[i] == 'w' &&
uart1_recv_buf[i+1] == 'i' &&
uart1_recv_buf[i+2] == 'n' &&
uart1_recv_buf[i+3] == 'd' &&
uart1_recv_buf[i+4] == '_' &&
uart1_recv_buf[i+5] == 's' &&
uart1_recv_buf[i+6] == 'p' &&
uart1_recv_buf[i+7] == 'e' &&
uart1_recv_buf[i+8] == 'e' &&
uart1_recv_buf[i+9] == 'd')
{
memset(dis_buf, 0x00, sizeof(dis_buf));
//start
if(uart1_recv_buf[i+12] == '"')
{
//speed first bit
dis_buf[0] = uart1_recv_buf[i+13];
if(uart1_recv_buf[i+14] == '"')
{
//end
}
else
{
//speed second bit
dis_buf[1] = uart1_recv_buf[i+14];
}
}
DisplayWindSpeed(dis_buf);
if(whichday_flag == Today)
{
nuc505_send_cmd(Today, sdata);
for(k = 0; k < 200; k++)
{
delay_test(1000*25);
}
CleanLCD();
CleanLCD_2();
//切换到明天时,报文中没有城市名了,所以这里使用全局的city_gbk
DisplayCity(city_gbk);
}
else if(whichday_flag == Tomorrow)
{
nuc505_send_cmd(Tomorrow, sdata);
}
}
}
}
|