工具/软件:Code Composer Studio
尊敬的先生:
我对 CC3220器件的内部 HTTP 服务器有疑问。 我将按照开箱即用示例进行参考。 正如我在示例中看到的、这里有一个用于器件的 POST 和 Get 方法、我还需要一个 POST 和 Get 方法来获取信息和配置器件。
在这里、我可以按预期运行 GET 方法、并进行响应、但在 POST 方法中、我可以获得有效负载、但无法使用 application/json 将响应发送回客户端。
在这里、我使用的是根据发件箱示例准备元数据、也可以根据示例中的说明使用@sl_NetAppSend API 发送这些元数据。
执行 POST 方法时需要响应,但无法重新生成。
请务必仔细阅读。
在这里、我的示例是发送响应
uint16_t prepareGetMetadata (int32_t parsingStatus、uint32_t contentLen、HttpContentTypeList ContentTypeID)
{
char * contentType;
uint8_t *pMetadata;
uint16_t metadataLen;
ContentType = g_ContentTypes [ContentTypeID].contentTypeText;
memset ((uint8_t*)&gMetadataBuffer、0x00、sizeof (gMetadataBuffer));
pMetadata = gMetadataBuffer;
/* http 状态*/
pMetadata =(uint8_t) sl_netapp_request_metadata_type_status;
pMetadata++;
*(uint16_t*) pMetadata =(uint16_t) 2;
pMetadata += 2;
如果(parsingStatus < 0)
{
*(uint16_t*) pMetadata =(uint16_t) sl_NetApp_HTTP_RESPONSE_404_Not _found;
}
其他
{
*(uint16_t*) pMetadata =(uint16_t) sl_NetApp_HTTP_RESPONSE_200_OK;
}
pMetadata += 2;
/*内容类型*/
pMetadata =(uint8_t) sl_netapp_request_metadata_type_http_content_type;
pMetadata++;
(*(uint16_t*) pMetadata)=(uint16_t) strlen ((const char*) contentType);
pMetadata += 2;
sl_memcpy (pMetadata、contentType、strlen ((const char*) contentType));
pMetadata += strlen((const char*) contentType);
/*内容长度*/
pMetadata = sl_NetApp_Request_metadata_type_http_content_LEN;
pMetadata++;
*(uint16_t*) pMetadata =(uint16_t) 4;
pMetadata += 2;
*(uint32_t*) pMetadata =(uint32_t) contentLen;
metadataLen = 5 + 7 + strlen ((const char*) contentType)+ 3;
return (metadataLen);
}
uint16_t preparePostMetadata (int32_t parsingStatus)
{
uint8_t *pMetadata;
uint16_t metadataLen;
memset ((uint8_t*)&gMetadataBuffer、0x00、sizeof (gMetadataBuffer));
pMetadata = gMetadataBuffer;
/* http 状态*/
pMetadata =(uint8_t) sl_netapp_request_metadata_type_status;
pMetadata++;
*(uint16_t *) pMetadata =(uint16_t) 2;
pMetadata += 2;
if (parsingStatus < 0)
{
*(uint16_t *) pMetadata =(uint16_t) sl_NetApp_HTTP_RESPONSE_404_Not _found;
}
其他
{
/*不需要内容,因此浏览器将保持在同一页上*/
*(uint16_t *) pMetadata = sl_NetApp_HTTP_RESPONSE_200_OK;//(uint16_t) sl_NetApp_HTTP_RESPONSE_204_OK_NO_content;
}
pMetadata += 2;
metadataLen = 5;
return (metadataLen);
}
//如果有效载荷已创建
if (状态>0)
{
//获取有效载荷长度
len = strlen((const char*)gPayloadBuffer);
if (netAppRequest->Type = sl_NetApp_Request_HTTP_Get)
{
metadataLen = prepareGetMetadata (0、len、HttpContentTypeList_ApplicationJson);
}
其他
{
metadataLen = preparePostMetadata (status);
}
sl_NetAppSend (netAppRequest->Handle、metadataLen、gMetadataBuffer、(sl_NetApp_Request_Response_FLAGS_Continuation | SL_NetApp_Request_Response_FLAGS_metadata);
/*标记为最后一个句段*/
sl_NetAppSend (netAppRequest->handle、len、gPayloadBuffer、0);
WMLogInfo (debug_log、"用%d 发送有效载荷缓冲区"、len);
}