Trond Enger / d7a_1x

Fork of d7a_1x by WizziLab

Committer:
Jeej
Date:
Thu Sep 01 09:35:27 2016 +0000
Revision:
45:b85384e7d825
Parent:
44:8ebe6b70f932
Child:
46:665391110051
New API working for local read/write.

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 34:1311cc53201a 6 #include "dbg.h"
Jeej 25:aac250164497 7 #include "d7a_common.h"
Jeej 25:aac250164497 8 #include "d7a_com.h"
Jeej 43:28202405094d 9 #include "d7a.h"
Jeej 25:aac250164497 10
Jeej 37:e04613e021f2 11 #define TO_FS (8000) // Long time to give the modem time to reboot in case of assert
Jeej 33:f9a542d3efaa 12 #define FS_MAX_CONCURRENCY 16 // Maximum number of concurrent access
Jeej 26:9f0b9833cac6 13
Jeej 26:9f0b9833cac6 14 // PROP Byte
Jeej 26:9f0b9833cac6 15 #define FS_BFO_STORAGE_CLASS 0
Jeej 26:9f0b9833cac6 16 #define FS_BFO_ACT_COND 4
Jeej 26:9f0b9833cac6 17 #define FS_BFO_ACT_EN 7
Jeej 26:9f0b9833cac6 18 #define FS_BFS_STORAGE_CLASS 2
Jeej 26:9f0b9833cac6 19 #define FS_BFS_ACT_COND 3
Jeej 26:9f0b9833cac6 20 #define FS_BFS_ACT_EN 1
Jeej 26:9f0b9833cac6 21
Jeej 26:9f0b9833cac6 22 //======================================================================
Jeej 26:9f0b9833cac6 23 // Attributes and macros
Jeej 26:9f0b9833cac6 24 //======================================================================
Jeej 26:9f0b9833cac6 25 // "Piped" File: rd/wr are not stored but just sent on IF
Jeej 26:9f0b9833cac6 26 #define FS_TRANSIENT (TRANSIENT << FS_BFO_STORAGE_CLASS)
Jeej 26:9f0b9833cac6 27 // "RAM" File: rd/wr to a volatile buffer.
Jeej 26:9f0b9833cac6 28 #define FS_VOLATILE (VOLATILE << FS_BFO_STORAGE_CLASS)
Jeej 26:9f0b9833cac6 29 // "Mirrored" File: loaded from NVM, cached/used in RAM. Flushable to NVM.
Jeej 26:9f0b9833cac6 30 #define FS_RESTORABLE (RESTORABLE << FS_BFO_STORAGE_CLASS)
Jeej 26:9f0b9833cac6 31 // "Normal" File: rd/wr from/to NVM
Jeej 26:9f0b9833cac6 32 #define FS_PERMANENT (PERMANENT << FS_BFO_STORAGE_CLASS)
Jeej 26:9f0b9833cac6 33 #define FS_ACT_COND(c) ((c & 0x7) << FS_BFO_ACT_COND)
Jeej 26:9f0b9833cac6 34 #define FS_ACT_EN (1 << FS_BFO_ACT_EN)
Jeej 26:9f0b9833cac6 35
Jeej 26:9f0b9833cac6 36 #define FS_RUNNABLE (1 << FS_BFO_RUNNABLE)
Jeej 26:9f0b9833cac6 37 #define FS_ENCRYPTED (1 << FS_BFO_ENCRYPTED)
Jeej 26:9f0b9833cac6 38
Jeej 26:9f0b9833cac6 39 // XXX Old ALP Hack
Jeej 26:9f0b9833cac6 40 #define NACK FS_RUNNABLE
Jeej 26:9f0b9833cac6 41 #define NOTIF FS_ENCRYPTED
Jeej 26:9f0b9833cac6 42
Jeej 26:9f0b9833cac6 43 // D7AactP Enabled File properties
Jeej 26:9f0b9833cac6 44 #if 0 // Condition is not used (nor usable)
Jeej 26:9f0b9833cac6 45 #define FS_TRANSIENT_NOTIF(c) (FS_TRANSIENT | FS_ACT_EN | FS_ACT_COND(c))
Jeej 26:9f0b9833cac6 46 #define FS_VOLATILE_NOTIF(c) (FS_VOLATILE | FS_ACT_EN | FS_ACT_COND(c))
Jeej 26:9f0b9833cac6 47 #define FS_RESTORABLE_NOTIF(c)(FS_RESTORABLE | FS_ACT_EN | FS_ACT_COND(c))
Jeej 26:9f0b9833cac6 48 #define FS_PERMANENT_NOTIF(c) (FS_PERMANENT | FS_ACT_EN | FS_ACT_COND(c))
Jeej 26:9f0b9833cac6 49 #else
Jeej 26:9f0b9833cac6 50 #define FS_TRANSIENT_NOTIF (FS_TRANSIENT | FS_ACT_EN)
Jeej 26:9f0b9833cac6 51 #define FS_VOLATILE_NOTIF (FS_VOLATILE | FS_ACT_EN)
Jeej 26:9f0b9833cac6 52 #define FS_RESTORABLE_NOTIF (FS_RESTORABLE | FS_ACT_EN)
Jeej 26:9f0b9833cac6 53 #define FS_PERMANENT_NOTIF (FS_PERMANENT | FS_ACT_EN)
Jeej 26:9f0b9833cac6 54 #endif
Jeej 26:9f0b9833cac6 55
Jeej 25:aac250164497 56 // COM-FS Operation-codes. Mimics ALP ones.
Jeej 25:aac250164497 57 #define FS_OP_NULL 0
Jeej 25:aac250164497 58 #define FS_OP_RD 1
Jeej 25:aac250164497 59 #define FS_OP_WR 4
Jeej 41:a924aa709b6f 60 #define FS_OP_SYNC 6 // Write File Properties
Jeej 29:8e7c5c1e9aab 61 #define FS_OP_TOUCH 7 // Not in ALP but '7' is still in 'write' actions area
Jeej 25:aac250164497 62 #define FS_OP_STAT 16
Jeej 29:8e7c5c1e9aab 63 #define FS_OP_DSTAT 30 // Not in ALP: Variant of STAT for distant files
Jeej 25:aac250164497 64 #define FS_OP_CREATE 17
Jeej 25:aac250164497 65 #define FS_OP_FLUSH 20
Jeej 30:d775c1409849 66 #define FS_OP_EXECUTE 31
Jeej 25:aac250164497 67 #define FS_OP_RETSTAT 32
Jeej 25:aac250164497 68 #define FS_OP_RETDATA 34
Jeej 25:aac250164497 69
Jeej 29:8e7c5c1e9aab 70
Jeej 25:aac250164497 71 // FS/COM-FS Status-codes. Mimics ALP ones.
Jeej 25:aac250164497 72 enum {
Jeej 25:aac250164497 73 FS_STAT_PENDING = 1,
Jeej 25:aac250164497 74 FS_STAT_OK = 0,
Jeej 25:aac250164497 75 FS_STAT_ERR_FID_NOEXIST = -1, // FF
Jeej 25:aac250164497 76 FS_STAT_ERR_FID_ALREADYEXIST = -2, // FE
Jeej 25:aac250164497 77 FS_STAT_ERR_NOTRESTORABLE = -3, // FD
Jeej 25:aac250164497 78 FS_STAT_ERR_PERMISSION = -4, // FC
Jeej 25:aac250164497 79 FS_STAT_ERR_LENGTH_OVFL = -5, // FB
Jeej 25:aac250164497 80 FS_STAT_ERR_ALLOC_OVFL = -6, // FA
Jeej 25:aac250164497 81 FS_STAT_ERR_START_OFFSET_OVFL = -7, // F9
Jeej 25:aac250164497 82 FS_STAT_ERR_WRITE_OVFL = -8, // F8
Jeej 25:aac250164497 83 FS_STAT_ERR_WRITE_PROTECTED = -9, // F7
Jeej 25:aac250164497 84 FS_STAT_ERR_UNKNOWN_OPERATION = -10, // F6
Jeej 25:aac250164497 85 FS_STAT_ERR_INCOMPLETE_OPERAND = -11, // F5
Jeej 25:aac250164497 86 FS_STAT_ERR_WRONG_OPERAND = -12, // F4
Jeej 25:aac250164497 87 FS_STAT_ERR_UNKNOWN = -127, // 80
Jeej 25:aac250164497 88 };
Jeej 25:aac250164497 89
Jeej 25:aac250164497 90
Jeej 25:aac250164497 91 // Memory "TYPE"
Jeej 41:a924aa709b6f 92 // ------------------------------------------------------
Jeej 41:a924aa709b6f 93 // | Sync | Distant | Com | MemType |
Jeej 41:a924aa709b6f 94 // ------------------------------------------------------
Jeej 41:a924aa709b6f 95 // | b7 | b6 | b5-b4 | b3-b0 |
Jeej 41:a924aa709b6f 96 // ------------------------------------------------------
Jeej 41:a924aa709b6f 97 #define FS_TYPE_SYNC 0x80
Jeej 41:a924aa709b6f 98 #define FS_TYPE_DISTANT 0x40
Jeej 41:a924aa709b6f 99 #define FS_MEM_TYPE(t) ((t)&0x0F)
Jeej 41:a924aa709b6f 100 #define FS_COM_TYPE(t) ((t)&0x30)
Jeej 41:a924aa709b6f 101 #define FS_DISTANT_TYPE(t) ((t)&0x70)
Jeej 43:28202405094d 102
Jeej 38:c1e7f97ab396 103 enum {
Jeej 38:c1e7f97ab396 104 // Markers
Jeej 38:c1e7f97ab396 105 NOFILE = 0,
Jeej 38:c1e7f97ab396 106 ERASED = 0xff,
Jeej 38:c1e7f97ab396 107 // Physical Type
Jeej 38:c1e7f97ab396 108 PFLASH = 1,
Jeej 38:c1e7f97ab396 109 EEPROM = 2,
Jeej 38:c1e7f97ab396 110 RAM = 3,
Jeej 41:a924aa709b6f 111 OTP = 4,
Jeej 41:a924aa709b6f 112 UNKNOWN = 0x0F,
Jeej 38:c1e7f97ab396 113 // PSRAM
Jeej 38:c1e7f97ab396 114 // DDR
Jeej 38:c1e7f97ab396 115 // ...etc
Jeej 44:8ebe6b70f932 116
Jeej 41:a924aa709b6f 117 FS_COM_UART = (0<<4),
Jeej 41:a924aa709b6f 118 FS_COM_SPI = (1<<4),
Jeej 41:a924aa709b6f 119 FS_COM_I2C = (2<<4),
Jeej 41:a924aa709b6f 120 // DISTANT Full Types
Jeej 41:a924aa709b6f 121 // Symetric HST-COM Files:
Jeej 41:a924aa709b6f 122 // - Header on Host side (i.e. need syncro on STAT)
Jeej 41:a924aa709b6f 123 // - Data on Host side
Jeej 41:a924aa709b6f 124 // - Same/Similar memory physical types
Jeej 41:a924aa709b6f 125 HOSTNS = FS_TYPE_SYNC + FS_TYPE_DISTANT + FS_COM_UART,
Jeej 41:a924aa709b6f 126 // Synchronised Symetric HST / COM Files
Jeej 41:a924aa709b6f 127 // - Idem Symetric HST-COM Files excepted:
Jeej 41:a924aa709b6f 128 // - Local header is assumed to be syncronised (through FS:SYNC)
Jeej 41:a924aa709b6f 129 HOSTS = FS_TYPE_DISTANT + FS_COM_UART,
Jeej 41:a924aa709b6f 130 HOST = FS_TYPE_DISTANT + FS_COM_UART, // Common Alias for FS_DISTANT_TYPE(t) usage
Jeej 25:aac250164497 131 };
Jeej 25:aac250164497 132
Jeej 44:8ebe6b70f932 133
Jeej 25:aac250164497 134 // D7AactP "trigger" TODO: is it really applicable ?
Jeej 25:aac250164497 135 enum { LIST=0, READ, WRITE, WRITE_FLUSH};
Jeej 25:aac250164497 136
Jeej 34:1311cc53201a 137
Jeej 34:1311cc53201a 138 // Utils
Jeej 45:b85384e7d825 139 #define D7A_READ(fid,offset,len,data) do {\
Jeej 45:b85384e7d825 140 int8_t status = d7a_alp_read_file((fid), (offset), (len), (uint8_t*)(data));\
Jeej 45:b85384e7d825 141 ASSERT(!status, "Read file error %d (FID:%d OFF:%d LEN:%d)\r\n", status, (fid), (offset), (len));\
Jeej 34:1311cc53201a 142 } while(0);
Jeej 34:1311cc53201a 143
Jeej 30:d775c1409849 144 void d7a_fs_open(const d7a_fs_callbacks_t* config);
Jeej 25:aac250164497 145 void d7a_fs_new_pkt(d7a_com_rx_msg_t* pkt);
Jeej 25:aac250164497 146 d7a_com_rx_msg_t* d7a_fs_wait_pkt( uint32_t millisec = osWaitForever );
Jeej 25:aac250164497 147
Jeej 25:aac250164497 148 #endif