SEcube
SEcube Open Source Library - Host
se3comm.h
1 #pragma once
2 #ifdef _WIN32
3 #include <Windows.h>
4 #else
5 #include <unistd.h>
6 #include <stdio.h>
7 #include <errno.h>
8 #include <sys/types.h>
9 #include <sys/stat.h>
10 #include <malloc.h>
11 #include <fcntl.h>
12 #endif
13 
14 #ifdef __cplusplus
15 extern "C" {
16 #endif
17 
18 #include "se3c0def.h"
19 
20 #ifdef _DEBUG
21 #include <stdio.h>
22 #define se3_trace(msg) printf msg
23 #else
24 #define se3_trace(msg)
25 #endif
26 #include <stdlib.h>
27 #include <stdbool.h>
28 #include <stdint.h>
29 #include <stddef.h>
30 #include <time.h>
31 #include <string.h>
32 
33 #define SE3_SN_SIZE (32)
34 
35 #ifdef _WIN32
36  typedef struct {
37  OVERLAPPED ol;
38  HANDLE h;
39  } se3_file;
40  typedef wchar_t se3_char;
41 #define SE3_MAGIC_FILE (L".se3magic")
42 #define SE3_OSSEP (L'\\')
43 #define SE3_MAX_PATH (256)
44 #else
45  typedef struct {
46  int fd;
47  void* buf; //[512] memalign
48  bool locked;
49  } se3_file;
50  typedef char se3_char;
51 #define SE3_MAGIC_FILE (".se3magic")
52 #define SE3_OSSEP ('/')
53 #define SE3_MAX_PATH (256)
54 #endif
55 
56 #define SE3_MAGIC_FILE_LEN (9)
57 
58  typedef struct se3_discover_info_ {
59  uint8_t serialno[SE3_SERIAL_SIZE];
60  uint8_t hello_msg[SE3_HELLO_SIZE];
61  uint16_t status;
63 
64 #define SE3_DRIVE_BUF_MAX (1024)
65 
66 
67  typedef struct se3_drive_it_ {
68  se3_char* path;
69 
70  se3_char buf_[SE3_DRIVE_BUF_MAX + 1];
71  size_t buf_len_;
72 #ifdef _WIN32
73  size_t pos_;
74 #else
75  FILE* fp_;
76 #endif
77  } se3_drive_it;
78 
79  void se3c_rand(size_t len, uint8_t* buf);
80 
81  void se3c_drive_init(se3_drive_it* it);
82  bool se3c_drive_next(se3_drive_it* it);
83 
84  bool se3c_write(uint8_t* buf, se3_file hfile, size_t block, size_t size, uint32_t timeout);
85  bool se3c_read(uint8_t* buf, se3_file hfile, size_t block, size_t size, uint32_t timeout);
86  bool se3c_info(se3_char* path, uint64_t deadline, se3_discover_info* info);
87  bool se3c_open(se3_char* path, uint64_t deadline, se3_file* phfile, se3_discover_info* disco);
88  void se3c_close(se3_file hfile);
89  //bool se3c_flock_acquire(se3_file hfile, clock_t deadline);
90  //void se3c_flock_release(se3_file hfile);
91  uint64_t se3c_deadline(uint32_t timeout);
92  void se3c_pathcopy(se3_char* dest, se3_char* src);
93  uint64_t se3c_clock();
94 
95 #ifdef _WIN32
96 #define se3c_sleep() Sleep(0)
97 #else
98 #define se3c_sleep() usleep(1000)
99 #endif
100 
101 #define SE3C_MAGIC_TIMEOUT (1000)
102 
103 #ifdef __cplusplus
104 }
105 #endif
106 
107 
108 
Definition: se3comm.h:67
Definition: se3comm.h:36
Definition: se3comm.h:58