569 lines
21 KiB
C
569 lines
21 KiB
C
/*
|
||
*****************************************************************
|
||
头文件
|
||
*****************************************************************
|
||
*/
|
||
#include "bsp.h"
|
||
|
||
/*
|
||
************************************************************************************
|
||
变量定义
|
||
************************************************************************************
|
||
*/
|
||
data_common data_common1;
|
||
FIL fp; /* Pointer to the blank file object */
|
||
FATFS fs1;
|
||
UINT btw; /* Number of bytes to write */
|
||
UINT bws;
|
||
u32 send_pos=0;
|
||
DIR DirInf;
|
||
FILINFO FileInf;
|
||
char name[20]="\0";
|
||
char Tf_Read_Buff[max_transmission+15],Send_Buf[max_transmission+15] = {'\0'},Temp_Buf[max_transmission+15] = {'\0'};
|
||
/*
|
||
*********************************************************************************************************
|
||
* 函 数 名: FATFS_WriteFile()
|
||
* 功能说明: TF卡数据写入
|
||
* 输 入 :文件名 fname 数据 dat 长度 len
|
||
* 输 出 :无
|
||
*********************************************************************************************************
|
||
*/
|
||
void FATFS_WriteFile(char *fname,char *dat,u16 len) //写数据到SD卡
|
||
{
|
||
UINT br;
|
||
char name[20];
|
||
sprintf(name,"%s%s",fname,".txt");
|
||
f_mount(&fs1, "0:", 1);
|
||
f_open (&fp,fname,FA_READ|FA_WRITE|FA_OPEN_ALWAYS);
|
||
f_lseek(&fp,f_size(&fp)); //移动到文件的末尾--追加数据
|
||
f_write(&fp,dat,len,&br);
|
||
f_close(&fp);
|
||
f_mount(NULL, DiskPath, 0);
|
||
}
|
||
|
||
/*
|
||
*********************************************************************************************************
|
||
* 函 数 名: Data_Write_TF()
|
||
* 功能说明: TF卡数据写入 时间、电压、经纬度、海拔、传感器数据
|
||
* 输 入 :无
|
||
* 输 出 :无
|
||
*********************************************************************************************************
|
||
*/
|
||
|
||
FRESULT Data_Write_TF(void)
|
||
{
|
||
FRESULT res;
|
||
u8 i=0;
|
||
|
||
char hhmmss[8]={'\0'},yymmdd[8]={'\0'};
|
||
RTC_DateTypeDef dates;
|
||
|
||
//RTC_GetDate(RTC_Format_BIN,&dates);
|
||
//GetRTC(hhmmss,yymmdd);
|
||
//sprintf(name,"%s_%s.txt",yymmdd,Init_Data_Equipment.Measure_Interval);
|
||
|
||
f_mount(&fs1, "0:", 1);
|
||
res=f_open(&fp,name,FA_WRITE);
|
||
if((res==FR_NO_FILE)||(Init_Data_Equipment.par_change==1))//判断文件是否存在.不存在写入表头
|
||
{
|
||
f_close(&fp);
|
||
f_open(&fp,name,FA_READ | FA_WRITE | FA_OPEN_ALWAYS );
|
||
f_lseek (&fp,f_size(&fp));
|
||
|
||
f_write(&fp,"Equipment_ID:",strlen("Equipment_ID:"),&bws);
|
||
f_write(&fp,Init_Data_Equipment.Equipment_ID,strlen(Init_Data_Equipment.Equipment_ID),&bws);
|
||
f_write(&fp,"\r\n",2,&bws);
|
||
|
||
f_write(&fp,"TCP_Ip:",strlen("TCP_Ip:"),&bws);
|
||
f_write(&fp,Init_Data_Equipment.Bc25_Ip,strlen(Init_Data_Equipment.Bc25_Ip),&bws);
|
||
f_write(&fp,"\r\n",2,&bws);
|
||
|
||
f_write(&fp,"TCP_Port:",strlen("TCP_Port:"),&bws);
|
||
f_write(&fp,Init_Data_Equipment.Bc25_Port,strlen(Init_Data_Equipment.Bc25_Port),&bws);
|
||
f_write(&fp,"\r\n",2,&bws);
|
||
|
||
f_write(&fp,"Wifi_SSID:",strlen("Wifi_SSID:"),&bws);
|
||
f_write(&fp,Init_Data_Equipment.ESP8266_AP_SSIDs,strlen(Init_Data_Equipment.ESP8266_AP_SSIDs),&bws);
|
||
f_write(&fp,"\r\n",2,&bws);
|
||
|
||
f_write(&fp,"Wifi_Pwd:",strlen("Wifi_Pwd:"),&bws);
|
||
f_write(&fp,Init_Data_Equipment.ESP8266_AP_PWDs,strlen(Init_Data_Equipment.ESP8266_AP_PWDs),&bws);
|
||
f_write(&fp,"\r\n",2,&bws);
|
||
|
||
f_write(&fp,"Wifi_Port:",strlen("Wifi_Port:"),&bws);
|
||
f_write(&fp,Init_Data_Equipment.ESP8266_AP_Ports,strlen(Init_Data_Equipment.ESP8266_AP_Ports),&bws);
|
||
f_write(&fp,"\r\n",2,&bws);
|
||
|
||
f_write(&fp,"Measure_Interval:",strlen("Measure_Interval:"),&bws);
|
||
f_write(&fp,Init_Data_Equipment.Measure_Interval,strlen(Init_Data_Equipment.Measure_Interval),&bws);
|
||
f_write(&fp,"\r\n",2,&bws);
|
||
|
||
f_write(&fp,"Pub_Interval:",strlen("Pub_Interval:"),&bws);
|
||
f_write(&fp,Init_Data_Equipment.Pub_Time,strlen(Init_Data_Equipment.Pub_Time),&bws);
|
||
f_write(&fp,"\r\n",2,&bws);
|
||
|
||
f_write(&fp,"Appointment_Time:",strlen("Appointment_Time:"),&bws);
|
||
f_write(&fp,Init_Data_Equipment.appointment_time,strlen(Init_Data_Equipment.appointment_time),&bws);
|
||
f_write(&fp,"\r\n",2,&bws);
|
||
|
||
f_write(&fp,"Measure_Mode:",strlen("Measure_Mode:"),&bws);
|
||
f_write(&fp,Init_Data_Equipment.measure_mode,strlen(Init_Data_Equipment.measure_mode),&bws);
|
||
f_write(&fp,"\r\n",2,&bws);
|
||
|
||
f_write(&fp,"Equipment_ID,DateTime,Power-V,Latitude,N/S,Longitude,E/W,Ch1-SoilT_C,Ch1-SoilVWC_%,Ch1-Soil_DS,Ch2-SoilT_C,Ch2-SoilVWC_%,Ch2-Soil_DS,Ch3-SoilT_C,Ch3-SoilVWC_%,Ch3-Soil_DS,Ch4-SoilT_C,Ch4-SoilVWC_%,Ch4-Soil_DS,Ch5-SoilT_C,Ch5-SoilVWC_%,Ch5-Soil_DS,Ch6-SoilT_C,Ch6-SoilVWC_%,Ch6-Soil_DS,qxz-Temperature_C,qxz-Humidity_%RH,qxz-AirPressure_hPa,qxz-WindSpeed_m/s,qxz-WindDirection_°,qxz-Rainfall_mm,qxz-Illuminance_lux\r\n",
|
||
strlen("Equipment_ID,DateTime,Power-V,Latitude,N/S,Longitude,E/W,Ch1-SoilT_C,Ch1-SoilVWC_%,Ch1-Soil_DS,Ch2-SoilT_C,Ch2-SoilVWC_%,Ch2-Soil_DS,Ch3-SoilT_C,Ch3-SoilVWC_%,Ch3-Soil_DS,Ch4-SoilT_C,Ch4-SoilVWC_%,Ch4-Soil_DS,Ch5-SoilT_C,Ch5-SoilVWC_%,Ch5-Soil_DS,Ch6-SoilT_C,Ch6-SoilVWC_%,Ch6-Soil_DS,qxz-Temperature_C,qxz-Humidity_%RH,qxz-AirPressure_hPa,qxz-WindSpeed_m/s,qxz-WindDirection_°,qxz-Rainfall_mm,qxz-Illuminance_lux\r\n"),&bws);
|
||
f_close(&fp);
|
||
//qxz气象站数据(温度、湿度、气压、风速、风向、雨量、光照)
|
||
//湿度 电导率 温度
|
||
|
||
}
|
||
res=f_open(&fp,name,FA_READ | FA_WRITE | FA_OPEN_ALWAYS );//0:/
|
||
if(res!=FR_OK) //打开失败
|
||
{
|
||
i=0;
|
||
while((res!=FR_OK)&(i<100))
|
||
{
|
||
i++;
|
||
f_close(&fp);
|
||
f_mount(NULL, DiskPath, 0);
|
||
f_mount(&fs1, "0:", 1);
|
||
res=f_open(&fp,name,FA_READ | FA_WRITE | FA_OPEN_ALWAYS );//0:/
|
||
}
|
||
if(i>98)return FR_NO_PATH ;
|
||
|
||
}
|
||
f_lseek (&fp,f_size(&fp));
|
||
f_write(&fp,data_common1.Pack_data,strlen(data_common1.Pack_data),&bws);
|
||
f_write(&fp,"\r\n",2,&bws);
|
||
f_close(&fp);
|
||
|
||
|
||
|
||
f_mount(&fs1, "0:", 1);
|
||
res=f_open(&fp,"BC25.txt",FA_WRITE);
|
||
/*************数据临时存储文件,用于BC25定时发送*******************************/
|
||
if((Init_Data_Equipment.par_change==1) || (res==FR_NO_FILE))//判断文件是否存在.不存在写入表头
|
||
//if((Init_Data_Equipment.par_change==1)||(Init_Data_Equipment.Bc25_Send_Header!=dates.RTC_Date))//判断文件是否存在.不存在写入表头
|
||
{
|
||
//res=f_open(&fp,"BC25.txt",FA_READ | FA_WRITE | FA_OPEN_ALWAYS );
|
||
Init_Data_Equipment.par_change=0;
|
||
EEPROM_WriteBytes(185,0,1);
|
||
EEPROM_WriteBytes(186,&dates.RTC_Date,1);
|
||
f_close(&fp);
|
||
f_open(&fp,"BC25.txt",FA_READ | FA_WRITE | FA_OPEN_ALWAYS );
|
||
f_lseek (&fp,f_size(&fp));
|
||
|
||
f_write(&fp,"Equipment_ID:",strlen("Equipment_ID:"),&bws);
|
||
f_write(&fp,Init_Data_Equipment.Equipment_ID,strlen(Init_Data_Equipment.Equipment_ID),&bws);
|
||
f_write(&fp,"\r\n",2,&bws);
|
||
|
||
f_write(&fp,"TCP_Ip:",strlen("TCP_Ip:"),&bws);
|
||
f_write(&fp,Init_Data_Equipment.Bc25_Ip,strlen(Init_Data_Equipment.Bc25_Ip),&bws);
|
||
f_write(&fp,"\r\n",2,&bws);
|
||
|
||
f_write(&fp,"TCP_Port:",strlen("TCP_Port:"),&bws);
|
||
f_write(&fp,Init_Data_Equipment.Bc25_Port,strlen(Init_Data_Equipment.Bc25_Port),&bws);
|
||
f_write(&fp,"\r\n",2,&bws);
|
||
|
||
f_write(&fp,"Wifi_SSID:",strlen("Wifi_SSID:"),&bws);
|
||
f_write(&fp,Init_Data_Equipment.ESP8266_AP_SSIDs,strlen(Init_Data_Equipment.ESP8266_AP_SSIDs),&bws);
|
||
f_write(&fp,"\r\n",2,&bws);
|
||
|
||
f_write(&fp,"Wifi_Pwd:",strlen("Wifi_Pwd:"),&bws);
|
||
f_write(&fp,Init_Data_Equipment.ESP8266_AP_PWDs,strlen(Init_Data_Equipment.ESP8266_AP_PWDs),&bws);
|
||
f_write(&fp,"\r\n",2,&bws);
|
||
|
||
f_write(&fp,"Wifi_Port:",strlen("Wifi_Port:"),&bws);
|
||
f_write(&fp,Init_Data_Equipment.ESP8266_AP_Ports,strlen(Init_Data_Equipment.ESP8266_AP_Ports),&bws);
|
||
f_write(&fp,"\r\n",2,&bws);
|
||
|
||
f_write(&fp,"Measure_Interval:",strlen("Measure_Interval:"),&bws);
|
||
f_write(&fp,Init_Data_Equipment.Measure_Interval,strlen(Init_Data_Equipment.Measure_Interval),&bws);
|
||
f_write(&fp,"\r\n",2,&bws);
|
||
|
||
f_write(&fp,"Pub_Interval:",strlen("Pub_Interval:"),&bws);
|
||
f_write(&fp,Init_Data_Equipment.Pub_Time,strlen(Init_Data_Equipment.Pub_Time),&bws);
|
||
f_write(&fp,"\r\n",2,&bws);
|
||
|
||
f_write(&fp,"Appointment_Time:",strlen("Appointment_Time:"),&bws);
|
||
f_write(&fp,Init_Data_Equipment.appointment_time,strlen(Init_Data_Equipment.appointment_time),&bws);
|
||
f_write(&fp,"\r\n",2,&bws);
|
||
|
||
f_write(&fp,"Measure_Mode:",strlen("Measure_Mode:"),&bws);
|
||
f_write(&fp,Init_Data_Equipment.measure_mode,strlen(Init_Data_Equipment.measure_mode),&bws);
|
||
f_write(&fp,"\r\n",2,&bws);
|
||
|
||
// f_write(&fp,"IOT_Username:",strlen("IOT_Username:"),&bws);
|
||
// f_write(&fp,Init_Data_Equipment.measure_mode,strlen(Init_Data_Equipment.IOT_Username),&bws);
|
||
// f_write(&fp,"\r\n",2,&bws);
|
||
|
||
// f_write(&fp,"IOT_Password:",strlen("IOT_Password:"),&bws);
|
||
// f_write(&fp,Init_Data_Equipment.measure_mode,strlen(Init_Data_Equipment.IOT_Password),&bws);
|
||
// f_write(&fp,"\r\n",2,&bws);
|
||
|
||
// f_write(&fp,"IOT_Theme_name:",strlen("IOT_Theme_name:"),&bws);
|
||
// f_write(&fp,Init_Data_Equipment.measure_mode,strlen(Init_Data_Equipment.IOT_Theme_name),&bws);
|
||
// f_write(&fp,"\r\n",2,&bws);
|
||
|
||
f_write(&fp,"Equipment_ID,DateTime,Power-V,Latitude,N/S,Longitude,E/W,Ch1-SoilT_C,Ch1-SoilVWC_%,Ch1-Soil_DS,Ch2-SoilT_C,Ch2-SoilVWC_%,Ch2-Soil_DS,Ch3-SoilT_C,Ch3-SoilVWC_%,Ch3-Soil_DS,Ch4-SoilT_C,Ch4-SoilVWC_%,Ch4-Soil_DS,Ch5-SoilT_C,Ch5-SoilVWC_%,Ch5-Soil_DS,Ch6-SoilT_C,Ch6-SoilVWC_%,Ch6-Soil_DS,qxz-Temperature_C,qxz-Humidity_%RH,qxz-AirPressure_hPa,qxz-WindSpeed_m/s,qxz-WindDirection_°,qxz-Rainfall_mm,qxz-Illuminance_lux\r\n",
|
||
strlen("Equipment_ID,DateTime,Power-V,Latitude,N/S,Longitude,E/W,Ch1-SoilT_C,Ch1-SoilVWC_%,Ch1-Soil_DS,Ch2-SoilT_C,Ch2-SoilVWC_%,Ch2-Soil_DS,Ch3-SoilT_C,Ch3-SoilVWC_%,Ch3-Soil_DS,Ch4-SoilT_C,Ch4-SoilVWC_%,Ch4-Soil_DS,Ch5-SoilT_C,Ch5-SoilVWC_%,Ch5-Soil_DS,Ch6-SoilT_C,Ch6-SoilVWC_%,Ch6-Soil_DS,qxz-Temperature_C,qxz-Humidity_%RH,qxz-AirPressure_hPa,qxz-WindSpeed_m/s,qxz-WindDirection_°,qxz-Rainfall_mm,qxz-Illuminance_lux\r\n"),&bws);
|
||
f_close(&fp);
|
||
}
|
||
res=f_open(&fp,"BC25.txt",FA_READ | FA_WRITE | FA_OPEN_ALWAYS );//0:/
|
||
if(res!=FR_OK) //打开失败
|
||
{
|
||
i=0;
|
||
while((res!=FR_OK)&(i<100))
|
||
{
|
||
i++;
|
||
f_close(&fp);
|
||
f_mount(NULL, DiskPath, 0);;
|
||
f_mount(&fs1, "0:", 1);
|
||
res=f_open(&fp,"BC25.txt",FA_READ | FA_WRITE | FA_OPEN_ALWAYS );//0:/
|
||
}
|
||
if(i>98)
|
||
{
|
||
//u5_printf("open BC25.txt fail\r\n");
|
||
return FR_NO_PATH ;
|
||
}
|
||
|
||
}
|
||
// if(res==FR_OK) //打开成功
|
||
// {
|
||
f_lseek (&fp,f_size(&fp));
|
||
f_write(&fp,data_common1.Pack_data,strlen(data_common1.Pack_data),&bws);
|
||
f_write(&fp,"\r\n",2,&bws);
|
||
f_close(&fp);
|
||
// }
|
||
|
||
f_mount(NULL, DiskPath, 0);
|
||
return FR_OK;
|
||
}
|
||
|
||
|
||
void Write_Test(void)
|
||
{
|
||
f_mount(&fs1, "0:", 1);
|
||
f_open(&fp,"test.txt",FA_READ | FA_WRITE | FA_OPEN_ALWAYS );
|
||
f_lseek (&fp,f_size(&fp));
|
||
f_write(&fp,"Equipment_ID,DateTime,Power-V,Latitude,N/S,Longitude,E/W,Ch1-SoilT_C,Ch1-SoilVWC_%,Ch1-Soil_DS,Ch2-SoilT_C,Ch2-SoilVWC_%,Ch2-Soil_DS,Ch3-SoilT_C,Ch3-SoilVWC_%,Ch3-Soil_DS,Ch4-SoilT_C,Ch4-SoilVWC_%,Ch4-Soil_DS,Ch5-SoilT_C,Ch5-SoilVWC_%,Ch5-Soil_DS,Ch6-SoilT_C,Ch6-SoilVWC_%,Ch6-Soil_DS,qxz-Temperature_C,qxz-Humidity_%RH,qxz-AirPressure_hPa,qxz-WindSpeed_m/s,qxz-WindDirection_°,qxz-Rainfall_mm,qxz-Illuminance_lux,IOT_Cpin,IOT_Csq,IOT_Net,Tf_Tol,Tf_Free\r\n",
|
||
strlen("Equipment_ID,DateTime,Power-V,Latitude,N/S,Longitude,E/W,Ch1-SoilT_C,Ch1-SoilVWC_%,Ch1-Soil_DS,Ch2-SoilT_C,Ch2-SoilVWC_%,Ch2-Soil_DS,Ch3-SoilT_C,Ch3-SoilVWC_%,Ch3-Soil_DS,Ch4-SoilT_C,Ch4-SoilVWC_%,Ch4-Soil_DS,Ch5-SoilT_C,Ch5-SoilVWC_%,Ch5-Soil_DS,Ch6-SoilT_C,Ch6-SoilVWC_%,Ch6-Soil_DS,qxz-Temperature_C,qxz-Humidity_%RH,qxz-AirPressure_hPa,qxz-WindSpeed_m/s,qxz-WindDirection_°,qxz-Rainfall_mm,qxz-Illuminance_lux,IOT_Cpin,IOT_Csq,IOT_Net,Tf_Tol,Tf_Free\r\n"),&bws);
|
||
f_write(&fp,data_common1.Pack_data,strlen(data_common1.Pack_data),&bws);
|
||
f_write(&fp,"\r\n",2,&bws);
|
||
f_close(&fp);
|
||
f_mount(NULL, "0:", 1);
|
||
// free(fs);
|
||
}
|
||
/*
|
||
*********************************************************************************************************
|
||
* 函 数 名: Fil_delete()
|
||
* 功能说明: 删除文件
|
||
* 输 入 :文件名 name
|
||
* 输 出 :无
|
||
*********************************************************************************************************
|
||
*/
|
||
FRESULT Fil_delete(char *names)
|
||
{
|
||
FRESULT result;
|
||
char namebuff[10]="\0";
|
||
sprintf(namebuff,"%s%s",names,".txt");
|
||
f_mount(&fs1, "0:", 1);
|
||
result = f_unlink(namebuff);
|
||
f_close(&fp);
|
||
if(result == FR_OK)
|
||
{
|
||
|
||
}//u5_printf("delete sucess");
|
||
f_mount(NULL, DiskPath, 0);;
|
||
return result;
|
||
}
|
||
|
||
/*
|
||
*********************************************************************************************************
|
||
* 函 数 名: txt_size_read()
|
||
* 功能说明: 读取文件的大小byte
|
||
* 输 入 :文件名 name
|
||
* 输 出 :无
|
||
*********************************************************************************************************
|
||
*/
|
||
u32 txt_size_read(char *fname)
|
||
{
|
||
// u8 i=0;
|
||
FRESULT res;
|
||
u32 txt_size;
|
||
char name[20];
|
||
sprintf(name,"%s%s",fname,".txt");
|
||
res=f_mount(&fs1, "0:", 1);
|
||
res=f_open(&fp,"0:/BC25.txt",FA_READ);
|
||
if(res!=FR_OK) //打开失败
|
||
{
|
||
//u5_printf("open bc25txt size fail\r\n");
|
||
return FR_NO_FILE;
|
||
}
|
||
txt_size=f_size(&fp);
|
||
res=f_close(&fp);
|
||
f_mount(NULL, DiskPath, 0);;
|
||
return txt_size;
|
||
}
|
||
|
||
uint16_t Count(char *P)
|
||
{
|
||
uint16_t count = 0;
|
||
while((P[count++] != 0x0a)&&(P[count - 1] != 0x0d) && count < max_transmission+15);
|
||
return count;
|
||
}
|
||
|
||
|
||
/*
|
||
*********************************************************************************************************
|
||
* 函 数 名: FATFS_Read_TF()
|
||
* 功能说明: TF卡数据读取
|
||
* 输 入 :文件名 name 起始位置 start 数据长度 len
|
||
* 输 出 :无
|
||
*********************************************************************************************************
|
||
*/
|
||
|
||
void FATFS_Read_TF(char *fname,u32 start_pos,u32 len)
|
||
{
|
||
FRESULT res;
|
||
u32 tf_sendpos=0;
|
||
u16 size_buf,Send_Len = 0,Save_Addr = 0;
|
||
u8 times;
|
||
u32 i,lens_quotient,len_remainder;//商,余数
|
||
char rname[10];
|
||
|
||
if(BC25_Status.socket==0)return;
|
||
memset(Tf_Read_Buff,0,sizeof(Tf_Read_Buff));
|
||
memset(Send_Buf,0,sizeof(Send_Buf));
|
||
memset(Temp_Buf,0,sizeof(Temp_Buf));
|
||
EEPROM_ReadDWords(180,&tf_sendpos,1);//读取TF卡开始传输数据的位置
|
||
if(tf_sendpos>len)tf_sendpos=0;//防止卡数据手动删除
|
||
|
||
sprintf(rname,"%s%s",fname,".txt");
|
||
lens_quotient=(len-tf_sendpos)/max_transmission;
|
||
len_remainder=(len-tf_sendpos)%max_transmission;
|
||
|
||
memset(Tf_Read_Buff,0,sizeof(Tf_Read_Buff));
|
||
if(osEventFlagsGet(EventFlagID_PROCESS)&EVENT_TFstore_BIT_6)
|
||
{
|
||
osDelay(3000);
|
||
}
|
||
res=f_mount(&fs1, "0:", 1);
|
||
res=f_open(&fp,rname,FA_READ);
|
||
times=0;
|
||
|
||
while((res!=FR_OK)&(times<100))
|
||
{
|
||
res=f_close(&fp);
|
||
res=f_mount(&fs1, "0:", 1);
|
||
res=f_open(&fp,rname,FA_READ);
|
||
}
|
||
f_lseek(&fp, start_pos+tf_sendpos);
|
||
|
||
for(i=0;i<lens_quotient;lens_quotient=((len-tf_sendpos)/max_transmission))//发送大数据max_transmission字节
|
||
{
|
||
if(osEventFlagsGet(EventFlagID_PROCESS)&EVENT_TFstore_BIT_6)//等待数据存储
|
||
{
|
||
osEventFlagsClear(EventFlagID_PROCESS,EVENT_TFstore_BIT_6);
|
||
//u5_printf("BC25 WAIT\r\n");
|
||
res=f_close(&fp);
|
||
osEventFlagsSet(EventFlagID_PROCESS,EVENT_TFread2_BIT_7);
|
||
osEventFlagsWait(EventFlagID_PROCESS,EVENT_TFstore2_BIT_8,osFlagsWaitAll,5000 );
|
||
res=f_close(&fp);
|
||
/******获取更新后的文件******/
|
||
len=txt_size_read("BC25");//
|
||
//u5_printf("second-len:%ld\r\n",len);
|
||
while((len<10)&(times<50))
|
||
{
|
||
len=txt_size_read("BC25");
|
||
//u5_printf("second-len:%ld\r\n",len);
|
||
times++;
|
||
}
|
||
lens_quotient=(len-tf_sendpos)/max_transmission;
|
||
lens_quotient+=i;
|
||
len_remainder=(len-tf_sendpos)%max_transmission;
|
||
//u5_printf("i=%d\r\n",i);
|
||
//u5_printf("lens_quotient=%d\r\n",lens_quotient);
|
||
//u5_printf("len_remainder=%d\r\n",len_remainder);
|
||
f_mount(&fs1, "0:", 1);
|
||
res=f_open(&fp,rname,FA_READ);
|
||
times=0;
|
||
while((res!=FR_OK)&(times<100))
|
||
{
|
||
res=f_open(&fp,rname,FA_READ);
|
||
times++;
|
||
}
|
||
if(res!=FR_OK) //打开失败
|
||
{
|
||
EEPROM_WriteDWords(180,&tf_sendpos,1);
|
||
return;
|
||
}
|
||
f_lseek(&fp,tf_sendpos);
|
||
//u5_printf("BC25 resum\r\n");
|
||
}
|
||
res=f_read(&fp,Tf_Read_Buff,max_transmission,&bws);
|
||
Send_Len = Count(Tf_Read_Buff);
|
||
Save_Addr = Send_Len + 1;
|
||
memset(Send_Buf,0,sizeof(Send_Buf));
|
||
memset(Temp_Buf,0,sizeof(Temp_Buf));
|
||
memcpy(Temp_Buf,Tf_Read_Buff,Send_Len + 1);
|
||
|
||
if(strstr((const char*)Temp_Buf,(const char*)"Ch1-SoilT_C"))
|
||
{
|
||
IOT_Theme_TYPE = IOT_Theme_tablehead;
|
||
}
|
||
else if((Temp_Buf[0] > 0x2F) && (Temp_Buf[0] < 0x3A)) // Temp_Buf[0] 在‘0’---‘9’之间
|
||
{
|
||
IOT_Theme_TYPE = IOT_Theme_data;
|
||
}
|
||
else
|
||
{
|
||
IOT_Theme_TYPE = IOT_Theme_config;
|
||
}
|
||
|
||
sprintf(Send_Buf,"Pub,%d,%s*",Send_Len+1,Temp_Buf);
|
||
Send_Len = Count(Send_Buf);
|
||
times=0;
|
||
|
||
if(IOT_Theme_TYPE != IOT_Theme_config)
|
||
{
|
||
if(BC25_Senddata_mode(Send_Len + 2,Send_Buf))
|
||
{
|
||
//u5_printf("bc25 send fail:%ld\r\n",tf_sendpos);
|
||
return;//发送失败
|
||
}
|
||
}
|
||
|
||
|
||
|
||
tf_sendpos += Save_Addr;//传输一次,更新一次位置
|
||
f_lseek(&fp, start_pos+tf_sendpos);
|
||
EEPROM_WriteDWords(180,&tf_sendpos,1);
|
||
}
|
||
|
||
|
||
while(tf_sendpos < len)
|
||
{
|
||
|
||
res=f_read(&fp,Tf_Read_Buff,max_transmission,&bws);
|
||
Send_Len = Count(Tf_Read_Buff);
|
||
Save_Addr = Send_Len + 1;
|
||
memset(Send_Buf,0,sizeof(Send_Buf));
|
||
memset(Temp_Buf,0,sizeof(Temp_Buf));
|
||
memcpy(Temp_Buf,Tf_Read_Buff,Send_Len + 1);
|
||
sprintf(Send_Buf,"Pub,%d,%s*",Send_Len+1,Temp_Buf);
|
||
Send_Len = Count(Send_Buf);
|
||
|
||
if(IOT_Theme_TYPE != IOT_Theme_config)
|
||
{
|
||
if(BC25_Senddata_mode(Send_Len + 2,Send_Buf))
|
||
{
|
||
//u5_printf("bc25 send fail:%ld\r\n",tf_sendpos);
|
||
return;//发送失败
|
||
}
|
||
}
|
||
|
||
tf_sendpos += Save_Addr;//传输一次,更新一次位置
|
||
f_lseek(&fp, start_pos+tf_sendpos);
|
||
EEPROM_WriteDWords(180,&tf_sendpos,1);
|
||
__nop();
|
||
}
|
||
tf_sendpos=0;//传输完置0
|
||
EEPROM_WriteDWords(180,&tf_sendpos,1);
|
||
res=f_close(&fp);
|
||
f_mount(&fs1, "0:", 1);
|
||
Fil_delete("BC25");//删除备份数据
|
||
}
|
||
|
||
/*
|
||
*********************************************************************************************************
|
||
* 函 数 名: Common_Data_Pack()
|
||
* 功能说明: 数据打包
|
||
* 输 入 :无
|
||
* 输 出 :无
|
||
*********************************************************************************************************
|
||
*/
|
||
void Common_Data_Pack(void)
|
||
{
|
||
|
||
sprintf(data_common1.Time_DATA,"%c%c/%c%c/20%c%c %c%c:%c%c:%c%c",
|
||
rtc_data[2],rtc_data[3],rtc_data[4],rtc_data[5],rtc_data[0],rtc_data[1],
|
||
rtc_time[0],rtc_time[1],rtc_time[2],rtc_time[3],rtc_time[4],rtc_time[5]);//日期和时间存储
|
||
memset(data_common1.Pack_data,0,sizeof(data_common1.Pack_data));
|
||
sprintf(data_common1.Pack_data,"%s,%s,%s%s%s,%s,%s,%s,%s,%s,%s",
|
||
Init_Data_Equipment.Equipment_ID,
|
||
data_common1.Time_DATA,
|
||
data_common1.ADC_DATA,
|
||
data_common1.GPS_DATA,
|
||
Sdi_Fram_Record_Structs.Ch1_RX_BUF,
|
||
Sdi_Fram_Record_Structs.Ch2_RX_BUF,
|
||
Sdi_Fram_Record_Structs.Ch3_RX_BUF,
|
||
Sdi_Fram_Record_Structs.Ch4_RX_BUF,
|
||
Sdi_Fram_Record_Structs.Ch5_RX_BUF,
|
||
Sdi_Fram_Record_Structs.Ch6_RX_BUF,
|
||
// Sdi_Fram_Record_Structs.Ch7_RX_BUF,
|
||
// Sdi_Fram_Record_Structs.Ch8_RX_BUF,
|
||
// Sdi_Fram_Record_Structs.Ch9_RX_BUF
|
||
Sdi_Fram_Record_Structs.QXZ_RX_BUF
|
||
|
||
|
||
);
|
||
sprintf(data_common1.Pack_len,"%d,",strlen(data_common1.Pack_data)+2);
|
||
|
||
|
||
|
||
|
||
|
||
|
||
//测试部分
|
||
|
||
if((data_common1.Pack_data[0] < 0x30) || (data_common1.Pack_data[0] > 0x39))
|
||
{
|
||
memset(data_common1.Pack_data,0,sizeof(data_common1.Pack_data));
|
||
sprintf(data_common1.Pack_data,"%s\r\n","TESTTEST"
|
||
|
||
// Sdi_Fram_Record_Structs.Ch7_RX_BUF,
|
||
// Sdi_Fram_Record_Structs.Ch8_RX_BUF,
|
||
// Sdi_Fram_Record_Structs.Ch9_RX_BUF
|
||
|
||
|
||
);
|
||
|
||
}
|
||
|
||
}
|
||
|
||
|
||
//得到磁盘剩余容量
|
||
//drv:磁盘编号("0:"/"1:")
|
||
//total:总容量 (单位KB)
|
||
//free:剩余容量 (单位KB)
|
||
//返回值:0,正常.其他,错误代码
|
||
uint8_t exf_getfree(char *drv,u32 *total,u32 *frees)
|
||
{
|
||
FATFS *fs;
|
||
|
||
fs=malloc(700);
|
||
FRESULT res;
|
||
u32 fre_clust=0, fre_sect=0, tot_sect=0;
|
||
//得到磁盘信息及空闲簇数量
|
||
res=f_mount(fs, "0", 1);
|
||
res =f_getfree("0", (DWORD*)&fre_clust, &fs);
|
||
if(res==0)
|
||
{
|
||
tot_sect=(fs->n_fatent-2)*fs->csize; //得到总扇区数
|
||
fre_sect=fre_clust*fs->csize; //得到空闲扇区数
|
||
|
||
*total=tot_sect>>1; //单位为KB
|
||
*frees=fre_sect>>1; //单位为KB
|
||
|
||
*total=(*total)/1024; //单位为M
|
||
*frees=(*frees)/1024; //单位为M
|
||
}
|
||
res=f_mount(NULL, "0", 1);
|
||
free(fs);
|
||
return res;
|
||
}
|
||
|
||
/***************************** END OF FILE *********************************/
|