all: driver module stop2 pro1 pro2

#driver: pwm_enc_module enc_stop both pwm encoder valve psd
driver: enc_stop both pwm encoder valve psd

exam: forward back duty duty2 circle go_itw goback pwm_rotate vtest psd_test mpsd mpsd2 circle2 rev feedback stop2 enc_test

pro: move2 move3 move4 trace2 return initialize post_get1 exam_pre

module: module1 module2
#module: move cen_post left_post orbit turn trace lead distance get get_charge set10cm remain_orbit s_orbit surround_post side_post wlsearch cdown clear_wl

module1: move orbit trace distance set10cm remain_orbit s_orbit surround_post side_post

module2: cen_post left_post turn lead get get_charge wlsearch cdown clear_wl victory

include rtl.mk

# INCLUDE = -I/usr/src/rtlinux/include
# CFLAGS = -O2 -Wall -I/lib/modules/'uname -r'/build/include
# WALL = -O2 -Wall
# ENC  = both.o pwm.o encoder.o
# VS   = valve.o psd.o 
# EXAM = valve.o psd.o move.o side_post.o cen_post.o
#        left_post.o orbit.o s_orbito surround_post.o
#        wlsearch.o turn.o trace.o lead.o distance.o
#        get.o get_charge.oset10cm.o remain_orbit.o
#PRO = forward back duty duty2 circle go_itw goback
#      pwm_rotate vtest psd_test mps mpsd2 circle2
#      rev feedback stop2 enc_test move2 move3 move4
#      trace2 return initialize post_get1 exam_pre
#HEAD = def_itw.h def_pwm.h def_psd.h def_lcd.h def_etc.h def_cut.h

#DRIVER
pwm_enc_module: pwm_enc_module.c pwm_enc.h
	$(CC) ${INCLUDE} ${CFLAGS} -c pwm_enc_module.c
	cp pwm_enc_module.o ../module

enc_stop: enc_stop.c pwm_enc.h
	$(CC) ${INCLUDE} ${CFLAGS} -c enc_stop.c

both: both.c pwm_enc.h
	$(CC) ${WALL} -c both.c

pwm: pwm.c pwm_enc.h
	$(CC) ${WALL} -c pwm.c

encoder: encoder.c pwm_enc.h
	$(CC) ${WALL} -c encoder.c

enc_test: enc_test.c ${ENC} pwm_enc.h
	$(CC) ${INCLUDE} ${WALL} ${ENC} enc_test.c -o enc_test

pwm_rotate: pwm_rotate.c both.o pwm.o pwm_enc.h
	$(CC) ${INCLUDE} ${WALL} both.o pwm.o pwm_rotate.c -o pwm_rotate

enc-test:
	-insmod pwm_enc_module.o
	@./enc_test

stop:
	-rmmod pwm_enc_module
	@echo "Now remove pwm_enc_module"
	-insmod pwm_enc_stop.o
	@echo "And insert enc_stop.o"
	@echo "Motor stop!!"

#VALVE MODULE
valve: valve.c valve2.c
	$(CC) ${WALL} -c valve.c
	$(CC) ${WALL} -c valve2.c
#	cp valve2.o ../module

vtest: vtest.c valve.o valve2.o
	$(CC) ${WALL} vtest.c -o vtest valve.o valve2.o 


#PSD MODULE
psd: psd.c psd.h
	$(CC) ${WALL} -c psd.c

psd_test: psd_test.c psd.o psd.h
	$(CC) ${WALL} psd.o psd_test.c -o psd_test


clean:
#	rm -f *.o enc_test pwm_rotate forward back duty duty2 circle rev return return feedback go_itw goback move2 move3 trace2 mpsd mpsd2 stop2 vtest psd_test exam_pre
	rm -f *.o
	rm -f ${PRO}

rmmod:
	-rmmod pwm_enc_module
	-rmmod pwm_enc_mod
	-rmmod pwm_enc_stop
	-rmmod rtl_fifo
	-rmmod rtl_posixio
	-rmmod rtl_sched
	-rmmod rtl_time
	@echo "Now remove all objects"


#EXAMINATION
forward: forward.c ${ENC}
	$(CC) ${INCLUDE} ${WALL} ${ENC} forward.c -o forward

back: back.c  ${ENC}
	$(CC) ${INCLUDE} ${WALL} ${ENC} back.c -o back

duty: duty.c ${ENC}
	$(CC) ${INCLUDE} ${WALL} ${ENC} duty.c -o duty 

duty2: duty2.c ${ENC}
	$(CC) ${INCLUDE} ${WALL} ${ENC} duty2.c -o duty2 

circle: circle.c ${ENC}
	$(CC) ${INCLUDE} ${WALL} ${ENC} circle.c -o circle

rev: rev.c ${ENC} psd.o
	$(CC) ${INCLUDE} ${WALL} ${ENC} psd.o rev.c -o rev

feedback: feedback.c ${ENC}
	$(CC) ${INCLUDE} ${WALL} ${ENC} feedback.c -o feedback 

go_itw: go_itw.c ${ENC}
	$(CC) ${INCLUDE} ${WALL} ${ENC} go_itw.c -o go_itw 

goback: goback.c ${ENC}
	$(CC) ${INCLUDE} ${WALL} ${ENC} goback.c -o goback 

circle2: circle2.c ${ENC} psd.o
	$(CC) ${INCLUDE} ${WALL} ${ENC} psd.o circle2.c -o circle2

mpsd: mpsd.c ${ENC} ${VS}
	$(CC) ${INCLUDE} ${WALL} ${ENC} ${VS} mpsd.c -o mpsd 

mpsd2: mpsd2.c ${ENC} ${VS}
	$(CC) ${INCLUDE} ${WALL} ${ENC} ${VS} mpsd2.c -o mpsd2 

stop2: stop2.c ${ENC} ${VS}
	$(CC) ${INCLUDE} ${WALL} both.o pwm.o stop2.c -o stop2 


#TEST_ACTION
move2: move2.c ${ENC} ${VS} move.o turn.o
	$(CC) ${INCLUDE} ${WALL} ${ENC} ${VS} move.o turn.o move2.c -o move2

move3: move3.c ${ENC} ${EXAM}
	$(CC) ${INCLUDE} ${WALL} ${ENC} ${EXAM} move3.c -o move3

move4: move4.c ${ENC} ${EXAM}
	$(CC) ${INCLUDE} ${WALL} ${ENC} ${EXAM} move4.c -o move4 

trace2: trace2.c ${ENC} ${VS}
	$(CC) ${INCLUDE} ${WALL} ${ENC} ${VS} trace.o trace2.c -o trace

post_get1: post_get1.c ${ENC} ${EXAM}
	$(CC) ${INCLUDE} ${WALL} ${ENC} ${EXAM} post_get1.c -o post_get1

initialize: initialize.c ${ENC} ${VS} move.o distance.o wlsearch.o trace.o turn.o
	$(CC) ${INCLUDE} ${WALL} ${ENC} ${VS} move.o distance.o wlsearch.o trace.o turn.o initialize.c -o initialize

return: return.c ${ENC} ${VS} move.o turn.o get.o 
	$(CC) ${INCLUDE} ${WALL} ${ENC} ${VS} move.o turn.o get.o return.c -o return

exam_pre: exam_pre.c ${EXAM}
	$(CC) ${INCLUDE} ${WALL} ${ENC} ${EXAM} exam_pre.c -o exam_pre 


#MODULE
move: move.c ${HEAD}
	$(CC) ${WALL} -c move.c

side_post: side_post.c ${HEAD}
	$(CC) ${WALL} -c side_post.c

cen_post: cen_post.c ${HEAD}
	$(CC) ${WALL} -c cen_post.c

left_post: left_post.c ${HEAD}
	$(CC) ${WALL} -c left_post.c

orbit: orbit.c ${HEAD}
	$(CC) ${WALL} -c orbit.c

surround_post: surround_post.c ${HEAD}
	$(CC) ${WALL} -c surround_post.c

wlsearch: wlsearch.c ${HEAD}
	$(CC) ${WALL} -c wlsearch.c

turn: turn.c ${HEAD}
	$(CC) ${WALL} -c turn.c

trace: trace.c ${HEAD}
	$(CC) ${WALL} -c trace.c

lead: lead.c ${HEAD}
	$(CC) ${WALL} -c lead.c

distance: distance.c ${HEAD}
	$(CC) ${WALL} -c distance.c

get: get.c def_val.h ${HEAD}
	$(CC) ${WALL} -c get.c

get_charge: get_charge.c ${HEAD}
	$(CC) ${WALL} -c get_charge.c

s_orbit: s_orbit.c ${HEAD}
	$(CC) ${WALL} -c s_orbit.c

set10cm: set10cm.c ${HEAD}
	$(CC) ${WALL} -c set10cm.c

remain_orbit: remain_orbit.c ${HEAD}
	$(CC) ${WALL} -c remain_orbit.c

cdown: cdown.c ${HEAD}
	$(CC) ${WALL} -c cdown.c

clear_wl: clear_wl.c ${HEAD}
	$(CC) ${WALL} -c clear_wl.c

victory: victory.c ${HEAD}
	$(CC) ${WALL} -c victory.c

