Denne ressursen kan endre tilstanden til en led via "POST coap://.../esp8266/led_gpio12″.
[code lang="c" highlight="12-17″] [code lang="c" highlight="12-17″]
static void SetLedstatePayload(CoAP_Message_t* pReq, CoAP_Message_t* pResp){
if(LedState) CoAP_SetPayload(pReq, pResp, "Led er på!", coap_strlen("Led er på!"), true);
else CoAP_SetPayload(pReq, pResp, "Led er av!", coap_strlen("Led er av!"), 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 Funnet = false;
for(pOpt =pReq->pOptionsList ; pOpt != NULL; pOpt = pOpt->next) {
switch(CoAP_FindUriQueryVal(pOpt,"",3,"on","off","tgl"))) { // ingen prefiks brukt
case 0: break; //ikke funnet
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(Funnet) {
SetLedstatePayload(pReq, pResp);
pause;
}
}
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* Opprett_Led_Ressurs() {
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 på GPIO12",Options, Res_ReqHandler, Res_NotifyHandler));
}
[/code] [/code