heyuanjie87 6 سال پیش
والد
کامیت
ab108fcca0
1فایلهای تغییر یافته به همراه19 افزوده شده و 17 حذف شده
  1. 19 17
      osdep/rtthread/airkiss_demo.c

+ 19 - 17
osdep/rtthread/airkiss_demo.c

@@ -101,6 +101,7 @@ static int ak_recv(airkiss_context_t *ac, int ms, int *rcnt)
     akbuf_t *buf = 0;
     int status = AIRKISS_STATUS_CONTINUE;
     rt_tick_t st, max;
+    int len = 0;
 
     st = rt_tick_get();
 
@@ -108,22 +109,22 @@ static int ak_recv(airkiss_context_t *ac, int ms, int *rcnt)
     {
         if (rt_mb_recv(&_bfready, (rt_ubase_t *)&buf, rt_tick_from_millisecond(10)) == 0)
         {
-            //rt_kprintf("%d\n", buf->fmlen);
-
             status = airkiss_recv(ac, buf->f, buf->fmlen);
             rt_list_insert_after(&_bflist, &buf->list);
             if (status != AIRKISS_STATUS_CONTINUE)
                 break;
 
-            (*rcnt)++;
-            /* 收到数据奖励时间 */
-            if (ms < 140)
-                ms += 12;
+            if (rcnt && (buf->fmlen != len))
+            {
+                (*rcnt)++;
+                len = buf->fmlen;
+                if (ms < 180)
+                    ms += 12;
+            }
         }
         else
         {
-            /* 超时后进行时间惩罚 */
-            if (ms > 40)
+            if ((ms > 30) && rcnt)
                 ms -= 2;
         }
 
@@ -146,26 +147,25 @@ static int ak_recv_chn(struct rt_wlan_device *dev,
     airkiss_change_channel(ac);
 
     status = ak_recv(ac, chn->tm, &rcnt);
+
     if (status == AIRKISS_STATUS_CHANNEL_LOCKED)
     {
         rt_kprintf("airkiss locked chn %d\n", chn->n);
-        status = ak_recv(ac, 1000 * 30, &rcnt);
+        status = ak_recv(ac, 1000 * 30, RT_NULL);
     }
 
     chn->cnt += rcnt;
+    if (chn->cnt > 5)
+        chn->cnt -= 3;
     t = chn->cnt * chn->cnt * chn->cnt;
+
     if (t)
     {
         if (t > 170)
             t = 170;
         chn->tm = 30 + t;
-        rt_kprintf("tm %d on chn %d\n", chn->tm, chn->n);
-    }
 
-    if (chn->cnt > 4)
-    {
-        chn->cnt -= 2;
-        chn->tm -= (chn->tm/8);
+        rt_kprintf("tm(%d) cnt(%d) on chn %d\n", chn->tm, chn->cnt, chn->n);
     }
 
     return status;
@@ -281,8 +281,7 @@ static void do_airkiss_configwifi(void)
             (airkiss_memset_fn)&rt_memset,
             (airkiss_memcpy_fn)&rt_memcpy,
             (airkiss_memcmp_fn)&rt_memcmp,
-            (airkiss_printf_fn)&rt_kprintf
-        };
+            (airkiss_printf_fn)&rt_kprintf};
     int _mbuf[AKDEMO_BUFSZ];
 
     rt_kprintf("airkiss thread start\n");
@@ -295,6 +294,7 @@ static void do_airkiss_configwifi(void)
     airkiss_init(&ac, &acfg);
 
     rt_mb_init(&_bfready, "ak", _mbuf, AKDEMO_BUFSZ, 0);
+    rt_wlan_config_autoreconnect(0);
     rt_wlan_disconnect();
     dev = (struct rt_wlan_device *)rt_device_find(RT_WLAN_DEVICE_STA_NAME);
     rt_wlan_dev_set_promisc_callback(dev, prom_callback);
@@ -333,6 +333,7 @@ static void do_airkiss_configwifi(void)
 
 _out:
     rt_wlan_dev_set_promisc_callback(dev, RT_NULL);
+    rt_wlan_config_autoreconnect(1);
     rt_mb_detach(&_bfready);
     rt_free(pbuf);
     _akrun = 0;
@@ -439,6 +440,7 @@ static void airkiss_thread_cap(void *p)
 
     rt_mb_init(&_bfready, "ak", _mbuf, AKDEMO_BUFSZ, 0);
     rt_wlan_disconnect();
+    rt_wlan_config_autoreconnect(0);
     dev = (struct rt_wlan_device *)rt_device_find(RT_WLAN_DEVICE_STA_NAME);
     rt_wlan_dev_set_promisc_callback(dev, prom_callback);