|
|
@@ -100,12 +100,11 @@ static int mb_read(Modbus_Manger *mm, uint16_t addr, uint16_t reg, void *data, i
|
|
|
static int mb_write(Modbus_Manger *mm, uint16_t addr, uint16_t reg, void *data, int len, int timeout)
|
|
|
{
|
|
|
int to,r,cnt=(len+len%2)/2;
|
|
|
-
|
|
|
+
|
|
|
g_modbus_get_timeout(mm, &to);
|
|
|
g_modbus_set_timeout(mm, timeout);
|
|
|
r = g_modbus_write_x_reg(mm, addr, reg, cnt, data);
|
|
|
g_modbus_set_timeout(mm, to);
|
|
|
-
|
|
|
return (r==cnt)?0:-1;
|
|
|
}
|
|
|
//////////////////////////////////////////////////////////////////////
|
|
|
@@ -204,7 +203,21 @@ static int board_send(Modbus_Manger *mm, uint16_t addr, char *data, int dlen)
|
|
|
int slen=0,onelen=0,onemax=128;
|
|
|
|
|
|
upg_pkt_t *pkt=(upg_pkt_t*)temp;
|
|
|
- r = board_upgrade_jump(mm, addr);
|
|
|
+ board_upgrade_jump(mm, addr);
|
|
|
+ sleep(1);
|
|
|
+ r = board_is_upgrading(mm,addr);
|
|
|
+ if(r == 0){
|
|
|
+ sleep(3);
|
|
|
+ r = board_upgrade_jump(mm, addr);
|
|
|
+ sleep(3);
|
|
|
+ r = board_is_upgrading(mm,addr);
|
|
|
+ }
|
|
|
+ LOGD("r = %d addr = %d\n",r,addr);
|
|
|
+ if(r == 0)
|
|
|
+ {
|
|
|
+ return -1;
|
|
|
+ }
|
|
|
+ sleep(2);
|
|
|
while(1) {
|
|
|
if((slen+onemax)>=dlen) {
|
|
|
//onelen = dlen-(slen+onemax);
|
|
|
@@ -217,7 +230,8 @@ static int board_send(Modbus_Manger *mm, uint16_t addr, char *data, int dlen)
|
|
|
memcpy(pkt->data, data+slen, onelen);
|
|
|
pkt->pid = pid;
|
|
|
pkt->dlen = onelen;
|
|
|
- r = mb_write(mm, addr, REG_UPG_WRITE, pkt, onelen+sizeof(upg_pkt_t), 10);
|
|
|
+ r = mb_write(mm, addr, REG_UPG_WRITE, pkt, onelen+sizeof(upg_pkt_t), 40);
|
|
|
+
|
|
|
slen += onelen;
|
|
|
if(pid==0) {
|
|
|
//file_save("/tmp/xxx.bin", pkt, onelen+sizeof(upg_pkt_t));
|
|
|
@@ -228,7 +242,7 @@ static int board_send(Modbus_Manger *mm, uint16_t addr, char *data, int dlen)
|
|
|
if(pid<0) break;
|
|
|
pid++;
|
|
|
}
|
|
|
- sleep(1);
|
|
|
+ sleep(2);
|
|
|
|
|
|
return 0;
|
|
|
}
|
|
|
@@ -252,21 +266,27 @@ static int board_proc(upg_handle_t *h, int quit)
|
|
|
board_info_set(&info);
|
|
|
|
|
|
//broadcase upgrade file
|
|
|
- board_send(mm, 0, fbuf.buf, fbuf.dlen);
|
|
|
+ sleep(1);
|
|
|
+
|
|
|
while(1) {
|
|
|
r = xlist_get_node(l, &ln, 0);
|
|
|
if(r) {
|
|
|
break;
|
|
|
}
|
|
|
-
|
|
|
tmp = (board_info_t*)ln->data.buf;
|
|
|
- for(i=0; i<RETRY_MAX; i++) {
|
|
|
- r = board_get_info(mm, tmp->addr, &swinfo);
|
|
|
- if(r==0) {
|
|
|
- break;
|
|
|
+
|
|
|
+ r = board_send(mm, tmp->addr, fbuf.buf, fbuf.dlen);
|
|
|
+ if(r == 0)
|
|
|
+ {
|
|
|
+ for(i=0; i<20; i++) {
|
|
|
+ r = board_get_info(mm, tmp->addr, &swinfo);
|
|
|
+ if(r==0) {
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ LOGE("___ board upgrade failed, retry %d\n", i+1);
|
|
|
+ sleep(1);
|
|
|
+ // board_send(mm, i, fbuf.buf, fbuf.dlen);
|
|
|
}
|
|
|
- LOGE("___ board upgrade failed, retry %d\n", i+1);
|
|
|
- board_send(mm, i, fbuf.buf, fbuf.dlen);
|
|
|
}
|
|
|
|
|
|
if(r) {
|
|
|
@@ -283,7 +303,7 @@ static int board_proc(upg_handle_t *h, int quit)
|
|
|
}
|
|
|
free(fbuf.buf);
|
|
|
|
|
|
- sys_exit(); //restart app
|
|
|
+ // sys_exit(); //restart app
|
|
|
|
|
|
return 0;
|
|
|
}
|
|
|
@@ -310,16 +330,16 @@ static int board_scan(void)
|
|
|
static void start_threads(int flag)
|
|
|
{
|
|
|
if(flag) {
|
|
|
- thread_start2(THREAD_ID_SNMP);
|
|
|
- thread_start2(THREAD_ID_POWER);
|
|
|
+ // thread_start2(THREAD_ID_SNMP);
|
|
|
+ // thread_start2(THREAD_ID_POWER);
|
|
|
//thread_start2(THREAD_ID_CASCADE);
|
|
|
//thread_start2(THREAD_ID_CASCADE_SCAN);
|
|
|
//thread_start2(THREAD_ID_BREAKER);
|
|
|
//thread_start2(THREAD_ID_BREAKER_SCANNER);
|
|
|
}
|
|
|
else {
|
|
|
- thread_stop(THREAD_ID_SNMP);
|
|
|
- thread_stop(THREAD_ID_POWER);
|
|
|
+ // thread_stop(THREAD_ID_SNMP);
|
|
|
+ // thread_stop(THREAD_ID_POWER);
|
|
|
//thread_stop(THREAD_ID_CASCADE);
|
|
|
//thread_stop(THREAD_ID_CASCADE_SCAN);
|
|
|
//thread_stop(THREAD_ID_BREAKER);
|
|
|
@@ -339,11 +359,14 @@ static void* board_thread(void *arg)
|
|
|
while(th->quit==0) {
|
|
|
if(h->arg.upging) {
|
|
|
|
|
|
- start_threads(0);
|
|
|
+ // start_threads(0);
|
|
|
+ h->dm->upgread_flag = 1;
|
|
|
+ sleep(2);
|
|
|
r = board_proc(h, th->quit);
|
|
|
- start_threads(1);
|
|
|
+ //start_threads(1);
|
|
|
|
|
|
file_remove(h->arg.path);
|
|
|
+ h->dm->upgread_flag = 0;
|
|
|
h->arg.upging = 0;
|
|
|
}
|
|
|
else {
|