~aleteoryx/muditaos

ref: 46f9cc7e100b471afef4efc4449880eb480ac7fa muditaos/module-bsp/board/linux/cellular/linux_cellular.hpp -rw-r--r-- 2.5 KiB
46f9cc7e — Lucjan Bryndza [EGD-5737] Merge master into experimental 5 years ago
                                                                                
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
// Copyright (c) 2017-2020, Mudita Sp. z.o.o. All rights reserved.
// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md

#ifndef PUREPHONE_LINUX_CELLULAR_HPP
#define PUREPHONE_LINUX_CELLULAR_HPP

#include "bsp/cellular/bsp_cellular.hpp"

#include <cstring>
#include <sys/epoll.h>
#include "termios.h"
#include <sys/ioctl.h>
#include "mutex.hpp"

namespace bsp
{

    class LinuxCellular : public Cellular
    {
      private:
        bool pv_SendingAllowed = true;

      public:
        LinuxCellular(const char *term, uint32_t portSpeed);
        ~LinuxCellular();

        void PowerUp() override final;

        void PowerDown() override final;

        void Restart() override final;

        uint32_t Wait(uint32_t timeout) override final;

        ssize_t Read(void *buf, size_t nbytes) override final;

        ssize_t Write(void *buf, size_t nbytes) override final;

        void InformModemHostAsleep() override final;

        void InformModemHostWakeup() override final;

        void EnterSleep() override final;

        void ExitSleep() override final;

        void SetSpeed(uint32_t portSpeed);

        void SetSendingAllowed(bool state) override final
        {
            pv_SendingAllowed = state;
        }
        bool GetSendingAllowed() override final
        {
            return pv_SendingAllowed;
        }

        void SelectAntenna(bsp::cellular::antenna antenna) override final;

        bsp::cellular::antenna GetAntenna() override final;

      private:
        static constexpr speed_t baud_bits[] = {0,
                                                B9600,
                                                B19200,
                                                B38400,
                                                B57600,
                                                B115200,
                                                B230400,
                                                B460800,
                                                B921600,
                                                B1500000,
                                                B2000000,
                                                B3000000,
                                                B4000000};

        static const uint32_t portBaudRate = 115200;

        static const uint32_t MAX_EVENTS = 1;

        int fd = -1;

        int epoll_fd = -1;

        struct epoll_event event, events[MAX_EVENTS];

        cpp_freertos::MutexStandard serOutMutex;
    };

} // namespace bsp

#endif // PUREPHONE_LINUX_CELLULAR_HPP