Trond Enger / d7a_1x

Fork of d7a_1x by WizziLab

Committer:
Jeej
Date:
Mon Sep 05 13:21:50 2016 +0000
Revision:
50:30440c9aeb7c
Parent:
49:81d5bddb02f0
Child:
51:644de6fe1ee7
Disabled dbg prints

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 49:81d5bddb02f0 12 bool g_open = false;
Jeej 49:81d5bddb02f0 13 bool g_local_fs = false;
Jeej 43:28202405094d 14
Jeej 43:28202405094d 15 //======================================================================
Jeej 43:28202405094d 16 // d7a_open
Jeej 43:28202405094d 17 //----------------------------------------------------------------------
Jeej 43:28202405094d 18 /// @brief Open D7A driver and start the modem
Jeej 43:28202405094d 19 /// @param d7a_com_config_t* Com port configuration structure
Jeej 43:28202405094d 20 /// @param PinName Reset pin
Jeej 43:28202405094d 21 /// @param d7a_fs_callbacks_t* File system callbacks (You declare files if this is not specified)
Jeej 45:b85384e7d825 22 /// @return d7a_errors_t Error code
Jeej 43:28202405094d 23 //======================================================================
Jeej 49:81d5bddb02f0 24 d7a_errors_t d7a_open(const d7a_com_config_t* com_config, PinName reset_pin, const d7a_callbacks_t* callbacks)
Jeej 43:28202405094d 25 {
Jeej 45:b85384e7d825 26 FPRINT("\r\n");
Jeej 45:b85384e7d825 27
Jeej 49:81d5bddb02f0 28 d7a_errors_t err;
Jeej 49:81d5bddb02f0 29
Jeej 49:81d5bddb02f0 30 if (g_open)
Jeej 49:81d5bddb02f0 31 {
Jeej 49:81d5bddb02f0 32 IPRINT("D7A Already open\r\n");
Jeej 49:81d5bddb02f0 33 return D7A_ERR_NONE;
Jeej 49:81d5bddb02f0 34 }
Jeej 49:81d5bddb02f0 35
Jeej 49:81d5bddb02f0 36 err = d7a_com_open(com_config);
Jeej 49:81d5bddb02f0 37 if (err < 0) return err;
Jeej 49:81d5bddb02f0 38
Jeej 49:81d5bddb02f0 39 err = d7a_sys_open();
Jeej 49:81d5bddb02f0 40 if (err < 0) return err;
Jeej 45:b85384e7d825 41
Jeej 49:81d5bddb02f0 42 err = d7a_fs_open(callbacks->write_file, callbacks->read_file);
Jeej 49:81d5bddb02f0 43 if (err < 0) return err;
Jeej 49:81d5bddb02f0 44
Jeej 49:81d5bddb02f0 45 err = d7a_alp_open();
Jeej 49:81d5bddb02f0 46 if (err < 0) return err;
Jeej 49:81d5bddb02f0 47
Jeej 49:81d5bddb02f0 48 err = d7a_modem_open(reset_pin, callbacks->notif_done);
Jeej 49:81d5bddb02f0 49 if (err < 0) return err;
Jeej 49:81d5bddb02f0 50
Jeej 49:81d5bddb02f0 51 if (callbacks->write_file != NULL && callbacks->read_file != NULL)
Jeej 49:81d5bddb02f0 52 {
Jeej 49:81d5bddb02f0 53 g_local_fs = true;
Jeej 49:81d5bddb02f0 54 }
Jeej 49:81d5bddb02f0 55
Jeej 49:81d5bddb02f0 56 g_open = true;
Jeej 49:81d5bddb02f0 57
Jeej 49:81d5bddb02f0 58 return err;
Jeej 43:28202405094d 59 }
Jeej 43:28202405094d 60
Jeej 43:28202405094d 61 //======================================================================
Jeej 43:28202405094d 62 // d7a_close
Jeej 43:28202405094d 63 //----------------------------------------------------------------------
Jeej 43:28202405094d 64 /// @brief Close D7A driver and stop the modem
Jeej 45:b85384e7d825 65 /// @return d7a_errors_t Error code
Jeej 43:28202405094d 66 //======================================================================
Jeej 45:b85384e7d825 67 d7a_errors_t d7a_close(void)
Jeej 43:28202405094d 68 {
Jeej 45:b85384e7d825 69 FPRINT("\r\n");
Jeej 45:b85384e7d825 70
Jeej 49:81d5bddb02f0 71 d7a_errors_t err;
Jeej 49:81d5bddb02f0 72
Jeej 43:28202405094d 73 // TODO
Jeej 43:28202405094d 74 //d7a_modem_close();
Jeej 43:28202405094d 75 //d7a_fs_close();
Jeej 43:28202405094d 76 //d7a_sys_close();
Jeej 50:30440c9aeb7c 77 err = d7a_com_close();
Jeej 45:b85384e7d825 78
Jeej 50:30440c9aeb7c 79 return err;
Jeej 43:28202405094d 80 }
Jeej 43:28202405094d 81
Jeej 43:28202405094d 82
Jeej 43:28202405094d 83 //======================================================================
Jeej 43:28202405094d 84 // d7a_start
Jeej 43:28202405094d 85 //----------------------------------------------------------------------
Jeej 43:28202405094d 86 /// @brief Start the modem
Jeej 45:b85384e7d825 87 /// @return d7a_errors_t Error code
Jeej 43:28202405094d 88 //======================================================================
Jeej 45:b85384e7d825 89 d7a_errors_t d7a_start(void)
Jeej 43:28202405094d 90 {
Jeej 45:b85384e7d825 91 FPRINT("\r\n");
Jeej 45:b85384e7d825 92
Jeej 49:81d5bddb02f0 93 d7a_errors_t err;
Jeej 49:81d5bddb02f0 94
Jeej 50:30440c9aeb7c 95 err = d7a_modem_start();
Jeej 45:b85384e7d825 96
Jeej 50:30440c9aeb7c 97 return err;
Jeej 43:28202405094d 98 }
Jeej 43:28202405094d 99
Jeej 43:28202405094d 100 //======================================================================
Jeej 43:28202405094d 101 // d7a_stop
Jeej 43:28202405094d 102 //----------------------------------------------------------------------
Jeej 43:28202405094d 103 /// @brief Stop the modem (goes to low power)
Jeej 45:b85384e7d825 104 /// @return d7a_errors_t Error code
Jeej 43:28202405094d 105 //======================================================================
Jeej 45:b85384e7d825 106 d7a_errors_t d7a_stop(void)
Jeej 43:28202405094d 107 {
Jeej 45:b85384e7d825 108 FPRINT("\r\n");
Jeej 45:b85384e7d825 109
Jeej 49:81d5bddb02f0 110 d7a_errors_t err;
Jeej 49:81d5bddb02f0 111
Jeej 50:30440c9aeb7c 112 err = d7a_modem_stop();
Jeej 45:b85384e7d825 113
Jeej 50:30440c9aeb7c 114 return err;
Jeej 43:28202405094d 115 }
Jeej 43:28202405094d 116
Jeej 43:28202405094d 117 //======================================================================
Jeej 43:28202405094d 118 // d7a_create
Jeej 43:28202405094d 119 //----------------------------------------------------------------------
Jeej 43:28202405094d 120 /// @brief Creates a file on the modem
Jeej 43:28202405094d 121 /// @param d7a_fs_storage_t Type of file
Jeej 43:28202405094d 122 /// @param d7a_fs_perm_t Access permissions
Jeej 43:28202405094d 123 /// @param uint32_t Length of the created file
Jeej 43:28202405094d 124 /// @param uint32_t Maximum size of the file
Jeej 43:28202405094d 125 /// @param uint8_t File ID to an eventual Action file
Jeej 43:28202405094d 126 /// @param uint8_t File ID to an eventual Interface file
Jeej 45:b85384e7d825 127 /// @return d7a_errors_t Error code
Jeej 43:28202405094d 128 //======================================================================
Jeej 45:b85384e7d825 129 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 130 {
Jeej 45:b85384e7d825 131 FPRINT("\r\n");
Jeej 45:b85384e7d825 132
Jeej 45:b85384e7d825 133 d7a_errors_t err;
Jeej 45:b85384e7d825 134
Jeej 45:b85384e7d825 135 DPRINT("Create %d.\r\n", file_id);
Jeej 45:b85384e7d825 136
Jeej 43:28202405094d 137 register_file_param_t file_infos = {
Jeej 43:28202405094d 138 .fid = file_id,
Jeej 45:b85384e7d825 139 .type = RAM,
Jeej 43:28202405094d 140 .afid = action_file,
Jeej 43:28202405094d 141 .ifid = interface,
Jeej 45:b85384e7d825 142 .prop = (uint8_t)prop | ((interface)? FS_ACT_EN : 0),
Jeej 43:28202405094d 143 .perm = (uint8_t)perm,
Jeej 43:28202405094d 144 .size = size,
Jeej 43:28202405094d 145 .alloc = alloc,
Jeej 43:28202405094d 146 };
Jeej 43:28202405094d 147
Jeej 45:b85384e7d825 148 err = d7a_modem_register(&file_infos);
Jeej 45:b85384e7d825 149
Jeej 45:b85384e7d825 150 DPRINT("Create %d Done. err %d\r\n", file_id, err);
Jeej 45:b85384e7d825 151
Jeej 45:b85384e7d825 152 return err;
Jeej 43:28202405094d 153 }
Jeej 43:28202405094d 154
Jeej 43:28202405094d 155 //======================================================================
Jeej 43:28202405094d 156 // d7a_declare
Jeej 43:28202405094d 157 //----------------------------------------------------------------------
Jeej 43:28202405094d 158 /// @brief Declare a file stocked on the host to the modem (need to have implemented the fs_callbacks)
Jeej 43:28202405094d 159 /// @param uint8_t File ID of file to declare
Jeej 43:28202405094d 160 /// @param d7a_fs_storage_t Type of file
Jeej 43:28202405094d 161 /// @param d7a_fs_perm_t Access permissions
Jeej 43:28202405094d 162 /// @param uint32_t Length of the created file
Jeej 43:28202405094d 163 /// @param uint32_t Maximum size of the file
Jeej 43:28202405094d 164 /// @param uint8_t File ID to an eventual Action file
Jeej 43:28202405094d 165 /// @param uint8_t File ID to an eventual Interface file
Jeej 45:b85384e7d825 166 /// @return d7a_errors_t Error code
Jeej 43:28202405094d 167 //======================================================================
Jeej 45:b85384e7d825 168 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 169 {
Jeej 45:b85384e7d825 170 FPRINT("\r\n");
Jeej 49:81d5bddb02f0 171
Jeej 46:665391110051 172 d7a_errors_t err;
Jeej 46:665391110051 173
Jeej 45:b85384e7d825 174 DPRINT("Declare %d.\r\n", file_id);
Jeej 45:b85384e7d825 175
Jeej 49:81d5bddb02f0 176 ASSERT(g_local_fs, "You cannot delare a file is the write_file/read_file callbacks are not specified\r\n");
Jeej 49:81d5bddb02f0 177
Jeej 43:28202405094d 178 register_file_param_t file_infos = {
Jeej 43:28202405094d 179 .fid = file_id,
Jeej 45:b85384e7d825 180 .type = HOST+RAM,
Jeej 43:28202405094d 181 .afid = action_file,
Jeej 43:28202405094d 182 .ifid = interface,
Jeej 45:b85384e7d825 183 .prop = (uint8_t)prop | ((interface)? FS_ACT_EN : 0),
Jeej 43:28202405094d 184 .perm = (uint8_t)perm,
Jeej 43:28202405094d 185 .size = length,
Jeej 43:28202405094d 186 .alloc = alloc,
Jeej 43:28202405094d 187 };
Jeej 43:28202405094d 188
Jeej 46:665391110051 189 err = d7a_modem_register(&file_infos);
Jeej 45:b85384e7d825 190
Jeej 45:b85384e7d825 191 DPRINT("Declare %d Done\r\n", file_id);
Jeej 45:b85384e7d825 192
Jeej 46:665391110051 193 return err;
Jeej 43:28202405094d 194 }
Jeej 43:28202405094d 195
Jeej 43:28202405094d 196 //======================================================================
Jeej 43:28202405094d 197 // d7a_read
Jeej 43:28202405094d 198 //----------------------------------------------------------------------
Jeej 43:28202405094d 199 /// @brief Read data from a file
Jeej 43:28202405094d 200 /// @param uint8_t File ID of file to read
Jeej 43:28202405094d 201 /// @param uint32_t Offset from which to start reading
Jeej 43:28202405094d 202 /// @param uint32_t Size of data to read
Jeej 43:28202405094d 203 /// @param uint8_t* Buffer to retrieve data
Jeej 46:665391110051 204 /// @param d7a_addressee_t* Addressee to an eventual distant device
Jeej 46:665391110051 205 /// @param alp_rpol_t Index to the retry policy to use
Jeej 45:b85384e7d825 206 /// @return d7a_errors_t Error code
Jeej 43:28202405094d 207 //======================================================================
Jeej 46:665391110051 208 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, alp_rpol_t retry)
Jeej 43:28202405094d 209 {
Jeej 45:b85384e7d825 210 FPRINT("\r\n");
Jeej 45:b85384e7d825 211
Jeej 46:665391110051 212 d7a_errors_t err;
Jeej 46:665391110051 213
Jeej 46:665391110051 214 PRINT("Read %d.\r\n", file_id);
Jeej 46:665391110051 215
Jeej 46:665391110051 216 err = d7a_alp_read_file(file_id, offset, size, buf, addressee, retry);
Jeej 46:665391110051 217
Jeej 46:665391110051 218 PRINT("Read %d Done. err %d\r\n", file_id, err);
Jeej 45:b85384e7d825 219
Jeej 46:665391110051 220 return err;
Jeej 46:665391110051 221 }
Jeej 46:665391110051 222
Jeej 46:665391110051 223 //======================================================================
Jeej 46:665391110051 224 // d7a_write
Jeej 46:665391110051 225 //----------------------------------------------------------------------
Jeej 46:665391110051 226 /// @brief Write data to a file
Jeej 46:665391110051 227 /// @param uint8_t File ID of file to write
Jeej 46:665391110051 228 /// @param uint32_t Offset from which to start writing
Jeej 46:665391110051 229 /// @param uint32_t Size of data to write
Jeej 46:665391110051 230 /// @param uint8_t* Buffer of the data to write
Jeej 46:665391110051 231 /// @param d7a_addressee_t* Addressee to an eventual distant device
Jeej 46:665391110051 232 /// @param alp_rpol_t Index to the retry policy to use
Jeej 46:665391110051 233 /// @return d7a_errors_t Error code
Jeej 46:665391110051 234 //======================================================================
Jeej 46:665391110051 235 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, alp_rpol_t retry, bool resp)
Jeej 46:665391110051 236 {
Jeej 46:665391110051 237 FPRINT("\r\n");
Jeej 46:665391110051 238
Jeej 46:665391110051 239 d7a_errors_t err;
Jeej 46:665391110051 240
Jeej 46:665391110051 241 DPRINT("Write %d.\r\n", file_id);
Jeej 46:665391110051 242
Jeej 46:665391110051 243 err = d7a_alp_write_file(file_id, offset, size, buf, addressee, retry, resp);
Jeej 46:665391110051 244
Jeej 46:665391110051 245 DPRINT("Write %d Done. err %d\r\n", file_id, err);
Jeej 46:665391110051 246
Jeej 46:665391110051 247 return err;
Jeej 43:28202405094d 248 }
Jeej 43:28202405094d 249
Jeej 43:28202405094d 250 //======================================================================
Jeej 43:28202405094d 251 // d7a_write
Jeej 43:28202405094d 252 //----------------------------------------------------------------------
Jeej 43:28202405094d 253 /// @brief Write data to a file
Jeej 43:28202405094d 254 /// @param uint8_t File ID of file to write
Jeej 43:28202405094d 255 /// @param uint32_t Offset from which to start writing
Jeej 43:28202405094d 256 /// @param uint32_t Size of data to write
Jeej 43:28202405094d 257 /// @param uint8_t* Buffer of the data to write
Jeej 45:b85384e7d825 258 /// @return d7a_errors_t Error code
Jeej 43:28202405094d 259 //======================================================================
Jeej 46:665391110051 260 d7a_errors_t d7a_notify(const uint8_t file_id, const uint32_t offset, const uint32_t size)
Jeej 43:28202405094d 261 {
Jeej 45:b85384e7d825 262 FPRINT("\r\n");
Jeej 45:b85384e7d825 263
Jeej 46:665391110051 264 d7a_errors_t err;
Jeej 46:665391110051 265
Jeej 46:665391110051 266 DPRINT("Notify %d.\r\n", file_id);
Jeej 45:b85384e7d825 267
Jeej 46:665391110051 268 notify_file_param_t notif = {
Jeej 46:665391110051 269 .bf.fid = file_id,
Jeej 46:665391110051 270 .bf.offset = offset,
Jeej 46:665391110051 271 .bf.size = size
Jeej 46:665391110051 272 };
Jeej 46:665391110051 273
Jeej 46:665391110051 274 err = d7a_modem_notify(&notif);
Jeej 46:665391110051 275
Jeej 46:665391110051 276 DPRINT("Notify %d Done. err %d\r\n", file_id, err);
Jeej 46:665391110051 277
Jeej 46:665391110051 278 return err;
Jeej 50:30440c9aeb7c 279 }
Jeej 50:30440c9aeb7c 280
Jeej 50:30440c9aeb7c 281
Jeej 50:30440c9aeb7c 282 //======================================================================
Jeej 50:30440c9aeb7c 283 // d7a_modem_print_infos
Jeej 50:30440c9aeb7c 284 //----------------------------------------------------------------------
Jeej 50:30440c9aeb7c 285 /// @brief Prints the modem infos
Jeej 50:30440c9aeb7c 286 //======================================================================
Jeej 50:30440c9aeb7c 287 void d7a_modem_print_infos(void)
Jeej 50:30440c9aeb7c 288 {
Jeej 50:30440c9aeb7c 289 uint8_t uid[8];
Jeej 50:30440c9aeb7c 290 d7a_revision_t rev;
Jeej 50:30440c9aeb7c 291
Jeej 50:30440c9aeb7c 292 ASSERT(d7a_read(0, 0, 8, uid) >= D7A_ERR_NONE, "Failed to read UID file\r\n");
Jeej 50:30440c9aeb7c 293 ASSERT(d7a_read(2, 0, sizeof(d7a_revision_t), (uint8_t*)&rev) >= D7A_ERR_NONE, "Failed to read REV file\r\n");
Jeej 50:30440c9aeb7c 294
Jeej 50:30440c9aeb7c 295 PRINT("------------ D7A Modem infos ------------\r\n");
Jeej 50:30440c9aeb7c 296 PRINT_DATA("| UID: ", "%02X", uid, 8, " |\r\n");
Jeej 50:30440c9aeb7c 297 PRINT("| Manufacturer ID: %08X |\r\n", rev.manufacturer_id);
Jeej 50:30440c9aeb7c 298 PRINT("| Device ID: %08X |\r\n", rev.device_id);
Jeej 50:30440c9aeb7c 299 PRINT("| Hardware version: %08X |\r\n", rev.hw_version);
Jeej 50:30440c9aeb7c 300 PRINT("| Firmware version: %d-%d.%d.%d-%08x \t|\r\n", rev.fw_version.id, rev.fw_version.major, rev.fw_version.minor, rev.fw_version.patch, rev.fw_version.hash);
Jeej 50:30440c9aeb7c 301 PRINT("| File system CRC: 0x%08x |\r\n", rev.fs_crc);
Jeej 50:30440c9aeb7c 302 PRINT("-----------------------------------------\r\n");
Jeej 50:30440c9aeb7c 303
Jeej 43:28202405094d 304 }