Files
SM-1000M/RTX5_20220316/Driver/FATFS/data_handle.c
2026-04-23 10:50:18 +08:00

569 lines
21 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*
*****************************************************************
头文件
*****************************************************************
*/
#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 *********************************/