1 /*
2  * Copyright (C) 2015-2020 Alibaba Group Holding Limited
3  *
4  */
5 
6 #ifndef __NET_CACHE_H__
7 #define __NET_CACHE_H__
8 
9 
10 enum cache_type {
11 	CACHE_NONE = 0,
12 	CACHE_FILE,
13 	CACHE_MEM,
14 };
15 
16 enum cache_event {
17 	CACHE_EV_CACHE_CPLT = 0,
18 	CACHE_EV_SEEK_DONE,
19 	CACHE_EV_READ_BLOCK,
20 };
21 
22 struct cache_file {
23 	os_file_t fp;
24 	uint32_t wr_pos;
25 	uint32_t rd_pos;
26 	uint32_t rd_len;
27 	uint8_t rd_waiting:1;
28 	uint8_t rd_start:1;
29 	os_sem_t rd_sem;
30 };
31 
32 struct cache_mem {
33 	uvoice_ringbuff_t rb;
34 	uint8_t *pool;
35 	int pool_size;
36 	int wr_len;
37 	int rd_len;
38 	uint8_t wr_waiting:1;
39 	uint8_t rd_waiting:1;
40 	uint8_t rd_start:1;
41 	os_sem_t wr_sem;
42 	os_sem_t rd_sem;
43 };
44 
45 typedef struct {
46 	uint8_t *buffer;
47 	int32_t buffer_size;
48 	int32_t head_data_size;
49 	int32_t offset;
50 	cache_config_t cache_config;
51 	uint8_t cache_running:1;
52 	uint8_t cache_stop:1;
53 	uint8_t cache_cplt:1;
54 	uint8_t cplt_waiting:1;
55 	uint8_t rebuild:1;
56 	uint8_t download:1;
57 	uint8_t sequence:1;
58 	char filename[64];
59 	int32_t content_length;
60 	int32_t load_length;
61 	int32_t seek_offset;
62 	void *cache;
63 	int (*cache_load)(void *priv, uint8_t *buffer, int nbytes);
64 	int (*cache_read)(void *priv, uint8_t *buffer, int nbytes);
65 	int (*event)(void *priv, enum cache_event event, void *arg);
66 	void *priv;
67 	os_sem_t cplt_sem;
68 	os_mutex_t lock;
69 	os_task_t cache_task;
70 } net_cache_t;
71 
72 int net_get_cacheinfo(net_cache_t *nc, cache_info_t *info);
73 int net_get_mediainfo(net_cache_t *nc, media_info_t *info, media_format_t format);
74 int net_cache_reset(net_cache_t *nc);
75 int net_cache_seek(net_cache_t *nc, int offset);
76 int net_cache_pause(net_cache_t *nc);
77 int net_cache_resume(net_cache_t *nc);
78 int net_cache_start(net_cache_t *nc);
79 int net_cache_stop(net_cache_t *nc);
80 net_cache_t *net_cache_create(int read_size, cache_config_t *config, bool sequence);
81 int net_cache_release(net_cache_t *nc);
82 
83 
84 #endif /* __NET_CACHE_H__ */