MCPcopy Create free account
hub / github.com/RT-Thread/rt-thread / _chn0_actor

Function _chn0_actor

components/vbus/vbus.c:674–893  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

672}
673
674static int _chn0_actor(unsigned char *dp, size_t dsize)
675{
676 if (*dp != RT_VBUS_CHN0_CMD_SUSPEND && *dp != RT_VBUS_CHN0_CMD_RESUME)
677 vbus_verbose("local <-- %s\n", dump_cmd_pkt(dp, dsize));
678
679 switch (*dp)
680 {
681 case RT_VBUS_CHN0_CMD_ENABLE:
682 {
683 int i, chnr;
684 rt_err_t err;
685 unsigned char *resp;
686
687 i = _sess_find(dp+1, SESSIOM_LISTENING);
688 if (i == ARRAY_SIZE(_sess))
689 {
690 _chn0_nak(dsize, dp);
691 break;
692 }
693
694 for (chnr = 0; chnr < ARRAY_SIZE(_chn_status); chnr++)
695 {
696 if (_chn_status[chnr] == RT_VBUS_CHN_ST_AVAILABLE)
697 break;
698 }
699 if (chnr == ARRAY_SIZE(_chn_status))
700 {
701 _chn0_nak(dsize, dp);
702 break;
703 }
704
705 resp = rt_malloc(dsize + 1);
706 if (!resp)
707 break;
708
709 *resp = RT_VBUS_CHN0_CMD_SET;
710 rt_memcpy(resp+1, dp+1, dsize-1);
711 resp[dsize] = chnr;
712
713 rt_vbus_set_recv_wm(chnr, _sess[i].req->recv_wm.low, _sess[i].req->recv_wm.high);
714 rt_vbus_set_post_wm(chnr, _sess[i].req->post_wm.low, _sess[i].req->post_wm.high);
715
716 vbus_verbose("%s --> remote\n", dump_cmd_pkt(resp, dsize+1));
717 err = _chn0_post(resp, dsize+1, RT_WAITING_FOREVER);
718
719 if (err == RT_EOK)
720 {
721 _sess[i].st = SESSIOM_ESTABLISHING;
722 vbus_debug("set sess %d st: %s\n", i,
723 rt_vbus_sess_st2str[_sess[i].st]);
724 _sess[i].chnr = chnr;
725 _chn_status[chnr] = RT_VBUS_CHN_ST_ESTABLISHING;
726 }
727 rt_free(resp);
728 }
729 break;
730 case RT_VBUS_CHN0_CMD_SET:
731 {

Callers 1

_bus_in_entryFunction · 0.85

Calls 15

dump_cmd_pktFunction · 0.85
_sess_findFunction · 0.85
_chn0_nakFunction · 0.85
rt_mallocFunction · 0.85
rt_memcpyFunction · 0.85
rt_vbus_set_recv_wmFunction · 0.85
rt_vbus_set_post_wmFunction · 0.85
_chn0_postFunction · 0.85
rt_freeFunction · 0.85
rt_strlenFunction · 0.85
_chn0_ackFunction · 0.85
rt_completion_doneFunction · 0.85

Tested by

no test coverage detected