summaryrefslogtreecommitdiff
path: root/include/JSystem/JHostIO/JHIMccBuf.h
blob: 7343b88376f92ca6661ea227d01cdb9e7a43d859 (plain)
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
#ifndef JORMCCBUF_H_H
#define JORMCCBUF_H_H

#include "JSystem/JHostIO/JHIComm.h"
#include "JSystem/JKernel/JKRHeap.h"

class JHIMccBuf {
public:
    JHIMccBuf(u16 channel, u16, u32);

    void setHeaderToBuf(u32 data, u32 position, u16 size);
    u32 setDataToBuf(void* pData, u16 size);
    int readData(u32 position, u32* pOutData);
    int readDataFromBuf(void* pBuf, u32 size);

    int JHIRead(u32 channel, u32 offset, void* buffer, u32 size);
    int JHIWrite(u32 channel, u32 offset, void* buffer, u32 size);

    int JHIMCCWrite(u32 channel, u32 offset, void* buffer, u32 size);
    int JHIMCCRead(u32 channel, u32 offset, void* buffer, u32 size);

    virtual ~JHIMccBuf();
    virtual void initInstance(u16 channel, u16, u32);
    virtual void init();
    virtual void initBuf();
    virtual void enablePort() { mPortEnabled = true; }
    virtual void disablePort() { mPortEnabled = false; }
    virtual bool isPort() { return mPortEnabled; }

    static u8* mTempBuf;
    static u16 mRefCount;

    /* 0x04 */ u32 mTag;
    /* 0x08 */ u16 field_0x8;
    /* 0x0A */ u16 field_0xa;
    /* 0x0C */ u16 field_0xc;
    /* 0x0E */ u16 mChannel;
    /* 0x10 */ u16 field_0x10;
    /* 0x14 */ int mReadOffset;
    /* 0x18 */ int mWriteOffset;
    /* 0x1C */ int field_0x1c;
    /* 0x20 */ u32 field_0x20;
    /* 0x24 */ u32 mBeginPos;
    /* 0x28 */ u32 mEndPos;
    /* 0x2C */ bool mPortEnabled;
};

class JHIMccBufReader : public JHIMccBuf {
public:
    JHIMccBufReader(u16 channel, u16, u32);
    virtual ~JHIMccBufReader();

    u32 available();
    int readBegin();
    int read(void* pBuf);
    void readEnd();
};

class JHIMccBufWriter : public JHIMccBuf {
public:
    JHIMccBufWriter(u16 channel, u16, u32);
    virtual ~JHIMccBufWriter();

    int writeBegin();
    int write(void* pBuf, u32 size);
    void writeEnd();
};

struct JHIMccContext {
    JHIMccBufReader* mp_reader;
    JHIMccBufWriter* mp_writer;
};

void JHIReport(const char* fmt, ...);
void JHIHalt(const char* fmt, ...);

#endif /* JORMCCBUF_H_H */