更新发送缓存的逻辑为添加文件到待发列表
发送由mutex改回为sem
This commit is contained in:
parent
a0aa6405b7
commit
f03adfa9e6
@ -352,7 +352,16 @@ static int setFileToSend_thread_entry(void *parameter)
|
|||||||
// list_thread();
|
// list_thread();
|
||||||
// return RT_EOK;
|
// return RT_EOK;
|
||||||
}
|
}
|
||||||
|
void manualAaddlst(char *f)
|
||||||
|
{
|
||||||
|
nsetLock();
|
||||||
|
int rst = ini_putl(SECTION_TO_SEND, f, 0, FILE_TO_SEND);
|
||||||
|
nclearLock();
|
||||||
|
if (!rst) {
|
||||||
|
LOG_E("manual add file to send error.");
|
||||||
|
}
|
||||||
|
LOG_D("add %s-0 to list.",f);
|
||||||
|
}
|
||||||
/**
|
/**
|
||||||
* 添加待发文件到列表
|
* 添加待发文件到列表
|
||||||
* @param fin
|
* @param fin
|
||||||
|
@ -34,7 +34,7 @@ static struct rt_event chkSta; //发送条件,含两部分,1-超时或文件
|
|||||||
rt_sem_t TTReady= RT_NULL;//天通具备发送状态后 rt_sem_release(TTReady);
|
rt_sem_t TTReady= RT_NULL;//天通具备发送状态后 rt_sem_release(TTReady);
|
||||||
rt_sem_t cfgUpdate = RT_NULL;//配置文件更新
|
rt_sem_t cfgUpdate = RT_NULL;//配置文件更新
|
||||||
rt_sem_t shuntDownTT = RT_NULL;//关闭TT
|
rt_sem_t shuntDownTT = RT_NULL;//关闭TT
|
||||||
rt_mutex_t okTosend = RT_NULL;//可以发送后续文件。仅一个线程,文件依次发送
|
rt_sem_t okTosend = RT_NULL;//可以发送后续文件。仅一个线程,文件依次发送
|
||||||
rt_sem_t okToreport = RT_NULL;//配置信息ACK
|
rt_sem_t okToreport = RT_NULL;//配置信息ACK
|
||||||
static rt_thread_t initThread=RT_NULL;
|
static rt_thread_t initThread=RT_NULL;
|
||||||
static rt_thread_t deinitThread=RT_NULL;
|
static rt_thread_t deinitThread=RT_NULL;
|
||||||
@ -211,7 +211,7 @@ static void updatecfg(void)
|
|||||||
|
|
||||||
void sysSemInit()
|
void sysSemInit()
|
||||||
{
|
{
|
||||||
okTosend = rt_mutex_create("okTosend", RT_IPC_FLAG_FIFO);//同一时间仅一个线程发送文件
|
okTosend = rt_sem_create("okTosend", 0, RT_IPC_FLAG_FIFO);//同一时间仅一个线程发送文件
|
||||||
cfgUpdate = rt_sem_create("cfgUpdate", 0, RT_IPC_FLAG_FIFO);//更新cfg
|
cfgUpdate = rt_sem_create("cfgUpdate", 0, RT_IPC_FLAG_FIFO);//更新cfg
|
||||||
shuntDownTT = rt_sem_create("shuntDNTT", 0, RT_IPC_FLAG_FIFO);//关闭TT
|
shuntDownTT = rt_sem_create("shuntDNTT", 0, RT_IPC_FLAG_FIFO);//关闭TT
|
||||||
okToreport = rt_sem_create("reportINFO", 0, RT_IPC_FLAG_FIFO);//关闭TT
|
okToreport = rt_sem_create("reportINFO", 0, RT_IPC_FLAG_FIFO);//关闭TT
|
||||||
@ -281,11 +281,19 @@ void fileIsReady(void)
|
|||||||
rt_event_send(&chkSta, FILE_IS_OK);
|
rt_event_send(&chkSta, FILE_IS_OK);
|
||||||
stopTM();
|
stopTM();
|
||||||
}
|
}
|
||||||
|
static isTTok=0;
|
||||||
void TTIsReady(void)
|
void TTIsReady(void)
|
||||||
{
|
{
|
||||||
|
isTTok=1;
|
||||||
rt_event_send(&chkSta, TT_IS_OK);
|
rt_event_send(&chkSta, TT_IS_OK);
|
||||||
// resetTM();
|
// resetTM();
|
||||||
}
|
}
|
||||||
|
void TTIsNotReady(void)
|
||||||
|
{
|
||||||
|
isTTok=0;
|
||||||
|
// rt_event_send(&chkSta, TT_IS_OK);
|
||||||
|
// resetTM();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -425,20 +433,20 @@ static void upSendFile_thread_entry(void *parameter)
|
|||||||
{
|
{
|
||||||
FILE_INFO *f = RT_NULL;
|
FILE_INFO *f = RT_NULL;
|
||||||
f = (FILE_INFO *) parameter;
|
f = (FILE_INFO *) parameter;
|
||||||
rt_mutex_take(okTosend, RT_WAITING_FOREVER);
|
// rt_mutex_take(okTosend, RT_WAITING_FOREVER);
|
||||||
static rt_uint8_t d[BUFFER_ROW][200] = { };//need static?
|
static rt_uint8_t d[BUFFER_ROW][200] = { };//need static?
|
||||||
static rt_uint8_t s[BUFFER_ROW] = { };
|
static rt_uint8_t s[BUFFER_ROW] = { };
|
||||||
memset(s,0,BUFFER_ROW);
|
memset(s,0,BUFFER_ROW);
|
||||||
if (!getFileSize(f->fname)) {
|
if (!getFileSize(f->fname)) {
|
||||||
LOG_W("file '%s' is empty.",f->fname);
|
LOG_W("file '%s' is empty.",f->fname);
|
||||||
clearFileToSend(f->fname);
|
clearFileToSend(f->fname);
|
||||||
rt_mutex_release(okTosend);
|
rt_sem_release(okTosend);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (getFileSize(f->fname) > scfg.maxSizePerFile+200) {//部分demo数据体积>>1k
|
if (getFileSize(f->fname) > scfg.maxSizePerFile+200) {//部分demo数据体积>>1k
|
||||||
LOG_W("file '%s' is too large to send.",f->fname);
|
LOG_W("file '%s' is too large to send.",f->fname);
|
||||||
clearFileToSend(f->fname);
|
clearFileToSend(f->fname);
|
||||||
rt_mutex_release(okTosend);
|
rt_sem_release(okTosend);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -451,24 +459,32 @@ static void upSendFile_thread_entry(void *parameter)
|
|||||||
if (len)
|
if (len)
|
||||||
{
|
{
|
||||||
LOG_D("%d pack(s) to send", f->index ? 1 : len);
|
LOG_D("%d pack(s) to send", f->index ? 1 : len);
|
||||||
|
uint8_t issendall=1;
|
||||||
for (size_t var = 0; (var < len && s[var]!=0); var++)
|
for (size_t var = 0; (var < len && s[var]!=0); var++)
|
||||||
{
|
{
|
||||||
if (!f->index || (var+1) == f->index)
|
if (!f->index || (var+1) == f->index)
|
||||||
{ //index=0 全发,或者仅发index
|
{ //index=0 全发,或者仅发index
|
||||||
if (sendMsg(d[var], s[var]) == RT_EOK) {
|
if (sendMsg(d[var], s[var]) == RT_EOK) {
|
||||||
LOG_D("send pack[%d] with %d bytes done.",var+1,s[var]);
|
LOG_D("send pack[%d] with %d bytes done.",var+1,s[var]);
|
||||||
};
|
}
|
||||||
|
else {
|
||||||
|
issendall=0;
|
||||||
|
break;
|
||||||
|
}
|
||||||
rt_thread_mdelay(3000);//发送间隔,目前服务器未处理,暂设为3s避免粘包
|
rt_thread_mdelay(3000);//发送间隔,目前服务器未处理,暂设为3s避免粘包
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
LOG_I("upSendFile '%s' done.",f->fname);
|
if (issendall) {
|
||||||
clearFileToSend(f->fname);//由于没有准确的校核机制,此处自能认为是发送成功
|
LOG_I("upSendFile '%s' done.",f->fname);
|
||||||
|
clearFileToSend(f->fname);//由于没有准确的校核机制,此处自能认为是发送成功
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// list_thread();
|
// list_thread();
|
||||||
|
|
||||||
}
|
}
|
||||||
//当前文件处理完后置位
|
//当前文件处理完后置位
|
||||||
rt_mutex_release(okTosend);
|
rt_sem_release(okTosend);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -515,13 +531,9 @@ void getAndSendFile()
|
|||||||
//优先发送未达指定大小的文件
|
//优先发送未达指定大小的文件
|
||||||
char fnow[50];
|
char fnow[50];
|
||||||
getLstCacheFileName(fnow);
|
getLstCacheFileName(fnow);
|
||||||
if (getFileSize(fnow)) {//有数据才发
|
manualAaddlst(fnow);
|
||||||
updateCacheFileName();
|
updateCacheFileName();
|
||||||
LOG_I("send latest data first");
|
rt_thread_mdelay(1000);
|
||||||
// rt_mutex_take(okTosend, RT_WAITING_FOREVER);
|
|
||||||
upSendFile(fnow,0);
|
|
||||||
// rt_mutex_release(okTosend);//由upSendFile释放
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -536,16 +548,16 @@ void getAndSendFile()
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// rt_sem_release(okTosend);//初始赋值
|
rt_sem_release(okTosend);//初始赋值
|
||||||
static int index[MAX_KEY_LEN];
|
static int index[MAX_KEY_LEN];
|
||||||
char f[cnt][MAX_KEY_LEN];
|
char f[cnt][MAX_KEY_LEN];
|
||||||
getFilesToSend(f, index);
|
getFilesToSend(f, index);
|
||||||
|
|
||||||
for (int i = cnt-1; i > -1; i--)//倒序发送
|
for (int i = cnt-1; i > -1; i--)//倒序发送
|
||||||
{
|
{
|
||||||
// LOG_D("f[%d]=%s",i,f[i]);
|
LOG_D("f[%d]=%s",i,f[i]);
|
||||||
// continue;
|
// continue;
|
||||||
// if (rt_mutex_take(okTosend, RT_WAITING_FOREVER) == RT_EOK)
|
if (rt_sem_take(okTosend, RT_WAITING_FOREVER) == RT_EOK)
|
||||||
{
|
{
|
||||||
rt_thread_mdelay(1000);//thread close
|
rt_thread_mdelay(1000);//thread close
|
||||||
upSendFile(f[i],index[i]);
|
upSendFile(f[i],index[i]);
|
||||||
@ -585,7 +597,7 @@ static void chkAndSendFile_thread_entry()
|
|||||||
LOG_I("TT准备就绪");
|
LOG_I("TT准备就绪");
|
||||||
sendACK();
|
sendACK();
|
||||||
//当前固件底层未缓存待发数据,导致前几包数据可能丢失,暂时用延时规避
|
//当前固件底层未缓存待发数据,导致前几包数据可能丢失,暂时用延时规避
|
||||||
// rt_thread_mdelay(1*60*1000);
|
rt_thread_mdelay(15*1000);
|
||||||
getAndSendFile();
|
getAndSendFile();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -199,6 +199,7 @@ static void rulecheck(void)
|
|||||||
else {
|
else {
|
||||||
okCnt = 0;
|
okCnt = 0;
|
||||||
// LOG_W("不符合。");
|
// LOG_W("不符合。");
|
||||||
|
TTIsNotReady();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (okCnt >= scfg.minTTPeriCnt) {
|
if (okCnt >= scfg.minTTPeriCnt) {
|
||||||
@ -219,6 +220,10 @@ static void rulecheck(void)
|
|||||||
// }
|
// }
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
size_t isTTok(void)
|
||||||
|
{
|
||||||
|
return okCnt;
|
||||||
}
|
}
|
||||||
/* 数据解析 */
|
/* 数据解析 */
|
||||||
static void tt_parse(rt_uint8_t *data)
|
static void tt_parse(rt_uint8_t *data)
|
||||||
|
Loading…
Reference in New Issue
Block a user