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:
43:28202405094d
Child:
46:665391110051
New API working for local read/write.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Jeej 43:28202405094d 1 #include "mbed.h"
Jeej 43:28202405094d 2 #include "rtos.h"
Jeej 43:28202405094d 3 #include "dbg.h"
Jeej 43:28202405094d 4 #include "d7a.h"
Jeej 43:28202405094d 5 #include "d7a_com.h"
Jeej 43:28202405094d 6 #include "d7a_common.h"
Jeej 43:28202405094d 7 #include "d7a_fs.h"
Jeej 43:28202405094d 8 #include "d7a_modem.h"
Jeej 43:28202405094d 9 #include "d7a_sys.h"
Jeej 43:28202405094d 10 #include "d7a_alp.h"
Jeej 43:28202405094d 11
Jeej 43:28202405094d 12
Jeej 43:28202405094d 13 //======================================================================
Jeej 43:28202405094d 14 // d7a_open
Jeej 43:28202405094d 15 //----------------------------------------------------------------------
Jeej 43:28202405094d 16 /// @brief Open D7A driver and start the modem
Jeej 43:28202405094d 17 /// @param d7a_com_config_t* Com port configuration structure
Jeej 43:28202405094d 18 /// @param PinName Reset pin
Jeej 43:28202405094d 19 /// @param d7a_fs_callbacks_t* File system callbacks (You declare files if this is not specified)
Jeej 45:b85384e7d825 20 /// @return d7a_errors_t Error code
Jeej 43:28202405094d 21 //======================================================================
Jeej 45:b85384e7d825 22 d7a_errors_t d7a_open(const d7a_com_config_t* com_config, PinName reset_pin, const d7a_fs_callbacks_t* fs_callbacks)
Jeej 43:28202405094d 23 {
Jeej 45:b85384e7d825 24 FPRINT("\r\n");
Jeej 45:b85384e7d825 25
Jeej 43:28202405094d 26 d7a_com_open(com_config);
Jeej 43:28202405094d 27 d7a_sys_open();
Jeej 43:28202405094d 28 d7a_fs_open(fs_callbacks);
Jeej 45:b85384e7d825 29 d7a_alp_open();
Jeej 43:28202405094d 30 d7a_modem_open(reset_pin);
Jeej 45:b85384e7d825 31
Jeej 45:b85384e7d825 32 return D7A_ERR_NONE;
Jeej 43:28202405094d 33 }
Jeej 43:28202405094d 34
Jeej 43:28202405094d 35 //======================================================================
Jeej 43:28202405094d 36 // d7a_close
Jeej 43:28202405094d 37 //----------------------------------------------------------------------
Jeej 43:28202405094d 38 /// @brief Close D7A driver and stop the modem
Jeej 45:b85384e7d825 39 /// @return d7a_errors_t Error code
Jeej 43:28202405094d 40 //======================================================================
Jeej 45:b85384e7d825 41 d7a_errors_t d7a_close(void)
Jeej 43:28202405094d 42 {
Jeej 45:b85384e7d825 43 FPRINT("\r\n");
Jeej 45:b85384e7d825 44
Jeej 43:28202405094d 45 // TODO
Jeej 43:28202405094d 46 //d7a_modem_close();
Jeej 43:28202405094d 47 //d7a_fs_close();
Jeej 43:28202405094d 48 //d7a_sys_close();
Jeej 43:28202405094d 49 d7a_com_close();
Jeej 45:b85384e7d825 50
Jeej 45:b85384e7d825 51 return D7A_ERR_NONE;
Jeej 43:28202405094d 52 }
Jeej 43:28202405094d 53
Jeej 43:28202405094d 54
Jeej 43:28202405094d 55 //======================================================================
Jeej 43:28202405094d 56 // d7a_start
Jeej 43:28202405094d 57 //----------------------------------------------------------------------
Jeej 43:28202405094d 58 /// @brief Start the modem
Jeej 45:b85384e7d825 59 /// @return d7a_errors_t Error code
Jeej 43:28202405094d 60 //======================================================================
Jeej 45:b85384e7d825 61 d7a_errors_t d7a_start(void)
Jeej 43:28202405094d 62 {
Jeej 45:b85384e7d825 63 FPRINT("\r\n");
Jeej 45:b85384e7d825 64
Jeej 45:b85384e7d825 65 d7a_modem_start();
Jeej 45:b85384e7d825 66
Jeej 45:b85384e7d825 67 return D7A_ERR_NONE;
Jeej 43:28202405094d 68 }
Jeej 43:28202405094d 69
Jeej 43:28202405094d 70 //======================================================================
Jeej 43:28202405094d 71 // d7a_stop
Jeej 43:28202405094d 72 //----------------------------------------------------------------------
Jeej 43:28202405094d 73 /// @brief Stop the modem (goes to low power)
Jeej 45:b85384e7d825 74 /// @return d7a_errors_t Error code
Jeej 43:28202405094d 75 //======================================================================
Jeej 45:b85384e7d825 76 d7a_errors_t d7a_stop(void)
Jeej 43:28202405094d 77 {
Jeej 45:b85384e7d825 78 FPRINT("\r\n");
Jeej 45:b85384e7d825 79
Jeej 45:b85384e7d825 80 d7a_modem_stop();
Jeej 45:b85384e7d825 81
Jeej 45:b85384e7d825 82 return D7A_ERR_NONE;
Jeej 43:28202405094d 83 }
Jeej 43:28202405094d 84
Jeej 43:28202405094d 85 //======================================================================
Jeej 43:28202405094d 86 // d7a_create
Jeej 43:28202405094d 87 //----------------------------------------------------------------------
Jeej 43:28202405094d 88 /// @brief Creates a file on the modem
Jeej 43:28202405094d 89 /// @param d7a_fs_storage_t Type of file
Jeej 43:28202405094d 90 /// @param d7a_fs_perm_t Access permissions
Jeej 43:28202405094d 91 /// @param uint32_t Length of the created file
Jeej 43:28202405094d 92 /// @param uint32_t Maximum size of the file
Jeej 43:28202405094d 93 /// @param uint8_t File ID to an eventual Action file
Jeej 43:28202405094d 94 /// @param uint8_t File ID to an eventual Interface file
Jeej 45:b85384e7d825 95 /// @return d7a_errors_t Error code
Jeej 43:28202405094d 96 //======================================================================
Jeej 45:b85384e7d825 97 d7a_errors_t d7a_create(const uint8_t file_id, d7a_fs_storage_t prop, d7a_fs_perm_t perm, uint32_t size, uint32_t alloc, uint8_t action_file, uint8_t interface)
Jeej 43:28202405094d 98 {
Jeej 45:b85384e7d825 99 FPRINT("\r\n");
Jeej 45:b85384e7d825 100
Jeej 45:b85384e7d825 101 d7a_errors_t err;
Jeej 45:b85384e7d825 102
Jeej 45:b85384e7d825 103 DPRINT("Create %d.\r\n", file_id);
Jeej 45:b85384e7d825 104
Jeej 43:28202405094d 105 register_file_param_t file_infos = {
Jeej 43:28202405094d 106 .fid = file_id,
Jeej 45:b85384e7d825 107 .type = RAM,
Jeej 43:28202405094d 108 .afid = action_file,
Jeej 43:28202405094d 109 .ifid = interface,
Jeej 45:b85384e7d825 110 .prop = (uint8_t)prop | ((interface)? FS_ACT_EN : 0),
Jeej 43:28202405094d 111 .perm = (uint8_t)perm,
Jeej 43:28202405094d 112 .size = size,
Jeej 43:28202405094d 113 .alloc = alloc,
Jeej 43:28202405094d 114 };
Jeej 43:28202405094d 115
Jeej 45:b85384e7d825 116 err = d7a_modem_register(&file_infos);
Jeej 45:b85384e7d825 117
Jeej 45:b85384e7d825 118 DPRINT("Create %d Done. err %d\r\n", file_id, err);
Jeej 45:b85384e7d825 119
Jeej 45:b85384e7d825 120 return err;
Jeej 43:28202405094d 121 }
Jeej 43:28202405094d 122
Jeej 43:28202405094d 123 //======================================================================
Jeej 43:28202405094d 124 // d7a_declare
Jeej 43:28202405094d 125 //----------------------------------------------------------------------
Jeej 43:28202405094d 126 /// @brief Declare a file stocked on the host to the modem (need to have implemented the fs_callbacks)
Jeej 43:28202405094d 127 /// @param uint8_t File ID of file to declare
Jeej 43:28202405094d 128 /// @param d7a_fs_storage_t Type of file
Jeej 43:28202405094d 129 /// @param d7a_fs_perm_t Access permissions
Jeej 43:28202405094d 130 /// @param uint32_t Length of the created file
Jeej 43:28202405094d 131 /// @param uint32_t Maximum size of the file
Jeej 43:28202405094d 132 /// @param uint8_t File ID to an eventual Action file
Jeej 43:28202405094d 133 /// @param uint8_t File ID to an eventual Interface file
Jeej 45:b85384e7d825 134 /// @return d7a_errors_t Error code
Jeej 43:28202405094d 135 //======================================================================
Jeej 45:b85384e7d825 136 d7a_errors_t d7a_declare(const uint8_t file_id, d7a_fs_storage_t prop, d7a_fs_perm_t perm, uint32_t length, uint32_t alloc, uint8_t action_file, uint8_t interface)
Jeej 43:28202405094d 137 {
Jeej 45:b85384e7d825 138 FPRINT("\r\n");
Jeej 45:b85384e7d825 139
Jeej 45:b85384e7d825 140 DPRINT("Declare %d.\r\n", file_id);
Jeej 45:b85384e7d825 141
Jeej 43:28202405094d 142 register_file_param_t file_infos = {
Jeej 43:28202405094d 143 .fid = file_id,
Jeej 45:b85384e7d825 144 .type = HOST+RAM,
Jeej 43:28202405094d 145 .afid = action_file,
Jeej 43:28202405094d 146 .ifid = interface,
Jeej 45:b85384e7d825 147 .prop = (uint8_t)prop | ((interface)? FS_ACT_EN : 0),
Jeej 43:28202405094d 148 .perm = (uint8_t)perm,
Jeej 43:28202405094d 149 .size = length,
Jeej 43:28202405094d 150 .alloc = alloc,
Jeej 43:28202405094d 151 };
Jeej 43:28202405094d 152
Jeej 45:b85384e7d825 153 d7a_modem_register(&file_infos);
Jeej 45:b85384e7d825 154
Jeej 45:b85384e7d825 155 DPRINT("Declare %d Done\r\n", file_id);
Jeej 45:b85384e7d825 156
Jeej 45:b85384e7d825 157 return D7A_ERR_NONE;
Jeej 43:28202405094d 158 }
Jeej 43:28202405094d 159
Jeej 43:28202405094d 160 //======================================================================
Jeej 43:28202405094d 161 // d7a_read
Jeej 43:28202405094d 162 //----------------------------------------------------------------------
Jeej 43:28202405094d 163 /// @brief Read data from a file
Jeej 43:28202405094d 164 /// @param uint8_t File ID of file to read
Jeej 43:28202405094d 165 /// @param uint32_t Offset from which to start reading
Jeej 43:28202405094d 166 /// @param uint32_t Size of data to read
Jeej 43:28202405094d 167 /// @param uint8_t* Buffer to retrieve data
Jeej 43:28202405094d 168 /// @param uint8_t Retry policy
Jeej 45:b85384e7d825 169 /// @return d7a_errors_t Error code
Jeej 43:28202405094d 170 //======================================================================
Jeej 45:b85384e7d825 171 d7a_errors_t d7a_read(const uint8_t file_id, const uint32_t offset, const uint32_t size, const uint8_t* buf, d7a_addressee_t* addressee, uint8_t retry)
Jeej 43:28202405094d 172 {
Jeej 45:b85384e7d825 173 FPRINT("\r\n");
Jeej 45:b85384e7d825 174
Jeej 45:b85384e7d825 175 d7a_alp_read_file(file_id, offset, size, buf, addressee, retry);
Jeej 45:b85384e7d825 176
Jeej 45:b85384e7d825 177 return D7A_ERR_NONE;
Jeej 43:28202405094d 178 }
Jeej 43:28202405094d 179
Jeej 43:28202405094d 180 //======================================================================
Jeej 43:28202405094d 181 // d7a_write
Jeej 43:28202405094d 182 //----------------------------------------------------------------------
Jeej 43:28202405094d 183 /// @brief Write data to a file
Jeej 43:28202405094d 184 /// @param uint8_t File ID of file to write
Jeej 43:28202405094d 185 /// @param uint32_t Offset from which to start writing
Jeej 43:28202405094d 186 /// @param uint32_t Size of data to write
Jeej 43:28202405094d 187 /// @param uint8_t* Buffer of the data to write
Jeej 45:b85384e7d825 188 /// @return d7a_errors_t Error code
Jeej 43:28202405094d 189 //======================================================================
Jeej 45:b85384e7d825 190 d7a_errors_t d7a_write(const uint8_t file_id, const uint32_t offset, const uint32_t size, const uint8_t* const buf, d7a_addressee_t* addressee, uint8_t retry, bool resp)
Jeej 43:28202405094d 191 {
Jeej 45:b85384e7d825 192 FPRINT("\r\n");
Jeej 45:b85384e7d825 193
Jeej 45:b85384e7d825 194 d7a_alp_write_file(file_id, offset, size, buf, addressee, retry, resp);
Jeej 45:b85384e7d825 195
Jeej 45:b85384e7d825 196 return D7A_ERR_NONE;
Jeej 43:28202405094d 197 }