summaryrefslogtreecommitdiff
path: root/src/common_modules.h
blob: 3fa5e020c0465b00cb97df3f13c86518a5f44180 (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
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
/*
* SDB - Smart Development Bridge
*
* Copyright (c) 2000 - 2013 Samsung Electronics Co., Ltd. All rights reserved.
*
* Contact:
* Ho Namkoong <ho.namkoong@samsung.com>
* Yoonki Park <yoonki.park@samsung.com>
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
* Contributors:
* - S-Core Co., Ltd
*
*/

#ifndef COMMON_MODULES_H_
#define COMMON_MODULES_H_

#include "linkedlist.h"
#include "fdevent.h"
#include "sdb_usb.h"

#define MAX_PAYLOAD 4096
#define CHUNK_SIZE (64*1024)
#define DEFAULT_SDB_PORT 26099

#define A_VERSION 0x0100000
#define SDB_VERSION_MAJOR   2       // increments upon significant architectural changes or the achievement of important milestones
#define SDB_VERSION_MINOR   2       // progress is made within a major version
#define SDB_VERSION_PATCH   32      // increments for small sets of changes
#define SDB_VERSION_MAX_LENGTH  128

extern MAP hex_map;

typedef struct message MESSAGE;
struct message {
    unsigned command;       /* command identifier constant      */
    unsigned arg0;          /* first argument                   */
    unsigned arg1;          /* second argument                  */
    unsigned data_length;   /* length of payload (0 is allowed) */
    unsigned data_check;    /* checksum of data payload         */
    unsigned magic;         /* command ^ 0xffffffff             */
};

typedef struct packet PACKET;
struct packet
{
    LIST_NODE* node;

    unsigned len;
    void *ptr;

    MESSAGE msg;
    unsigned char data[MAX_PAYLOAD];
};

typedef enum transport_type {
        kTransportUsb,
        kTransportLocal,
        kTransportAny,
        kTransportRemoteDevCon
} transport_type;

typedef struct transport TRANSPORT;
struct transport
{
    LIST_NODE* node;
    //list for remote sockets which wait for CNXN
    LIST_NODE* remote_cnxn_socket;

    int (*read_from_remote)(TRANSPORT* t, void* data, int len);
    int (*write_to_remote)(PACKET *p, TRANSPORT *t);
    void (*close)(TRANSPORT *t);
    void (*kick)(TRANSPORT *t);

    int connection_state;
    transport_type type;

    usb_handle *usb;
    int sfd;

    char *serial;
    int sdb_port;
    char *device_name;

    int          kicked;
    unsigned req;
    unsigned res;
};

typedef struct listener LISTENER;
struct listener
{
    LIST_NODE* node;

    FD_EVENT fde;
    int fd;

    const char *local_name;
    const char *connect_to;
    TRANSPORT *transport;
};

typedef struct t_packet T_PACKET;
struct t_packet {
    TRANSPORT* t;
    PACKET* p;
};

typedef struct socket SDB_SOCKET;
struct socket {
    int status;
    LIST_NODE* node;

    unsigned local_id;
    unsigned remote_id;

    int    closing;
    FD_EVENT fde;
    int fd;

    //TODO HOT PATCH FOR 2048.
    char char_2048;
    int check_2048;

    LIST_NODE* pkt_list;
    TRANSPORT *transport;

    PACKET* read_packet;
};

int readx(int fd, void *ptr, size_t len);
int writex(int fd, const void *ptr, size_t len);

#endif /* SDB_TYPES_H_ */