car_fmw: carhw stdlib

This commit is contained in:
e5l
2016-08-19 13:40:20 +03:00
parent 22485468b9
commit 665d54eb45
23 changed files with 211 additions and 149 deletions
+33
View File
@@ -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)
}
}
-7
View File
@@ -1,7 +0,0 @@
fun blinkProgramm() {
while (true) {
blink()
wait(PROGRAM_DURATION)
}
}
+7 -19
View File
@@ -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)
}
+11
View File
@@ -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()
}
+44
View File
@@ -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)
}
}
+33
View File
@@ -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()
}
}
+36
View File
@@ -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)
}
}
+16
View File
@@ -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()
}
}
+16
View File
@@ -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()
}
-20
View File
@@ -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)
}
-8
View File
@@ -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()
-8
View File
@@ -1,8 +0,0 @@
fun init() {
time_init()
engine_init()
leds_init()
VCP_init()
clear_buffer()
}
-31
View File
@@ -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()
}
-6
View File
@@ -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()
-4
View File
@@ -1,4 +0,0 @@
external fun time_init()
external fun wait(msec: Int)
-4
View File
@@ -1,4 +0,0 @@
external fun user_btn_init(handler: () -> Unit)
external fun user_btn_is_pushed(): Boolean
external fun EXTI0_IRQHandler()
+7 -16
View File
@@ -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()
}
@@ -1,3 +1,4 @@
class DirectionRequest private constructor (var command: DirectionRequest.Command, var sid: Int) {
//========== Properties ===========
//enum command = 1
@@ -1,3 +1,4 @@
class RouteRequest private constructor (var distances: IntArray, var angles: IntArray) {
//========== Properties ===========
//repeated int32 distances = 1
+6 -6
View File
@@ -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++
}
-20
View File
@@ -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()
}
}