Use `URI` all caps in documentation
[iotivity.git] / resource / examples / ocf_light / DimmingResource.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_DIMMINGRESOURCE_H_
24 #define EXAMPLE_OCF_LIGHT_DIMMINGRESOURCE_H_
25
26 #include <vector>
27 #include <string>
28 #include "Resource.h"
29
30 #include "OCApi.h"
31 #include "OCRepresentation.h"
32
33 class DimmingResource : public Resource
34 {
35 public:
36     /*
37      * constructor
38      *
39      * @param resourceUri the URI the resource will be register with
40      */
41     DimmingResource(std::string resourceUri = "/dimming");
42
43     /*
44      * destructor
45      */
46     virtual ~DimmingResource(void);
47
48     /*
49      * get the dimmingSetting
50      *
51      * @return the dimmingSetting
52      */
53     int getDimmingSetting(void);
54
55     /*
56      * set the dimmingSetting
57      *
58      * @param dimmingSetting a number between 0-100 to set the dimming
59      */
60     void setDimmingSetting(int dimmingSetting);
61
62     /*
63      * Attempt to send out notifications to observing clients.
64      * If no value on the device has been changed the notification
65      * may not be sent.
66      *
67      * @return OC_STACK_OK on success
68      */
69     OCStackResult sendNotification(void);
70
71     /*
72      * Register the resource with the server
73      *
74      * setting resourceProperty as OC_DISCOVERABLE will allow Discovery of this resource
75      * setting resourceProperty as OC_OBSERVABLE will allow observation
76      * setting resourceProperty as OC_DISCOVERABLE | OC_OBSERVABLE will allow both discovery and observation
77      * setting resourceProperty as OC_SECURE the resource supports access via secure endpoints
78      * setting resourceProperty as OC_NONSECURE the resource supports access via non-secure endpoints
79      * setting resourceProperty as OC_SECURE | OC_NONSECURE will allow access via secure and non-secure endpoints
80      *
81      * @param resourceProperty indicates the property of the resource. Defined in octypes.h.
82      */
83     OCStackResult registerResource(uint8_t resourceProperty = OC_DISCOVERABLE | OC_OBSERVABLE | OC_SECURE);
84 private:
85
86     /*
87      * Make the payload for the retrieve function (e.g. GET)
88      *
89      * @param queries  the query parameters for this call
90      *
91      * @return OCRepresentaiton with the dimming resource parameters assigned.
92      */
93     OC::OCRepresentation get(OC::QueryParamsMap queries);
94
95     /*
96      * Parse the payload for the update function (e.g. POST)
97      *
98      * @param queries  the query parameters for this call
99      * @param rep  the response to get the property values from
100      *
101      * @return OCEntityHandlerResult OC_EH_OK on success or other result indicating failure.
102      */
103     OCEntityHandlerResult post(OC::QueryParamsMap queries, const OC::OCRepresentation& rep);
104
105     // resource types and interfaces as array..
106     std::string m_resourceUri;
107     std::string m_RESOURCE_TYPE[1]; // rt value (as an array)
108     std::string m_RESOURCE_INTERFACE[2]; // interface if (as an array)
109     std::string m_IF_UPDATE[3]; // updatable interfaces
110     OC::ObservationIds m_interestedObservers;
111
112     // member variables for path: /dimming
113     int m_var_value_dimmingSetting; // the value for the attribute
114     std::string m_var_name_dimmingSetting; // the name for the attribute
115
116     std::string m_var_value_n; // the value for the attribute
117     std::string m_var_name_n; // the name for the attribute
118
119
120     std::vector<std::string>  m_var_value_if;
121     std::string m_var_name_if; // the name for the attribute
122
123
124     std::vector<std::string>  m_var_value_rt;
125     std::string m_var_name_rt; // the name for the attribute
126
127 protected:
128     /*
129      * Check if the interface is an updatable interface.
130      *
131      * @param  interface_name the interface name used during the request
132      *
133      * @return true: updatable interface
134      */
135     bool in_updatable_interfaces(std::string interface_name)
136     {
137         for (size_t i = 0; i < (sizeof(m_IF_UPDATE)/sizeof(m_IF_UPDATE[0])); i++)
138         {
139             if (m_IF_UPDATE[i].compare(interface_name) == 0)
140                 return true;
141         }
142         return false;
143     }
144
145     /*
146      * The entity handler for this resource
147      *
148      * @param request the incoming request to handle
149      *
150      * @return OCEntityHandlerResult OC_EH_OK on success or other result indicating failure.
151      */
152     virtual OCEntityHandlerResult entityHandler(std::shared_ptr<OC::OCResourceRequest> request);
153 };
154
155 #endif /* EXAMPLE_OCF_LIGHT_DIMMINGRESOURCE_H_ */