[项目外包] 又来了,wifi兼职

[复制链接]
 楼主| Simon21ic 发表于 2015-4-20 16:05 | 显示全部楼层 |阅读模式
价格:3000 元
本帖最后由 Simon21ic 于 2015-4-20 16:08 编辑

3000 /月,每天1-2个小时不等就行,周末可以多花一些时间。完成任务后,有一次性奖励,兼职人员决定如何分。
之前想外包的东西,后来自己和一个兼职人员弄了差不多了,后续还需要做一些移植和测试层层,还需要一个兼职人员。

wifi使用的是broadcom的BCM43362A2,硬件都有了,也可以跑起来了。
系统是事件驱动的PT线程,协作式多任务内核

这些就简单秀一些代码吧,有兴趣参与兼职的人联系我:
QQ: 4720020,我在上海,一开始可以提供一些培训



一些代码:DHCP部分:
  1. join->local_pt.user_data = &netif;
  2.         join->local_pt.sm = pt->sm;
  3.         join->local_pt.state = 0;
  4.         vsfsm_pt_entry(pt);
  5.         if (3 == param->argc)
  6.         {
  7.                 err = bcm_wifi_join(&join->local_pt, evt, &join->cur_status,
  8.                                                         param->argv[1], BCM_AUTHTYPE_WPA2_AES_PSK,
  9.                                                         (const uint8_t *)param->argv[2],
  10.                                                         strlen(param->argv[2]));
  11.         }
  12.         else
  13.         {
  14.                 err = bcm_wifi_join(&join->local_pt, evt, &join->cur_status,
  15.                                                         param->argv[1], BCM_AUTHTYPE_OPEN, NULL, 0);
  16.         }
  17.         if (err < 0)
  18.         {
  19.                 vsfshell_printf(output_pt, "Fail to join %s" VSFSHELL_LINEEND,
  20.                                                 param->argv[1]);
  21.                 goto handler_thread_end;
  22.         }
  23.         else if (join->cur_status != 0)
  24.         {
  25.                 // process join status change, non-block code here
  26.         }
  27.         if (err != 0) return err;
  28.         
  29.         vsfshell_printf(output_pt, "%s connected" VSFSHELL_LINEEND, param->argv[1]);
  30.         
  31.         // start dhcp
  32.         memset(&dhcp, 0, sizeof(dhcp));
  33.         vsfsm_sem_init(&dhcp.update_sem, 0, VSFSM_EVT_USER_LOCAL);
  34.         vsfip_dhcp_start(&netif, &dhcp);
  35.         if (vsfsm_sem_pend(&dhcp.update_sem, pt->sm))
  36.         {
  37.                 vsfsm_pt_wfe(pt, VSFSM_EVT_USER_LOCAL);
  38.         }
  39.         vsfshell_printf(output_pt, "dhcp update:" VSFSHELL_LINEEND);
  40.         vsfshell_printf(output_pt, "IP: %d:%d:%d:%d" VSFSHELL_LINEEND,
  41.                         netif.ipaddr.addr.s_addr_buf[0], netif.ipaddr.addr.s_addr_buf[1],
  42.                         netif.ipaddr.addr.s_addr_buf[2], netif.ipaddr.addr.s_addr_buf[3]);
  43.         vsfshell_printf(output_pt, "subnet: %d:%d:%d:%d" VSFSHELL_LINEEND,
  44.                         netif.netmask.addr.s_addr_buf[0], netif.netmask.addr.s_addr_buf[1],
  45.                         netif.netmask.addr.s_addr_buf[2], netif.netmask.addr.s_addr_buf[3]);
  46.         vsfshell_printf(output_pt, "gateway: %d:%d:%d:%d" VSFSHELL_LINEEND,
  47.                         netif.gateway.addr.s_addr_buf[0], netif.gateway.addr.s_addr_buf[1],
  48.                         netif.gateway.addr.s_addr_buf[2], netif.gateway.addr.s_addr_buf[3]);
  1.         // discover
  2.         dhcp->ipaddr.size = 0;
  3.         err = vsfip_dhcp_init_msg(dhcp, (uint8_t)VSFIP_DHCPOP_DISCOVER);
  4.         if (err < 0)
  5.         {
  6.                 goto cleanup;
  7.         }
  8.         vsfip_dhcp_end_opt(dhcp);
  9.         dhcp->sockaddr.sin_addr.addr.s_addr = 0xFFFFFFFF;
  10.         dhcp->caller_pt.state = 0;
  11.         vsfsm_pt_entry(pt);
  12.         err = vsfip_udp_send(&dhcp->caller_pt, evt, dhcp->so, &dhcp->sockaddr,
  13.                                                         dhcp->outbuffer);
  14.         if (err < 0) {vsfip_buffer_release(dhcp->outbuffer); goto cleanup;}
  15.         else if (err) return err;
  16.         vsfip_buffer_release(dhcp->outbuffer);
  17.         
  18.         // wait OFFER
  19.         dhcp->so->timeout_ms = 30000;
  20.         dhcp->sockaddr.sin_addr.addr.s_addr = VSFIP_IPADDR_ANY;
  21.         dhcp->caller_pt.state = 0;
  22.         vsfsm_pt_entry(pt);
  23.         err = vsfip_udp_recv(&dhcp->caller_pt, evt, dhcp->so, &dhcp->sockaddr,
  24.                                                         &dhcp->inbuffer);
  25.         if (err > 0) return err; else if (err < 0) goto cleanup; else
  26.         {
  27.                 // parse OFFER
  28.                 head = (struct vsfip_dhcphead_t *)dhcp->inbuffer->app.buffer;
  29.                 if ((head->op != VSFIP_DHCP_TOCLIENT) ||
  30.                         memcmp(head->chaddr, netif->macaddr.addr.s_addr_buf,
  31.                                         netif->macaddr.size) ||
  32.                         (head->xid != dhcp->xid))
  33.                 {
  34.                         vsfip_buffer_release(dhcp->inbuffer);
  35.                         goto cleanup;
  36.                 }
  37.                
  38.                 optlen = vsfip_dhcp_get_opt(dhcp->inbuffer, VSFIP_DHCPOPT_MSGTYPE,
  39.                                                                         &optptr);
  40.                 if ((optlen != VSFIP_DHCPOPT_MSGTYPE_LEN) ||
  41.                         (optptr[0] != VSFIP_DHCPOP_OFFER))
  42.                 {
  43.                         vsfip_buffer_release(dhcp->inbuffer);
  44.                         goto cleanup;
  45.                 }
  46.                
  47.                 dhcp->ipaddr.size = 4;
  48.                 dhcp->ipaddr.addr.s_addr = head->yiaddr;
  49.                 vsfip_buffer_release(dhcp->inbuffer);
  50.         }



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
hbyu 发表于 2015-4-20 17:31 | 显示全部楼层
fsmd 发表于 2015-4-21 18:57 | 显示全部楼层
对这方面有兴趣。QQ:2319441277
asppcb 发表于 2015-4-22 16:17 | 显示全部楼层
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:www.versaloon.com --- under construction

266

主题

2597

帖子

104

粉丝
快速回复 在线客服 返回列表 返回顶部