Trond Enger / d7a_1x

Fork of d7a_1x by WizziLab

Committer:
Jeej
Date:
Fri Mar 25 16:48:02 2016 +0000
Revision:
25:aac250164497
Child:
26:9f0b9833cac6
D7A_1x compatibility. TODO Register file add check if file exists.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Jeej 25:aac250164497 1 #ifndef _D7A_FS_H_
Jeej 25:aac250164497 2 #define _D7A_FS_H_
Jeej 25:aac250164497 3
Jeej 25:aac250164497 4 #include "mbed.h"
Jeej 25:aac250164497 5 #include "rtos.h"
Jeej 25:aac250164497 6 #include "d7a_common.h"
Jeej 25:aac250164497 7 #include "d7a_com.h"
Jeej 25:aac250164497 8
Jeej 25:aac250164497 9 typedef uint32_t (*WriteFileFunction)( const uint8_t file_id,
Jeej 25:aac250164497 10 const uint16_t offset,
Jeej 25:aac250164497 11 const uint16_t file_size,
Jeej 25:aac250164497 12 const uint8_t * const content);
Jeej 25:aac250164497 13
Jeej 25:aac250164497 14 typedef uint32_t (*ReadFileFunction)( const uint8_t file_id,
Jeej 25:aac250164497 15 const uint16_t offset,
Jeej 25:aac250164497 16 const uint16_t file_size,
Jeej 25:aac250164497 17 uint8_t* buf);
Jeej 25:aac250164497 18
Jeej 25:aac250164497 19 // COM-FS Operation-codes. Mimics ALP ones.
Jeej 25:aac250164497 20 #define FS_OP_NULL 0
Jeej 25:aac250164497 21 #define FS_OP_RD 1
Jeej 25:aac250164497 22 #define FS_OP_WR 4
Jeej 25:aac250164497 23 #define FS_OP_STAT 16
Jeej 25:aac250164497 24 #define FS_OP_DSTAT 30 // Variant of STAT for distant files
Jeej 25:aac250164497 25 #define FS_OP_CREATE 17
Jeej 25:aac250164497 26 #define FS_OP_FLUSH 20
Jeej 25:aac250164497 27 #define FS_OP_RETSTAT 32
Jeej 25:aac250164497 28 #define FS_OP_RETDATA 34
Jeej 25:aac250164497 29
Jeej 25:aac250164497 30 // FS/COM-FS Status-codes. Mimics ALP ones.
Jeej 25:aac250164497 31 enum {
Jeej 25:aac250164497 32 FS_STAT_PENDING = 1,
Jeej 25:aac250164497 33 FS_STAT_OK = 0,
Jeej 25:aac250164497 34 FS_STAT_ERR_FID_NOEXIST = -1, // FF
Jeej 25:aac250164497 35 FS_STAT_ERR_FID_ALREADYEXIST = -2, // FE
Jeej 25:aac250164497 36 FS_STAT_ERR_NOTRESTORABLE = -3, // FD
Jeej 25:aac250164497 37 FS_STAT_ERR_PERMISSION = -4, // FC
Jeej 25:aac250164497 38 FS_STAT_ERR_LENGTH_OVFL = -5, // FB
Jeej 25:aac250164497 39 FS_STAT_ERR_ALLOC_OVFL = -6, // FA
Jeej 25:aac250164497 40 FS_STAT_ERR_START_OFFSET_OVFL = -7, // F9
Jeej 25:aac250164497 41 FS_STAT_ERR_WRITE_OVFL = -8, // F8
Jeej 25:aac250164497 42 FS_STAT_ERR_WRITE_PROTECTED = -9, // F7
Jeej 25:aac250164497 43 FS_STAT_ERR_UNKNOWN_OPERATION = -10, // F6
Jeej 25:aac250164497 44 FS_STAT_ERR_INCOMPLETE_OPERAND = -11, // F5
Jeej 25:aac250164497 45 FS_STAT_ERR_WRONG_OPERAND = -12, // F4
Jeej 25:aac250164497 46 FS_STAT_ERR_UNKNOWN = -127, // 80
Jeej 25:aac250164497 47 };
Jeej 25:aac250164497 48
Jeej 25:aac250164497 49
Jeej 25:aac250164497 50 // Memory "TYPE"
Jeej 25:aac250164497 51 #define FS_TYPE_DISTANT 0x80
Jeej 25:aac250164497 52 enum { NOFILE = 0,
Jeej 25:aac250164497 53 PFLASH,
Jeej 25:aac250164497 54 EEPROM,
Jeej 25:aac250164497 55 RAM,
Jeej 25:aac250164497 56
Jeej 25:aac250164497 57 HOST = 0x80 + 0x10, // Distant HST_COM Files
Jeej 25:aac250164497 58
Jeej 25:aac250164497 59 ERASED = 0xff
Jeej 25:aac250164497 60 };
Jeej 25:aac250164497 61 // File "Storage Class"
Jeej 25:aac250164497 62 enum { TRANSIENT=0, VOLATILE, RESTORABLE, PERMANENT};
Jeej 25:aac250164497 63 // D7AactP "trigger" TODO: is it really applicable ?
Jeej 25:aac250164497 64 enum { LIST=0, READ, WRITE, WRITE_FLUSH};
Jeej 25:aac250164497 65
Jeej 25:aac250164497 66 // =======================================================================
Jeej 25:aac250164497 67 // d7a_fs_header_t
Jeej 25:aac250164497 68 // -----------------------------------------------------------------------
Jeej 25:aac250164497 69 /// Header Structure
Jeej 25:aac250164497 70 // =======================================================================
Jeej 25:aac250164497 71 TYPEDEF_STRUCT_PACKED{
Jeej 25:aac250164497 72 uint32_t addr : 32;
Jeej 25:aac250164497 73
Jeej 25:aac250164497 74 uint32_t type : 8;
Jeej 25:aac250164497 75
Jeej 25:aac250164497 76 // RAM Mirroring
Jeej 25:aac250164497 77 uint32_t mirror_idx : 7;
Jeej 25:aac250164497 78 uint32_t mirrored : 1;
Jeej 25:aac250164497 79
Jeej 25:aac250164497 80 uint32_t fid : 8;
Jeej 25:aac250164497 81
Jeej 25:aac250164497 82 uint32_t afid : 8;
Jeej 25:aac250164497 83
Jeej 25:aac250164497 84 /// Storage Class
Jeej 25:aac250164497 85 uint32_t storage_class : 2;
Jeej 25:aac250164497 86 /// RFU
Jeej 25:aac250164497 87 uint32_t rfu_2 : 1;
Jeej 25:aac250164497 88 uint32_t rfu_3 : 1;
Jeej 25:aac250164497 89 /// D7AactP condition
Jeej 25:aac250164497 90 uint32_t act_cond : 3;
Jeej 25:aac250164497 91 /// D7AactP is enabled
Jeej 25:aac250164497 92 uint32_t act_en : 1;
Jeej 25:aac250164497 93
Jeej 25:aac250164497 94 /// Guest permissions
Jeej 25:aac250164497 95 uint32_t guest_x : 1;
Jeej 25:aac250164497 96 uint32_t guest_w : 1;
Jeej 25:aac250164497 97 uint32_t guest_r : 1;
Jeej 25:aac250164497 98 /// User permissions
Jeej 25:aac250164497 99 uint32_t user_x : 1;
Jeej 25:aac250164497 100 uint32_t user_w : 1;
Jeej 25:aac250164497 101 uint32_t user_r : 1;
Jeej 25:aac250164497 102 /// File is executable
Jeej 25:aac250164497 103 uint32_t runable : 1;
Jeej 25:aac250164497 104 /// File is encrypted
Jeej 25:aac250164497 105 uint32_t encrypted : 1;
Jeej 25:aac250164497 106
Jeej 25:aac250164497 107
Jeej 25:aac250164497 108 uint32_t length : 24;
Jeej 25:aac250164497 109 uint32_t alloc : 24;
Jeej 25:aac250164497 110
Jeej 25:aac250164497 111 uint32_t ifid : 8;
Jeej 25:aac250164497 112 } d7a_fs_header_bf_t;
Jeej 25:aac250164497 113
Jeej 25:aac250164497 114 TYPEDEF_STRUCT_PACKED{
Jeej 25:aac250164497 115 uint32_t addr;
Jeej 25:aac250164497 116 uint8_t type;
Jeej 25:aac250164497 117 uint8_t mirror;
Jeej 25:aac250164497 118 uint8_t fid;
Jeej 25:aac250164497 119
Jeej 25:aac250164497 120 uint8_t afid;
Jeej 25:aac250164497 121 uint8_t prop;
Jeej 25:aac250164497 122 uint8_t perm;
Jeej 25:aac250164497 123
Jeej 25:aac250164497 124 uint8_t length[3];
Jeej 25:aac250164497 125 uint8_t alloc[3];
Jeej 25:aac250164497 126 uint8_t ifid;
Jeej 25:aac250164497 127 } d7a_fs_header_byte_t;
Jeej 25:aac250164497 128
Jeej 25:aac250164497 129 typedef union
Jeej 25:aac250164497 130 {
Jeej 25:aac250164497 131 d7a_fs_header_bf_t bf;
Jeej 25:aac250164497 132 d7a_fs_header_byte_t byte;
Jeej 25:aac250164497 133
Jeej 25:aac250164497 134 } d7a_fs_header_t;
Jeej 25:aac250164497 135
Jeej 25:aac250164497 136
Jeej 25:aac250164497 137 typedef enum {
Jeej 25:aac250164497 138 KAL_FS_PROP_SIZE,
Jeej 25:aac250164497 139 KAL_FS_PROP_ALLOC,
Jeej 25:aac250164497 140 KAL_FS_PROP_TYPE,
Jeej 25:aac250164497 141 KAL_FS_PROP_ADDR,
Jeej 25:aac250164497 142 KAL_FS_PROP_AFID,
Jeej 25:aac250164497 143 KAL_FS_PROP_IFID,
Jeej 25:aac250164497 144 KAL_FS_PROP_PROP,
Jeej 25:aac250164497 145 KAL_FS_PROP_PERM,
Jeej 25:aac250164497 146
Jeej 25:aac250164497 147 KAL_FS_PROP_ALL,
Jeej 25:aac250164497 148 } d7a_fs_property_t;
Jeej 25:aac250164497 149
Jeej 25:aac250164497 150 typedef struct{
Jeej 25:aac250164497 151 uint32_t addr;
Jeej 25:aac250164497 152 uint8_t type;
Jeej 25:aac250164497 153 uint8_t afid;
Jeej 25:aac250164497 154 uint8_t ifid;
Jeej 25:aac250164497 155 uint8_t prop;
Jeej 25:aac250164497 156 uint8_t perm;
Jeej 25:aac250164497 157 uint32_t length;
Jeej 25:aac250164497 158 uint32_t alloc;
Jeej 25:aac250164497 159 } d7a_fs_properties_t;
Jeej 25:aac250164497 160
Jeej 25:aac250164497 161 void d7a_fs_open(WriteFileFunction write_file, ReadFileFunction read_file);
Jeej 25:aac250164497 162 void d7a_fs_wait_done(uint32_t millisec = osWaitForever);
Jeej 25:aac250164497 163 void d7a_fs_new_pkt(d7a_com_rx_msg_t* pkt);
Jeej 25:aac250164497 164 d7a_com_rx_msg_t* d7a_fs_wait_pkt( uint32_t millisec = osWaitForever );
Jeej 25:aac250164497 165 uint32_t d7a_fs_get_properties(uint8_t fid, d7a_fs_property_t prop, d7a_fs_properties_t* props);
Jeej 25:aac250164497 166 int d7a_fs_distant_create(uint8_t fid, d7a_fs_properties_t* props);
Jeej 25:aac250164497 167
Jeej 25:aac250164497 168
Jeej 25:aac250164497 169 #endif