Skip to content
Snippets Groups Projects
Select Git revision
  • 9150d16f6af3bd49caaeb8c6ccf121c8b70ed22e
  • 4.26 default protected
  • 5.3
  • dev/5.5
  • dev/5.3
  • dev/5.1
  • deprecated/4.22
7 results

VAAbstractSourceComponent.cpp

Blame
  • kmod.c 8.96 KiB
    #include "../common/include/measurement.h"
    #include <linux/cdev.h>
    #include <linux/crc32.h>
    #include <linux/delay.h>
    #include <linux/fs.h>
    #include <linux/gpio.h>
    #include <linux/hrtimer.h>
    #include <linux/kernel.h>
    #include <linux/kthread.h>
    #include <linux/module.h>
    #include <linux/mutex.h>
    #include <linux/uaccess.h>
    #include <linux/vmalloc.h>
    
    #define DEVICE_NAME "sibyl"
    #define CLASS_NAME "sibyl_class"
    
    #define SLOTS 4
    #define SLOT_INTERVAL_NS 100000000
    
    #define MAX_MEASUREMENTS 16
    
    #define BAUD_RATE 9600
    #define BIT_TIME_US (1000000 / BAUD_RATE)
    #define GPIO_PIN 575
    
    static int major_number;
    static struct class *class = NULL;
    static struct cdev mycdev;
    
    typedef struct packet {
      uint8_t magic;
      data_t data;
      uint32_t crc;
    } packet_t;
    
    static packet_t *packet;
    
    static struct hrtimer timer;
    static ktime_t interval;
    
    static struct task_struct *timed_thread;
    
    static DECLARE_WAIT_QUEUE_HEAD(wq);
    static atomic_t wake_counter = ATOMIC_INIT(0);
    
    // Send Buffers
    #define SEND_BUFFER_SIZE 4096
    
    static struct mutex send_buffer_mutex;
    
    static uint8_t *primary_send_buffer;
    static size_t primary_send_buffer_size = 0;
    
    static uint8_t *secondary_send_buffer;
    static size_t secondary_send_buffer_size = 0;
    
    static int slot = 0;
    
    static int device_open(struct inode *inode, struct file *file) { return 0; }
    
    static int device_release(struct inode *inode, struct file *file) { return 0; }
    
    static uint32_t calculate_crc32(const packet_t *packet) {
      uint32_t crc = crc32(0, (void *)&packet->magic, sizeof(uint8_t));
      crc = crc32(crc, (void *)&packet->data.sender_id, sizeof(uint8_t));
      crc = crc32(crc, (void *)&packet->data.count, sizeof(uint8_t));
      crc = crc32(crc, (void *)&packet->data.measurements,
                  sizeof(measurement_t) * packet->data.count);
      return crc;