2 * Copyright (c) 2017 Samsung Electronics Co., Ltd.
4 * Contact: Jeonghoon Park <jh1979.park@samsung.com>
6 * Licensed under the Flora License, Version 1.1 (the License);
7 * you may not use this file except in compliance with the License.
8 * You may obtain a copy of the License at
10 * http://floralicense.org/license/
12 * Unless required by applicable law or agreed to in writing, software
13 * distributed under the License is distributed on an AS IS BASIS,
14 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 * See the License for the specific language governing permissions and
16 * limitations under the License.
22 #include <service_app.h>
32 typedef struct app_data_s {
35 unsigned int dir_state;
41 static void service_app_lang_changed(app_event_info_h event_info, void *user_data)
46 static void service_app_region_changed(app_event_info_h event_info, void *user_data)
51 static void service_app_low_battery(app_event_info_h event_info, void *user_data)
56 static void service_app_low_memory(app_event_info_h event_info, void *user_data)
61 static int __servo_motor_test(void)
63 resource_set_motor_driver_L298N_speed(MOTOR_ID_1, 0);
64 resource_set_motor_driver_L298N_speed(MOTOR_ID_2, 0);
65 resource_set_servo_motor_value(0, 400);
67 resource_set_servo_motor_value(0, 500);
69 resource_set_servo_motor_value(0, 450);
74 static void ___________control_motor(app_data *ad)
76 _D("control motor, state(%u), f_val(%u), r_val(%u)",
77 ad->dir_state, ad->f_value, ad->r_value);
80 switch (ad->dir_state) {
84 ad->dir_state = DIR_STATE_S;
85 resource_set_motor_driver_L298N_speed(MOTOR_ID_1, 0);
86 resource_set_motor_driver_L298N_speed(MOTOR_ID_2, 0);
88 ad->dir_state = DIR_STATE_B;
90 resource_set_motor_driver_L298N_speed(MOTOR_ID_1, -2000);
91 resource_set_motor_driver_L298N_speed(MOTOR_ID_2, -2000);
98 ad->dir_state = DIR_STATE_S;
99 resource_set_motor_driver_L298N_speed(MOTOR_ID_1, 0);
100 resource_set_motor_driver_L298N_speed(MOTOR_ID_2, 0);
102 ad->dir_state = DIR_STATE_F;
103 __servo_motor_test();
104 resource_set_motor_driver_L298N_speed(MOTOR_ID_1, 2000);
105 resource_set_motor_driver_L298N_speed(MOTOR_ID_2, 2000);
111 ad->dir_state = DIR_STATE_F;
112 __servo_motor_test();
113 resource_set_motor_driver_L298N_speed(MOTOR_ID_1, 2000);
114 resource_set_motor_driver_L298N_speed(MOTOR_ID_2, 2000);
115 } else if (!ad->r_value) {
116 ad->dir_state = DIR_STATE_B;
117 __servo_motor_test();
118 resource_set_motor_driver_L298N_speed(MOTOR_ID_1, -2000);
119 resource_set_motor_driver_L298N_speed(MOTOR_ID_2, -2000);
127 static void _front_ioa_sensor_changed_cb(unsigned int value, void *data)
131 _D("FRONT has obstacle!");
135 ___________control_motor(ad);
140 static void _back_ioa_sensor_changed_cb(unsigned int value, void *data)
144 _D("BACK has obstacle!");
148 ___________control_motor(ad);
153 static bool service_app_create(void *data)
158 * if you want to use default configuration,
159 * Do not need to call resource_set_motor_driver_L298N_configuration(),
162 ret = resource_set_motor_driver_L298N_configuration(MOTOR_ID_1, 19, 16, 5);
164 _E("resource_set_motor_driver_L298N_configuration()");
167 ret = resource_set_motor_driver_L298N_configuration(MOTOR_ID_2, 26, 20, 4);
169 _E("resource_set_motor_driver_L298N_configuration()");
176 static void service_app_control(app_control_h app_control, void *data)
181 /* set speed 0, to reduce delay of initializing motor driver */
182 resource_set_motor_driver_L298N_speed(MOTOR_ID_1, 0);
183 resource_set_motor_driver_L298N_speed(MOTOR_ID_2, 0);
185 resource_read_infrared_obstacle_avoidance_sensor(FRONT_PIN, &ad->f_value);
186 resource_read_infrared_obstacle_avoidance_sensor(REAR_PIN, &ad->r_value);
188 resource_set_infrared_obstacle_avoidance_sensor_interrupted_cb(FRONT_PIN,
189 _front_ioa_sensor_changed_cb, ad);
190 resource_set_infrared_obstacle_avoidance_sensor_interrupted_cb(REAR_PIN,
191 _back_ioa_sensor_changed_cb, ad);
193 ___________control_motor(ad);
198 static void service_app_terminate(void *data)
209 int main(int argc, char* argv[])
213 service_app_lifecycle_callback_s event_callback;
214 app_event_handler_h handlers[5] = {NULL, };
216 log_type_set(LOG_TYPE_DLOG);
218 ad = calloc(1, sizeof(app_data));
221 event_callback.create = service_app_create;
222 event_callback.terminate = service_app_terminate;
223 event_callback.app_control = service_app_control;
225 service_app_add_event_handler(&handlers[APP_EVENT_LOW_BATTERY],
226 APP_EVENT_LOW_BATTERY, service_app_low_battery, &ad);
227 service_app_add_event_handler(&handlers[APP_EVENT_LOW_MEMORY],
228 APP_EVENT_LOW_MEMORY, service_app_low_memory, &ad);
229 service_app_add_event_handler(&handlers[APP_EVENT_LANGUAGE_CHANGED],
230 APP_EVENT_LANGUAGE_CHANGED, service_app_lang_changed, &ad);
231 service_app_add_event_handler(&handlers[APP_EVENT_REGION_FORMAT_CHANGED],
232 APP_EVENT_REGION_FORMAT_CHANGED, service_app_region_changed, &ad);
234 ret = service_app_main(argc, argv, &event_callback, ad);
236 _E("failed to start app");