]> git.donarmstrong.com Git - qmk_firmware.git/commitdiff
Improve serial link initialization, and add driver
authorFred Sundvik <fsundvik@gmail.com>
Sun, 28 Feb 2016 19:46:29 +0000 (21:46 +0200)
committerFred Sundvik <fsundvik@gmail.com>
Sun, 28 Feb 2016 19:46:29 +0000 (21:46 +0200)
serial_link.mk
serial_link/system/driver.h [new file with mode: 0644]
serial_link/system/system.c
serial_link/system/system.h

index f0cd60b0460f33789bba7eca8b225ede43a8e85d..e164cc5ff3613b80b85ff0b879b9a47b20b28b99 100644 (file)
@@ -22,4 +22,6 @@
 
 UINCDIR += $(SERIAL_DIR)
 SRC += $(wildcard $(SERIAL_DIR)/serial_link/protocol/*.c)
-SRC += $(wildcard $(SERIAL_DIR)/serial_link/system/*.c)
\ No newline at end of file
+SRC += $(wildcard $(SERIAL_DIR)/serial_link/system/*.c)
+SRC += serial_link_hal.c
+OPT_DEFS += -DUSE_SERIAL_LINK
diff --git a/serial_link/system/driver.h b/serial_link/system/driver.h
new file mode 100644 (file)
index 0000000..76e2d68
--- /dev/null
@@ -0,0 +1,36 @@
+/*
+The MIT License (MIT)
+
+Copyright (c) 2016 Fred Sundvik
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+*/
+
+#ifndef SERIAL_LINK_DRIVER_H
+#define SERIAL_LINK_DRIVER_H
+
+#include "host_driver.h"
+
+void init_serial_link(void);
+void init_serial_link_hal(void);
+bool is_serial_link_connected(void);
+host_driver_t* get_serial_link_driver(void);
+void serial_link_update(void);
+
+#endif
index e40a18cec701165f49566515ba8a910ded892b3a..c38bcd87d0d025e84ae27c1f5498cecef6e30d5c 100644 (file)
@@ -21,14 +21,33 @@ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
 SOFTWARE.
 */
+#include "report.h"
+#include "host_driver.h"
 #include "serial_link/system/system.h"
+#include "serial_link/system/driver.h"
 #include "hal.h"
 #include "serial_link/protocol/byte_stuffer.h"
 #include "serial_link/protocol/transport.h"
 #include "serial_link/protocol/frame_router.h"
 #include <stdbool.h>
+#include "print.h"
 
 static event_source_t new_data_event;
+static bool serial_link_connected;
+
+static uint8_t keyboard_leds(void);
+static void send_keyboard(report_keyboard_t *report);
+static void send_mouse(report_mouse_t *report);
+static void send_system(uint16_t data);
+static void send_consumer(uint16_t data);
+
+host_driver_t serial_driver = {
+  keyboard_leds,
+  send_keyboard,
+  send_mouse,
+  send_system,
+  send_consumer
+};
 
 
 // Slow speed for testing
@@ -89,8 +108,25 @@ void send_data(uint8_t link, const uint8_t* data, uint16_t size) {
     }
 }
 
+static systime_t last_update = 0;
+
+typedef struct {
+    uint32_t test;
+} test_object1_t;
+
+
+SLAVE_TO_MASTER_OBJECT(slave_to_master, test_object1_t);
+MASTER_TO_ALL_SLAVES_OBJECT(serial_link_connected, bool);
+
+remote_object_t* test_remote_objects[] = {
+    REMOTE_OBJECT(serial_link_connected),
+    REMOTE_OBJECT(slave_to_master),
+};
 
 void init_serial_link(void) {
+    serial_link_connected = false;
+    init_serial_link_hal();
+    init_transport(test_remote_objects, sizeof(test_remote_objects)/sizeof(remote_object_t*));
     init_byte_stuffer();
     sdStart(&SD1, &config);
     sdStart(&SD2, &config);
@@ -99,6 +135,60 @@ void init_serial_link(void) {
                               LOWPRIO, serialThread, NULL);
 }
 
+void serial_link_update(void) {
+    systime_t current_time = chVTGetSystemTimeX();
+    if (current_time - last_update > 1000) {
+        *begin_write_serial_link_connected() = true;
+        end_write_serial_link_connected();
+        test_object1_t* obj = begin_write_slave_to_master();
+        obj->test = current_time;
+        end_write_slave_to_master();
+        xprintf("writing %d\n", current_time);
+        last_update = current_time;
+    }
+    test_object1_t* obj = read_slave_to_master(0);
+    if (obj) {
+        xprintf("%d\n", obj->test);
+    }
+    obj = read_slave_to_master(1);
+    if (obj) {
+        xprintf("%d\n", obj->test);
+    }
+
+    if (read_serial_link_connected()) {
+        serial_link_connected = true;
+    }
+}
+
 void signal_data_written(void) {
     chEvtBroadcast(&new_data_event);
 }
+
+bool is_serial_link_connected(void) {
+    return serial_link_connected;
+}
+
+host_driver_t* get_serial_link_driver(void) {
+    return &serial_driver;
+}
+
+uint8_t keyboard_leds(void) {
+    return 0;
+}
+
+void send_keyboard(report_keyboard_t *report) {
+    (void)report;
+}
+
+void send_mouse(report_mouse_t *report) {
+    (void)report;
+}
+
+void send_system(uint16_t data) {
+    (void)data;
+}
+
+void send_consumer(uint16_t data) {
+    (void)data;
+}
+
index e8c1caec089c01616329f34d1541346888e47900..fcc27425e18d3a61b13a4b245a02de5bb11c44d5 100644 (file)
@@ -26,7 +26,6 @@ SOFTWARE.
 #define SERIAL_LINK_SYSTEM_H
 
 
-void init_serial_link(void);
 
 #if defined(PROTOCOL_CHIBIOS)
 #include "ch.h"