Пример #1
0
/* FogCloud message receive callback: handle cloud messages here
 */
OSStatus user_fogcloud_msg_handler(mico_Context_t* mico_context, 
                            const char* topic, const unsigned int topicLen,
                            unsigned char *inBuf, unsigned int inBufLen)
{
  user_log_trace();
  OSStatus err = kUnknownErr;
  mico_fogcloud_msg_t fogcloud_msg;
  int retCode = MSG_PROP_UNPROCESSED;
  
  if((NULL == mico_context) || (NULL == topic) || (0 == topicLen) ) {
    user_log("ERROR: mico_cloudmsg_dispatch params error, err=%d", err);
    return kParamErr;
  }
  
  fogcloud_msg.topic = topic;
  fogcloud_msg.topic_len = topicLen;
  fogcloud_msg.data = inBuf;
  fogcloud_msg.data_len = inBufLen;
  
  err = mico_fogcloud_msg_dispatch(mico_context, service_table, &fogcloud_msg, &retCode);    
  if(kNoErr != err){
    user_log("ERROR: mico_cloudmsg_dispatch error, err=%d", err);
  }
  else
  {
    if(MSG_PROP_WROTE == retCode){
      g_user_context.status.user_config_need_update = true;  // user params need update in flash
    }
  }
  
  return err;
}
Пример #2
0
/* FogCloud msg handle thread */
void user_cloud_msg_handle_thread(void* arg)
{
  OSStatus err = kUnknownErr;
  fogcloud_msg_t *recv_msg = NULL;
  mico_fogcloud_msg_t mico_fog_msg;
  int retCode = MSG_PROP_UNPROCESSED;
  mico_Context_t *mico_context = (mico_Context_t *)arg;
  require_action(mico_context, exit, err=kParamErr);
  
  while(1){
    mico_thread_msleep(100);  // in case of while (1)
    
    err = MicoFogCloudMsgRecv(mico_context, &recv_msg, 0);
    if(kNoErr == err){
      user_log("Msg recv: topic[%d]=[%.*s]\tdata[%d]=[%.*s]", 
               recv_msg->topic_len, recv_msg->topic_len, recv_msg->data, 
               recv_msg->data_len, recv_msg->data_len, recv_msg->data + recv_msg->topic_len);
      // msg structure format transfer
      mico_fog_msg.topic = (const char*)(recv_msg->data);
      mico_fog_msg.topic_len = recv_msg->topic_len;
      mico_fog_msg.data = recv_msg->data + recv_msg->topic_len;
      mico_fog_msg.data_len = recv_msg->data_len;
      err = mico_fogcloud_msg_dispatch(mico_context, service_table, &mico_fog_msg, &retCode);    
      if(kNoErr != err){
        user_log("ERROR: mico_cloudmsg_dispatch error, err=%d", err);
      }
      else{
      }
  
      // NOTE: msg memory must be free after been used.
      if(NULL != recv_msg){
        free(recv_msg);
        recv_msg = NULL;
      }
    }
  }
  
exit:
  user_log("ERROR: user_cloud_msg_handle_thread exit with err=%d", err);
  return;
}