diff --git a/car_fmw/src/Debug.kt b/car_fmw/src/Debug.kt new file mode 100644 index 00000000000..0f68d31936c --- /dev/null +++ b/car_fmw/src/Debug.kt @@ -0,0 +1,33 @@ + +object Debug { + var PROGRAM_DURATION = 1000 + + fun echoUsbTest() { + val command = Connection.receiveInt() + Connection.sendInt(command) + Time.wait(PROGRAM_DURATION) + } + + fun simpleRouteTest() { + Engine.forward() + Leds.blink() + Time.wait(PROGRAM_DURATION) + + Engine.right() + Leds.blink() + Time.wait(PROGRAM_DURATION) + + Engine.backward() + Leds.blink() + Time.wait(PROGRAM_DURATION) + + Engine.left() + Leds.blink() + Time.wait(PROGRAM_DURATION) + } + + fun blinkTest() { + Leds.blink() + Time.wait(PROGRAM_DURATION) + } +} \ No newline at end of file diff --git a/car_fmw/src/blink.kt b/car_fmw/src/blink.kt deleted file mode 100644 index 6c9de6e8f9a..00000000000 --- a/car_fmw/src/blink.kt +++ /dev/null @@ -1,7 +0,0 @@ - -fun blinkProgramm() { - while (true) { - blink() - wait(PROGRAM_DURATION) - } -} \ No newline at end of file diff --git a/car_fmw/src/echo.kt b/car_fmw/src/echo.kt index 64ed1a0948d..bc924067a31 100644 --- a/car_fmw/src/echo.kt +++ b/car_fmw/src/echo.kt @@ -1,31 +1,19 @@ -fun echoUsb() { - clear_buffer() - while (true) { - val command = receive_int() - send_int(command) - - blink() - wait(PROGRAM_DURATION) - } - -} fun echoProto() { - clear_buffer() - set_active_heap(MEMORY_DYNAMIC_HEAP) + Memory.setHeap(Memory.DYNAMIC_HEAP) while (true) { val route = readRoute() - blink() + Leds.blink() go(route) - blink() - wait(PROGRAM_DURATION) - clean_dynamic_heap() + Leds.blink() + Time.wait(1000) + Memory.cleanDynamicHeap() } } fun readRoute(): RouteRequest { - val buffer = receiveByteArray() + val buffer = Connection.receiveByteArray() val stream = CodedInputStream(buffer) val result = RouteRequest.BuilderRouteRequest(IntArray(0), IntArray(0)).parseFrom(stream).build() @@ -39,6 +27,6 @@ fun writeRoute(route: RouteRequest) { route.writeTo(stream) - sendByteArray(buffer) + Connection.sendByteArray(buffer) } diff --git a/car_fmw/src/include/Button.kt b/car_fmw/src/include/Button.kt new file mode 100644 index 00000000000..82103cddf20 --- /dev/null +++ b/car_fmw/src/include/Button.kt @@ -0,0 +1,11 @@ +external fun car_user_btn_init(handler: () -> Unit) +external fun car_user_btn_is_pushed(): Boolean +external fun EXTI0_IRQHandler() + +object Button { + fun setCallback(handler: () -> Unit) { + car_user_btn_init(handler) + } + + fun isPushed(): Boolean = car_user_btn_is_pushed() +} \ No newline at end of file diff --git a/car_fmw/src/include/Connection.kt b/car_fmw/src/include/Connection.kt new file mode 100644 index 00000000000..f93e3ad1d96 --- /dev/null +++ b/car_fmw/src/include/Connection.kt @@ -0,0 +1,44 @@ + +external fun car_conn_init() +external fun car_conn_rcv_buf_clear() + +external fun car_conn_snd_byte(b: Byte) +external fun car_conn_snd_int(i: Int) +external fun car_conn_snd_buf(size: Int, pointer: Int) + +external fun car_conn_rcv_byte(): Byte +external fun car_conn_rcv_int(): Int +external fun car_conn_rcv_buf(size: Int, pointer: Int) + +object Connection { + fun init() { + car_conn_init() + } + + fun clearBuffer() { + car_conn_rcv_buf_clear() + } + + fun receiveInt(): Int = car_conn_rcv_int() + fun receiveByte(): Byte = car_conn_rcv_byte() + + fun sendInt(n: Int) { + car_conn_snd_int(n) + } + + fun sendByte(b: Byte) { + car_conn_snd_byte(b) + } + + fun receiveByteArray(): ByteArray { + val result = ByteArray(car_conn_rcv_int()) + car_conn_rcv_buf(result.size, result.data) + + return result + } + + fun sendByteArray(array: ByteArray) { + car_conn_snd_int(array.size) + car_conn_rcv_buf(array.size, array.data) + } +} diff --git a/car_fmw/src/include/Engine.kt b/car_fmw/src/include/Engine.kt new file mode 100644 index 00000000000..18d7074b59e --- /dev/null +++ b/car_fmw/src/include/Engine.kt @@ -0,0 +1,33 @@ +external fun car_engine_init() + +external fun car_engine_stop() +external fun car_engine_forward() +external fun car_engine_backward() +external fun car_engine_turn_left() +external fun car_engine_turn_right() + +object Engine { + fun init() { + car_engine_init() + } + + fun stop() { + car_engine_stop() + } + + fun forward() { + car_engine_forward() + } + + fun backward() { + car_engine_backward() + } + + fun left() { + car_engine_turn_left() + } + + fun right() { + car_engine_turn_right() + } +} \ No newline at end of file diff --git a/car_fmw/src/include/Leds.kt b/car_fmw/src/include/Leds.kt new file mode 100644 index 00000000000..a6af92a1dd6 --- /dev/null +++ b/car_fmw/src/include/Leds.kt @@ -0,0 +1,36 @@ + +external fun car_leds_init() +external fun car_leds_clear_all() +external fun car_led_set(led: Int, on: Boolean) + +object Leds { + val BLINK_DURATION: Int = 1000 + val GREEN = 0 + val ORANGE = 1 + val RED = 2 + val BLUE = 3 + + fun init() { + car_leds_init() + } + + fun set(led: Int, on: Boolean) { + car_led_set(led, on) + } + + fun switchAll(on: Boolean) { + car_led_set(GREEN, on) + car_led_set(BLUE, on) + car_led_set(RED, on) + car_led_set(ORANGE, on) + } + + fun blink() { + switchAll(true) + Time.wait(BLINK_DURATION) + switchAll(false) + } +} + + + diff --git a/car_fmw/src/include/Memory.kt b/car_fmw/src/include/Memory.kt new file mode 100644 index 00000000000..d1576835ee7 --- /dev/null +++ b/car_fmw/src/include/Memory.kt @@ -0,0 +1,16 @@ + +external fun set_active_heap(heap: Int) +external fun clean_dynamic_heap() + +object Memory { + val STATIC_HEAP = 0 + val DYNAMIC_HEAP = 1 + + fun setHeap(heap: Int) { + set_active_heap(heap) + } + + fun cleanDynamicHeap() { + clean_dynamic_heap() + } +} diff --git a/car_fmw/src/include/Time.kt b/car_fmw/src/include/Time.kt new file mode 100644 index 00000000000..c9d9e9252b7 --- /dev/null +++ b/car_fmw/src/include/Time.kt @@ -0,0 +1,16 @@ + +external fun car_time_init() +external fun car_time_wait(msec: Int) +external fun car_time_get_timestamp(): Int + +object Time { + fun init() { + car_time_init() + } + + fun wait(msec: Int) { + car_time_wait(msec) + } + + fun getTimestamp(): Int = car_time_get_timestamp() +} \ No newline at end of file diff --git a/car_fmw/src/include/communication.kt b/car_fmw/src/include/communication.kt deleted file mode 100644 index 20be4d5f691..00000000000 --- a/car_fmw/src/include/communication.kt +++ /dev/null @@ -1,20 +0,0 @@ - -external fun VCP_init() -external fun clear_buffer() - -external fun send_int(i: Int) -external fun send_buffer(size: Int, pointer: Int) - -external fun receive_int(): Int -external fun receive_buffer(size: Int, pointer: Int) - -fun receiveByteArray(): ByteArray { - val result = ByteArray(receive_int()) - receive_buffer(result.size, result.data) - - return result -} - -fun sendByteArray(arr: ByteArray) { - send_buffer(arr.size, arr.data) -} \ No newline at end of file diff --git a/car_fmw/src/include/engine.kt b/car_fmw/src/include/engine.kt deleted file mode 100644 index 560e0021665..00000000000 --- a/car_fmw/src/include/engine.kt +++ /dev/null @@ -1,8 +0,0 @@ - -external fun engine_init() - -external fun engine_stop() -external fun engine_forward() -external fun engine_backward() -external fun engine_turn_left() -external fun engine_turn_right() diff --git a/car_fmw/src/include/general.kt b/car_fmw/src/include/general.kt deleted file mode 100644 index 096cce1d623..00000000000 --- a/car_fmw/src/include/general.kt +++ /dev/null @@ -1,8 +0,0 @@ - -fun init() { - time_init() - engine_init() - leds_init() - VCP_init() - clear_buffer() -} diff --git a/car_fmw/src/include/leds.kt b/car_fmw/src/include/leds.kt deleted file mode 100644 index f9bc4d4f475..00000000000 --- a/car_fmw/src/include/leds.kt +++ /dev/null @@ -1,31 +0,0 @@ - -external fun leds_init() -external fun leds_clear_all() -external fun led_set(led: Int, on: Boolean) - -val LED_GREEN = 0 -val LED_ORANGE = 1 -val LED_RED = 2 -val LED_BLUE = 3 - -val BLINK_DURATION: Int = 1000 - -fun led_on() { - led_set(LED_GREEN, true) - led_set(LED_BLUE, true) - led_set(LED_RED, true) - led_set(LED_ORANGE, true) -} - -fun led_off() { - led_set(LED_GREEN, false) - led_set(LED_BLUE, false) - led_set(LED_RED, false) - led_set(LED_ORANGE, false) -} - -fun blink() { - led_on() - wait(BLINK_DURATION) - led_off() -} diff --git a/car_fmw/src/include/memory.kt b/car_fmw/src/include/memory.kt deleted file mode 100644 index 80a2088c0b8..00000000000 --- a/car_fmw/src/include/memory.kt +++ /dev/null @@ -1,6 +0,0 @@ - -val MEMORY_STATIC_HEAP = 0 -val MEMORY_DYNAMIC_HEAP = 1 - -external fun set_active_heap(heap: Int) -external fun clean_dynamic_heap() \ No newline at end of file diff --git a/car_fmw/src/include/time.kt b/car_fmw/src/include/time.kt deleted file mode 100644 index 0a16d98a546..00000000000 --- a/car_fmw/src/include/time.kt +++ /dev/null @@ -1,4 +0,0 @@ - -external fun time_init() - -external fun wait(msec: Int) diff --git a/car_fmw/src/include/user_btn.kt b/car_fmw/src/include/user_btn.kt deleted file mode 100644 index c44be8b814d..00000000000 --- a/car_fmw/src/include/user_btn.kt +++ /dev/null @@ -1,4 +0,0 @@ - -external fun user_btn_init(handler: () -> Unit) -external fun user_btn_is_pushed(): Boolean -external fun EXTI0_IRQHandler() diff --git a/car_fmw/src/main.kt b/car_fmw/src/main.kt index ff30de5b00b..f59bc1b4f63 100644 --- a/car_fmw/src/main.kt +++ b/car_fmw/src/main.kt @@ -1,20 +1,11 @@ - -val PROGRAM_DURATION: Int = 1000 - -val ROTATE_TIME = 500 -val STABILIZATION_TIME = 100 - -fun rotateLeftHack() { - engine_turn_left() - wait(ROTATE_TIME) - engine_forward() - wait(STABILIZATION_TIME) - engine_backward() - wait(STABILIZATION_TIME) -} - fun main() { - init() + /* init hardware */ + Time.init() + Engine.init() + Leds.init() + Connection.init() + + /* run test */ echoProto() } diff --git a/car_fmw/src/proto/direction.proto b/car_fmw/src/proto/Direction.proto similarity index 100% rename from car_fmw/src/proto/direction.proto rename to car_fmw/src/proto/Direction.proto diff --git a/car_fmw/src/proto/route.proto b/car_fmw/src/proto/Route.proto similarity index 100% rename from car_fmw/src/proto/route.proto rename to car_fmw/src/proto/Route.proto diff --git a/car_fmw/src/proto_src/direction.kt b/car_fmw/src/proto_src/Direction.kt similarity index 99% rename from car_fmw/src/proto_src/direction.kt rename to car_fmw/src/proto_src/Direction.kt index dcd6a76f24d..a609525acdc 100644 --- a/car_fmw/src/proto_src/direction.kt +++ b/car_fmw/src/proto_src/Direction.kt @@ -1,3 +1,4 @@ + class DirectionRequest private constructor (var command: DirectionRequest.Command, var sid: Int) { //========== Properties =========== //enum command = 1 diff --git a/car_fmw/src/proto_src/route.kt b/car_fmw/src/proto_src/Route.kt similarity index 99% rename from car_fmw/src/proto_src/route.kt rename to car_fmw/src/proto_src/Route.kt index 3a876d0230f..e277428c0cf 100644 --- a/car_fmw/src/proto_src/route.kt +++ b/car_fmw/src/proto_src/Route.kt @@ -1,3 +1,4 @@ + class RouteRequest private constructor (var distances: IntArray, var angles: IntArray) { //========== Properties =========== //repeated int32 distances = 1 diff --git a/car_fmw/src/rcControl.kt b/car_fmw/src/rcControl.kt index f6cc3669aa9..2ece5440406 100644 --- a/car_fmw/src/rcControl.kt +++ b/car_fmw/src/rcControl.kt @@ -16,14 +16,14 @@ fun go(request: RouteRequest) { val action = actions[j] when (action) { - RouteType.FORWARD.id -> engine_forward() - RouteType.BACKWARD.id -> engine_backward() - RouteType.LEFT.id -> engine_turn_left() - RouteType.RIGHT.id -> engine_turn_right() + RouteType.FORWARD.id -> Engine.forward() + RouteType.BACKWARD.id -> Engine.backward() + RouteType.LEFT.id -> Engine.left() + RouteType.RIGHT.id -> Engine.right() } - wait(time) - engine_stop() + Time.wait(time) + Engine.stop() j++ } diff --git a/car_fmw/src/simpleRoute.kt b/car_fmw/src/simpleRoute.kt deleted file mode 100644 index c3186267592..00000000000 --- a/car_fmw/src/simpleRoute.kt +++ /dev/null @@ -1,20 +0,0 @@ - -fun simpleRoute() { - while (true) { - engine_forward() - wait(PROGRAM_DURATION) - blink() - - engine_turn_right() - wait(PROGRAM_DURATION) - blink() - - engine_backward() - wait(PROGRAM_DURATION) - blink() - - engine_turn_left() - wait(PROGRAM_DURATION) - blink() - } -} \ No newline at end of file