通过使用 socket ,发送和接受 msg . 实现与驱动层的通信。
那么,socket 的接受端是在哪里?
可以通过 grep -rn “SW_INTF_CNTR_RATE_CAL” 的方式,查找出相应的位置。
结果如下:
在 libjascmd/jas_cmd_cli_api.c 中:
发现了 case SW_INTF_CNTR_RATE_CAL
进入这个文件中, 就可以找到这个 socket 的接受端, 函数如下:
int jas_cmd_cli_serv_check_client(cmdStreamPTR streamP, char *buff, uint32_t length){
socketStreamPTR stream = (socketStreamPTR)streamP;
if(length == 0)
return JAS_SUCCESS;
if(strncmp(buff, "@@JAS_CMD_API", 12) == 0){
write(stream->socket, "Connected!", 10);
return JAS_SUCCESS;
}
if((length != sizeof(struct jas_cmd_api_cmd_msg)) || (strncmp(buff, "########", 8) != 0))
{
sys_err("%s, %d, Get Error Buffer: %s, length: %d(%d)\n", __func__, __LINE__, buff, length,
sizeof(struct jas_cmd_api_cmd_msg));
return JAS_FAILURE;
}
jas_cmd_cli_serv_run_cmd(streamP, buff);
return 0;
}
进入 jas_cmd_cli_serv_run_cmd
int jas_cmd_cli_serv_run_cmd(cmdStreamPTR streamP, char *buff){
struct jas_cmd_api_cmd_msg cmsg;
struct jas_cmd_cli_msg msg;
socketStreamPTR stream = (socketStreamPTR)streamP;
memcpy(&cmsg, buff, sizeof(cmsg));
memset(&msg, 0, sizeof(struct jas_cmd_cli_msg));
memcpy(msg.flag, "########", 8);
msg.ret = JAS_SUCCESS;
msg.len = sizeof(struct jas_cmd_cli_msg) - 8;
switch(cmsg.dev_type){
case JAS_CMD_FRAMER:
__jas_cmd_api_run_frm_cmd(cmsg, &msg);
break;
case JAS_CMD_SWITCH: