Use `URI` all caps in documentation
[iotivity.git] / resource / examples / ocf_light / BinarySwitchResource.h
1 /*
2  *-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
3  *
4  * Copyright 2018 Intel Corporation All Rights Reserved.
5  *
6  *-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
7  *
8  * Licensed under the Apache License, Version 2.0 (the "License");
9  * you may not use this file except in compliance with the License.
10  * You may obtain a copy of the License at
11  *
12  *      http://www.apache.org/licenses/LICENSE-2.0
13  *
14  * Unless required by applicable law or agreed to in writing, software
15  * distributed under the License is distributed on an "AS IS" BASIS,
16  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17  * See the License for the specific language governing permissions and
18  * limitations under the License.
19  *
20  *-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
21  */
22
23 #ifndef EXAMPLE_OCF_LIGHT_BINARYSWITCHRESOURCE_H_
24 #define EXAMPLE_OCF_LIGHT_BINARYSWITCHRESOURCE_H_
25
26 #include <vector>
27 #include <string>
28 #include "Resource.h"
29
30 #include "OCApi.h"
31 #include "OCRepresentation.h"
32
33 /**
34  * Class implements the OCF oic.r.switch.binary resource.
35  *
36  * This class is responsible for handling GET and POST requests sent from
37  * a client
38  */
39 class BinarySwitchResource : public Resource
40 {
41 public:
42     /**
43      * constructor
44      *
45      * @param resourceUri the URI the resource will be register with
46      */
47     BinarySwitchResource(std::string resourceUri = "/binaryswitch");
48
49     /**
50      * destructor
51      */
52     virtual ~BinarySwitchResource(void);
53
54     /**
55      * Register the resource with the server
56      *
57      * setting resourceProperty as OC_DISCOVERABLE will allow Discovery of this resource
58      * setting resourceProperty as OC_OBSERVABLE will allow observation
59      * setting resourceProperty as OC_DISCOVERABLE | OC_OBSERVABLE will allow both discovery and observation
60      * setting resourceProperty as OC_SECURE the resource supports access via secure endpoints
61      * setting resourceProperty as OC_NONSECURE the resource supports access via non-secure endpoints
62      * setting resourceProperty as OC_SECURE | OC_NONSECURE will allow access via secure and non-secure endpoints
63      *
64      * @param resourceProperty indicates the property of the resource. Defined in octypes.h.
65      */
66     OCStackResult registerResource(uint8_t resourceProperty = OC_DISCOVERABLE | OC_OBSERVABLE | OC_SECURE);
67
68     /**
69      * get the value of the binary switch
70      *
71      * @return value of the binary switch
72      */
73     bool getValue(void);
74
75     /**
76      * set the value of the binary switch
77      *
78      * @param newValue new binaryswitch value
79      */
80     void setValue(bool newValue);
81
82     /**
83      * Attempt to send out notifications to observing clients.
84      * If no value on the device has been changed the notification
85      * may not be sent.
86      *
87      * @return OC_STACK_OK on success
88      */
89     OCStackResult sendNotification(void);
90
91 private:
92
93     /**
94      * Make the payload for the retrieve function (e.g. GET)
95      *
96      * @param queries the query parameters for this call
97      */
98     OC::OCRepresentation get(OC::QueryParamsMap queries);
99
100     /**
101      * Parse the payload for the update function (e.g. POST)
102      *
103      * @param queries the query parameters for this call
104      * @param rep the response to get the property values from
105      *
106      * @return OCEntityHandlerResult OC_EH_OK on success or other result indicating failure.
107      */
108     OCEntityHandlerResult post(OC::QueryParamsMap queries, const OC::OCRepresentation& rep);
109
110     // resource types and interfaces as array..
111     std::string m_resourceUri;
112     std::string m_RESOURCE_TYPE[1]; // rt value (as an array)
113     std::string m_RESOURCE_INTERFACE[2]; // interface if (as an array)
114     std::string m_IF_UPDATE[3]; // updateble interfaces
115     OC::ObservationIds m_interestedObservers;
116
117     // member variables for path: /binaryswitch
118     std::vector<std::string>  m_var_value_rt;
119     std::string m_var_name_rt; // the name for the attribute
120
121     std::string m_var_value_n; // the value for the attribute
122     std::string m_var_name_n; // the name for the attribute
123
124
125     std::vector<std::string>  m_var_value_if;
126     std::string m_var_name_if; // the name for the attribute
127
128     bool m_var_value_value; // the value for the attribute
129     std::string m_var_name_value; // the name for the attribute
130
131 protected:
132     /**
133      * Check if the interface is an updatable interface.
134      *
135      * @param  interface_name the interface name used during the request
136      *
137      * @return true: updatable interface
138      */
139     bool in_updatable_interfaces(std::string interface_name)
140     {
141         for (size_t i = 0; i < (sizeof(m_IF_UPDATE)/sizeof(m_IF_UPDATE[0])); i++)
142         {
143             if (m_IF_UPDATE[i].compare(interface_name) == 0)
144                 return true;
145         }
146         return false;
147     }
148
149     /**
150      * The entity handler for this resource
151      *
152      * @param request the incoming request to handle
153      *
154      * @return OCEntityHandlerResult OC_EH_OK on success or other result indicating failure.
155      */
156     virtual OCEntityHandlerResult entityHandler(std::shared_ptr<OC::OCResourceRequest> request);
157 };
158
159 #endif /* EXAMPLE_OCF_LIGHT_BINARYSWITCHRESOURCE_H_ */