This resource can change the state of a led via “POST coap://…/esp8266/led_gpio12″.
[code lang=”c” highlight=”12-17″]
static void SetLedstatePayload(CoAP_Message_t* pReq, CoAP_Message_t* pResp){
if(LedState) CoAP_SetPayload(pReq, pResp, “Led is on!”, coap_strlen(“Led is on!”), true);
else CoAP_SetPayload(pReq, pResp, “Led is off!”, coap_strlen(“Led is off!”), true);
}
static CoAP_HandlerResult_t Res_ReqHandler(CoAP_Message_t* pReq, CoAP_Message_t* pResp) {
if(pReq->Code == REQ_POST) {
CoAP_option_t* pOpt;
bool Found = false;
for(pOpt =pReq->pOptionsList ; pOpt != NULL; pOpt = pOpt->next) {
switch(CoAP_FindUriQueryVal(pOpt,””,3, “on”,”off”, “tgl”)) { // no prefix used
case 0: break; //not found
case 1: led(true); Found=true; break; //found “on”
case 2: led(false); Found=true; break; //found “off”
case 3: led(!LedState); Found=true; break; //found “tgl”
}
if(Found) {
SetLedstatePayload(pReq, pResp);
break;
}
}
if(!Found){
char info[] = {“usage: coap://…/led_gpio12?on (or “off”, “tgl”)”};
CoAP_SetPayload(pReq, pResp, info, coap_strlen(info), true);
pResp->Code=RESP_ERROR_BAD_REQUEST_4_00;
}
}else if(pReq->Code == REQ_GET){
SetLedstatePayload(pReq, pResp);
}
return HANDLER_OK;
}
static CoAP_HandlerResult_t Res_NotifyHandler(CoAP_Observer_t* pObserver, CoAP_Message_t* pResp) {
SetLedstatePayload(NULL, pResp);
return HANDLER_OK;
}
CoAP_Res_t* Create_Led_Resource() {
CoAP_ResOpts_t Options = {.Cf = COAP_CF_TEXT_PLAIN, .Flags = RES_OPT_POST | RES_OPT_GET};
return (pLed_Res=CoAP_CreateResource(“esp8266/led_gpio12”, “LED at GPIO12”,Options, Res_ReqHandler, Res_NotifyHandler));
}
[/code]