1f840316478eb22036049438985c579de68b9780
[project/umbim.git] / mbim-msg.h
1 #ifndef _MBIM_MSG_H__
2 #define _MBIM_MSG_H__
3
4 #include <string.h>
5
6 struct mbim_message_header {
7         uint32_t type;
8         uint32_t length;
9         uint32_t transaction_id;
10 } __attribute__((packed));
11
12 struct mbim_open_message {
13         struct mbim_message_header header;
14         uint32_t max_control_transfer;
15 } __attribute__((packed));
16
17 struct mbim_open_done_message {
18         struct mbim_message_header header;
19         uint32_t status_code;
20 } __attribute__((packed));
21
22 struct mbim_close_done_message {
23         uint32_t status_code;
24 } __attribute__((packed));
25
26 struct mbim_error_message {
27         uint32_t error_status_code;
28 } __attribute__((packed));
29
30 struct mbim_fragment_header {
31         uint32_t total;
32         uint32_t current;
33 } __attribute__((packed));
34
35 struct fragment_message {
36         struct mbim_fragment_header fragment_header;
37         uint8_t buffer[];
38 } __attribute__((packed));
39
40 struct command_message {
41         struct mbim_message_header header;
42         struct mbim_fragment_header fragment_header;
43         uint8_t service_id[16];
44         uint32_t command_id;
45         uint32_t command_type;
46         uint32_t buffer_length;
47         uint8_t buffer[];
48 } __attribute__((packed));
49
50 struct command_done_message {
51         struct mbim_fragment_header fragment_header;
52         uint8_t service_id[16];
53         uint32_t command_id;
54         uint32_t status_code;
55         uint32_t buffer_length;
56         uint8_t buffer[];
57 } __attribute__((packed));
58
59 struct indicate_status_message {
60         struct mbim_fragment_header fragment_header;
61         uint8_t service_id[16];
62         uint32_t command_id;
63         uint32_t buffer_length;
64         uint8_t buffer[];
65 } __attribute__((packed));
66
67 typedef int (*_mbim_cmd_request)(void);
68 typedef int (*_mbim_cmd_response)(void *buffer, int len);
69
70 extern uint8_t basic_connect[16];
71 extern int transaction_id;
72
73 const char* mbim_enum_string(struct mbim_enum *e, uint32_t key);
74 char* mbim_get_string(struct mbim_string *str, char *in);
75 void mbim_setup_header(struct mbim_message_header *hdr, MbimMessageType type, int length);
76 uint8_t* mbim_setup_command_msg(uint8_t *uuid, uint32_t type, uint32_t command_id, int len);
77 int mbim_send_open_msg(void);
78 int mbim_send_close_msg(void);
79 int mbim_send_command_msg(void);
80 int mbim_add_payload(uint8_t len);
81 int mbim_encode_string(struct mbim_string *str, char *in);
82 void mbim_get_ipv4(void *buffer, char *out, uint32_t offset);
83
84 #endif