blob: 32d983d6d0362d43a176e9d50559c2511a16b2b4 [file] [log] [blame]
Jon Medhurst15ce78d2014-04-10 09:02:02 +01001/**
Jon Medhurstb1d07442015-05-08 12:04:18 +01002 * Copyright (C) ARM Limited 2010-2015. All rights reserved.
Jon Medhurst15ce78d2014-04-10 09:02:02 +01003 *
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License version 2 as
6 * published by the Free Software Foundation.
7 */
8
9#ifndef DRIVERSOURCE_H
10#define DRIVERSOURCE_H
11
12#include <semaphore.h>
13#include <stdint.h>
14
15#include "Source.h"
16
Jon Medhurste31266f2014-08-04 15:47:44 +010017class Buffer;
Jon Medhurst15ce78d2014-04-10 09:02:02 +010018class Fifo;
19
20class DriverSource : public Source {
21public:
22 DriverSource(sem_t *senderSem, sem_t *startProfile);
23 ~DriverSource();
24
25 bool prepare();
26 void run();
27 void interrupt();
28
29 bool isDone();
30 void write(Sender *sender);
31
32 static int readIntDriver(const char *fullpath, int *value);
33 static int readInt64Driver(const char *fullpath, int64_t *value);
34 static int writeDriver(const char *fullpath, const char *data);
35 static int writeDriver(const char *path, int value);
36 static int writeDriver(const char *path, int64_t value);
37 static int writeReadDriver(const char *path, int *value);
38 static int writeReadDriver(const char *path, int64_t *value);
39
40private:
Jon Medhurste31266f2014-08-04 15:47:44 +010041 static void *bootstrapThreadStatic(void *arg);
42 void bootstrapThread();
43
44 Buffer *mBuffer;
Jon Medhurst15ce78d2014-04-10 09:02:02 +010045 Fifo *mFifo;
46 sem_t *const mSenderSem;
47 sem_t *const mStartProfile;
48 int mBufferSize;
49 int mBufferFD;
50 int mLength;
51
52 // Intentionally unimplemented
53 DriverSource(const DriverSource &);
54 DriverSource &operator=(const DriverSource &);
55};
56
57#endif // DRIVERSOURCE_H