diff --git a/kernel/kmod.c b/kernel/kmod.c index 75443bcd4dfb9dc99a9378c6e36024c61ac45b47..4775d1c770ffc0bbd5331eb716b0e363b0ef67c2 100644 --- a/kernel/kmod.c +++ b/kernel/kmod.c @@ -16,10 +16,12 @@ #define CLASS_NAME "amogus_class" #define SLOTS 4 -#define SLOT_INTERVAL_NS 1000000 +#define SLOT_INTERVAL_NS 10000000 #define MAX_VALUES 16 +#define BAUD_RATE 9600 +#define BIT_TIME_US (1000000 / BAUD_RATE) #define GPIO_PIN 575 static int major_number; @@ -101,37 +103,44 @@ static enum hrtimer_restart timer_callback(struct hrtimer *timer) { return HRTIMER_RESTART; } -static void send_bit(uint8_t bit) { +static inline void send_bit(uint8_t bit) { gpio_set_value(GPIO_PIN, bit); - udelay(1); + udelay(BIT_TIME_US); } -static void send_byte(uint8_t byte) { +static inline void send_byte(uint8_t byte) { send_bit(0); - for (int i = 0; i < 8; i++) { - int bit = (byte >> (7 - i)) & 1; - send_bit(bit); - } + send_bit((byte >> 0) & 1); + send_bit((byte >> 1) & 1); + send_bit((byte >> 2) & 1); + send_bit((byte >> 3) & 1); + send_bit((byte >> 4) & 1); + send_bit((byte >> 5) & 1); + send_bit((byte >> 6) & 1); + send_bit((byte >> 7) & 1); send_bit(1); } static void send_data(const packet_t *packet) { - send_byte(packet->data.sensor_id); - send_byte(packet->data.count); + send_byte(0xAA); + /* +send_byte(packet->data.sensor_id); +send_byte(packet->data.count); - uint8_t *bytes = (uint8_t *)packet->data.values; +uint8_t *bytes = (uint8_t *)packet->data.values; - for (size_t i = 0; i < sizeof(message_t) * packet->data.count; i++) { - send_byte(bytes[i]); - } +for (size_t i = 0; i < sizeof(message_t) * packet->data.count; i++) { + send_byte(bytes[i]); +} - bytes = (uint8_t *)&packet->crc; +bytes = (uint8_t *)&packet->crc; - for (size_t i = 0; i < sizeof(uint32_t); i++) { - send_byte(bytes[i]); - } +for (size_t i = 0; i < sizeof(uint32_t); i++) { + send_byte(bytes[i]); +} +*/ } static int timed_thread_fn(void *args) {