Trond Enger / d7a_1x

Fork of d7a_1x by WizziLab

Committer:
Jeej
Date:
Wed Sep 07 09:32:01 2016 +0000
Revision:
55:5ea18a3a01b9
Parent:
53:3e4aa4b57090
Child:
56:da34fc11e760
Defined actions and retry policies for notifications

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 55:5ea18a3a01b9 12 #define FIRST_IFT_FILE (108)
Jeej 55:5ea18a3a01b9 13
Jeej 49:81d5bddb02f0 14 bool g_open = false;
Jeej 49:81d5bddb02f0 15 bool g_local_fs = false;
Jeej 43:28202405094d 16
Jeej 53:3e4aa4b57090 17
Jeej 49:81d5bddb02f0 18 d7a_errors_t d7a_open(const d7a_com_config_t* com_config, PinName reset_pin, const d7a_callbacks_t* callbacks)
Jeej 43:28202405094d 19 {
Jeej 45:b85384e7d825 20 FPRINT("\r\n");
Jeej 45:b85384e7d825 21
Jeej 49:81d5bddb02f0 22 d7a_errors_t err;
Jeej 49:81d5bddb02f0 23
Jeej 49:81d5bddb02f0 24 if (g_open)
Jeej 49:81d5bddb02f0 25 {
Jeej 51:644de6fe1ee7 26 WARNING(false, "D7A Already open\r\n");
Jeej 49:81d5bddb02f0 27 return D7A_ERR_NONE;
Jeej 49:81d5bddb02f0 28 }
Jeej 49:81d5bddb02f0 29
Jeej 55:5ea18a3a01b9 30 do
Jeej 55:5ea18a3a01b9 31 {
Jeej 55:5ea18a3a01b9 32
Jeej 55:5ea18a3a01b9 33 err = d7a_com_open(com_config);
Jeej 55:5ea18a3a01b9 34 if (err < 0) break;
Jeej 55:5ea18a3a01b9 35
Jeej 55:5ea18a3a01b9 36 err = d7a_sys_open();
Jeej 55:5ea18a3a01b9 37 if (err < 0) break;
Jeej 55:5ea18a3a01b9 38
Jeej 55:5ea18a3a01b9 39 err = d7a_fs_open(callbacks->write_file, callbacks->read_file);
Jeej 55:5ea18a3a01b9 40 if (err < 0) break;
Jeej 55:5ea18a3a01b9 41
Jeej 55:5ea18a3a01b9 42 err = d7a_alp_open();
Jeej 55:5ea18a3a01b9 43 if (err < 0) break;
Jeej 55:5ea18a3a01b9 44
Jeej 55:5ea18a3a01b9 45 err = d7a_modem_open(reset_pin, callbacks->notif_done);
Jeej 55:5ea18a3a01b9 46 if (err < 0) break;
Jeej 55:5ea18a3a01b9 47
Jeej 55:5ea18a3a01b9 48 if (callbacks->write_file != NULL && callbacks->read_file != NULL)
Jeej 55:5ea18a3a01b9 49 {
Jeej 55:5ea18a3a01b9 50 g_local_fs = true;
Jeej 55:5ea18a3a01b9 51 }
Jeej 55:5ea18a3a01b9 52
Jeej 55:5ea18a3a01b9 53 g_open = true;
Jeej 55:5ea18a3a01b9 54
Jeej 55:5ea18a3a01b9 55 } while (0);
Jeej 49:81d5bddb02f0 56
Jeej 55:5ea18a3a01b9 57 WARNING(err >= D7A_ERR_NONE, "%s err %d\r\n", __FUNCTION__, err);
Jeej 49:81d5bddb02f0 58
Jeej 49:81d5bddb02f0 59 return err;
Jeej 43:28202405094d 60 }
Jeej 43:28202405094d 61
Jeej 53:3e4aa4b57090 62
Jeej 45:b85384e7d825 63 d7a_errors_t d7a_close(void)
Jeej 43:28202405094d 64 {
Jeej 45:b85384e7d825 65 FPRINT("\r\n");
Jeej 45:b85384e7d825 66
Jeej 49:81d5bddb02f0 67 d7a_errors_t err;
Jeej 49:81d5bddb02f0 68
Jeej 43:28202405094d 69 // TODO
Jeej 43:28202405094d 70 //d7a_modem_close();
Jeej 43:28202405094d 71 //d7a_fs_close();
Jeej 43:28202405094d 72 //d7a_sys_close();
Jeej 50:30440c9aeb7c 73 err = d7a_com_close();
Jeej 45:b85384e7d825 74
Jeej 55:5ea18a3a01b9 75 WARNING(err >= D7A_ERR_NONE, "%s err %d\r\n", __FUNCTION__, err);
Jeej 55:5ea18a3a01b9 76
Jeej 50:30440c9aeb7c 77 return err;
Jeej 43:28202405094d 78 }
Jeej 43:28202405094d 79
Jeej 43:28202405094d 80
Jeej 45:b85384e7d825 81 d7a_errors_t d7a_start(void)
Jeej 43:28202405094d 82 {
Jeej 45:b85384e7d825 83 FPRINT("\r\n");
Jeej 45:b85384e7d825 84
Jeej 49:81d5bddb02f0 85 d7a_errors_t err;
Jeej 49:81d5bddb02f0 86
Jeej 50:30440c9aeb7c 87 err = d7a_modem_start();
Jeej 45:b85384e7d825 88
Jeej 55:5ea18a3a01b9 89 WARNING(err >= D7A_ERR_NONE, "%s err %d\r\n", __FUNCTION__, err);
Jeej 55:5ea18a3a01b9 90
Jeej 50:30440c9aeb7c 91 return err;
Jeej 43:28202405094d 92 }
Jeej 43:28202405094d 93
Jeej 53:3e4aa4b57090 94
Jeej 45:b85384e7d825 95 d7a_errors_t d7a_stop(void)
Jeej 43:28202405094d 96 {
Jeej 45:b85384e7d825 97 FPRINT("\r\n");
Jeej 45:b85384e7d825 98
Jeej 49:81d5bddb02f0 99 d7a_errors_t err;
Jeej 49:81d5bddb02f0 100
Jeej 50:30440c9aeb7c 101 err = d7a_modem_stop();
Jeej 45:b85384e7d825 102
Jeej 55:5ea18a3a01b9 103 WARNING(err >= D7A_ERR_NONE, "%s err %d\r\n", __FUNCTION__, err);
Jeej 55:5ea18a3a01b9 104
Jeej 50:30440c9aeb7c 105 return err;
Jeej 43:28202405094d 106 }
Jeej 43:28202405094d 107
Jeej 53:3e4aa4b57090 108
Jeej 55:5ea18a3a01b9 109 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, d7a_action_t action, alp_rpol_t retry)
Jeej 43:28202405094d 110 {
Jeej 45:b85384e7d825 111 FPRINT("\r\n");
Jeej 45:b85384e7d825 112
Jeej 45:b85384e7d825 113 d7a_errors_t err;
Jeej 45:b85384e7d825 114
Jeej 45:b85384e7d825 115 DPRINT("Create %d.\r\n", file_id);
Jeej 45:b85384e7d825 116
Jeej 43:28202405094d 117 register_file_param_t file_infos = {
Jeej 43:28202405094d 118 .fid = file_id,
Jeej 45:b85384e7d825 119 .type = RAM,
Jeej 55:5ea18a3a01b9 120 .afid = action,
Jeej 55:5ea18a3a01b9 121 .ifid = FIRST_IFT_FILE + retry, // The interface files match the retry policies
Jeej 55:5ea18a3a01b9 122 .prop = (uint8_t)prop | ((action)? FS_ACT_EN : 0),
Jeej 43:28202405094d 123 .perm = (uint8_t)perm,
Jeej 43:28202405094d 124 .size = size,
Jeej 43:28202405094d 125 .alloc = alloc,
Jeej 43:28202405094d 126 };
Jeej 43:28202405094d 127
Jeej 45:b85384e7d825 128 err = d7a_modem_register(&file_infos);
Jeej 45:b85384e7d825 129
Jeej 45:b85384e7d825 130 DPRINT("Create %d Done. err %d\r\n", file_id, err);
Jeej 45:b85384e7d825 131
Jeej 55:5ea18a3a01b9 132 WARNING(err >= D7A_ERR_NONE, "%s FID %d err %d\r\n", __FUNCTION__, file_id, err);
Jeej 55:5ea18a3a01b9 133
Jeej 45:b85384e7d825 134 return err;
Jeej 43:28202405094d 135 }
Jeej 43:28202405094d 136
Jeej 53:3e4aa4b57090 137
Jeej 55:5ea18a3a01b9 138 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, d7a_action_t action, alp_rpol_t retry)
Jeej 43:28202405094d 139 {
Jeej 45:b85384e7d825 140 FPRINT("\r\n");
Jeej 49:81d5bddb02f0 141
Jeej 46:665391110051 142 d7a_errors_t err;
Jeej 46:665391110051 143
Jeej 45:b85384e7d825 144 DPRINT("Declare %d.\r\n", file_id);
Jeej 45:b85384e7d825 145
Jeej 55:5ea18a3a01b9 146 ASSERT(g_local_fs, "You cannot delare a file if the write_file/read_file callbacks are not specified\r\n");
Jeej 49:81d5bddb02f0 147
Jeej 43:28202405094d 148 register_file_param_t file_infos = {
Jeej 43:28202405094d 149 .fid = file_id,
Jeej 45:b85384e7d825 150 .type = HOST+RAM,
Jeej 55:5ea18a3a01b9 151 .afid = action,
Jeej 55:5ea18a3a01b9 152 .ifid = FIRST_IFT_FILE + retry, // The interface files match the retry policies
Jeej 55:5ea18a3a01b9 153 .prop = (uint8_t)prop | ((action)? FS_ACT_EN : 0),
Jeej 43:28202405094d 154 .perm = (uint8_t)perm,
Jeej 43:28202405094d 155 .size = length,
Jeej 43:28202405094d 156 .alloc = alloc,
Jeej 43:28202405094d 157 };
Jeej 43:28202405094d 158
Jeej 46:665391110051 159 err = d7a_modem_register(&file_infos);
Jeej 45:b85384e7d825 160
Jeej 45:b85384e7d825 161 DPRINT("Declare %d Done\r\n", file_id);
Jeej 45:b85384e7d825 162
Jeej 55:5ea18a3a01b9 163 WARNING(err >= D7A_ERR_NONE, "%s FID %d err %d\r\n", __FUNCTION__, file_id, err);
Jeej 55:5ea18a3a01b9 164
Jeej 46:665391110051 165 return err;
Jeej 43:28202405094d 166 }
Jeej 43:28202405094d 167
Jeej 53:3e4aa4b57090 168
Jeej 46:665391110051 169 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 170 {
Jeej 45:b85384e7d825 171 FPRINT("\r\n");
Jeej 45:b85384e7d825 172
Jeej 46:665391110051 173 d7a_errors_t err;
Jeej 46:665391110051 174
Jeej 51:644de6fe1ee7 175 DPRINT("Read %d.\r\n", file_id);
Jeej 46:665391110051 176
Jeej 46:665391110051 177 err = d7a_alp_read_file(file_id, offset, size, buf, addressee, retry);
Jeej 46:665391110051 178
Jeej 51:644de6fe1ee7 179 DPRINT("Read %d Done. err %d\r\n", file_id, err);
Jeej 45:b85384e7d825 180
Jeej 55:5ea18a3a01b9 181 WARNING(err >= D7A_ERR_NONE, "%s FID %d err %d\r\n", __FUNCTION__, file_id, err);
Jeej 55:5ea18a3a01b9 182
Jeej 46:665391110051 183 return err;
Jeej 46:665391110051 184 }
Jeej 46:665391110051 185
Jeej 53:3e4aa4b57090 186
Jeej 46:665391110051 187 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 188 {
Jeej 46:665391110051 189 FPRINT("\r\n");
Jeej 46:665391110051 190
Jeej 46:665391110051 191 d7a_errors_t err;
Jeej 46:665391110051 192
Jeej 46:665391110051 193 DPRINT("Write %d.\r\n", file_id);
Jeej 46:665391110051 194
Jeej 46:665391110051 195 err = d7a_alp_write_file(file_id, offset, size, buf, addressee, retry, resp);
Jeej 46:665391110051 196
Jeej 46:665391110051 197 DPRINT("Write %d Done. err %d\r\n", file_id, err);
Jeej 46:665391110051 198
Jeej 55:5ea18a3a01b9 199 WARNING(err >= D7A_ERR_NONE, "%s FID %d err %d\r\n", __FUNCTION__, file_id, err);
Jeej 55:5ea18a3a01b9 200
Jeej 46:665391110051 201 return err;
Jeej 43:28202405094d 202 }
Jeej 43:28202405094d 203
Jeej 53:3e4aa4b57090 204
Jeej 46:665391110051 205 d7a_errors_t d7a_notify(const uint8_t file_id, const uint32_t offset, const uint32_t size)
Jeej 43:28202405094d 206 {
Jeej 45:b85384e7d825 207 FPRINT("\r\n");
Jeej 45:b85384e7d825 208
Jeej 46:665391110051 209 d7a_errors_t err;
Jeej 46:665391110051 210
Jeej 46:665391110051 211 DPRINT("Notify %d.\r\n", file_id);
Jeej 45:b85384e7d825 212
Jeej 46:665391110051 213 notify_file_param_t notif = {
Jeej 46:665391110051 214 .bf.fid = file_id,
Jeej 46:665391110051 215 .bf.offset = offset,
Jeej 46:665391110051 216 .bf.size = size
Jeej 46:665391110051 217 };
Jeej 46:665391110051 218
Jeej 46:665391110051 219 err = d7a_modem_notify(&notif);
Jeej 46:665391110051 220
Jeej 46:665391110051 221 DPRINT("Notify %d Done. err %d\r\n", file_id, err);
Jeej 46:665391110051 222
Jeej 55:5ea18a3a01b9 223 WARNING(err >= D7A_ERR_NONE, "%s FID %d err %d\r\n", __FUNCTION__, file_id, err);
Jeej 55:5ea18a3a01b9 224
Jeej 46:665391110051 225 return err;
Jeej 50:30440c9aeb7c 226 }
Jeej 50:30440c9aeb7c 227
Jeej 50:30440c9aeb7c 228
Jeej 50:30440c9aeb7c 229 void d7a_modem_print_infos(void)
Jeej 50:30440c9aeb7c 230 {
Jeej 50:30440c9aeb7c 231 uint8_t uid[8];
Jeej 50:30440c9aeb7c 232 d7a_revision_t rev;
Jeej 50:30440c9aeb7c 233
Jeej 50:30440c9aeb7c 234 ASSERT(d7a_read(0, 0, 8, uid) >= D7A_ERR_NONE, "Failed to read UID file\r\n");
Jeej 50:30440c9aeb7c 235 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 236
Jeej 50:30440c9aeb7c 237 PRINT("------------ D7A Modem infos ------------\r\n");
Jeej 50:30440c9aeb7c 238 PRINT_DATA("| UID: ", "%02X", uid, 8, " |\r\n");
Jeej 50:30440c9aeb7c 239 PRINT("| Manufacturer ID: %08X |\r\n", rev.manufacturer_id);
Jeej 50:30440c9aeb7c 240 PRINT("| Device ID: %08X |\r\n", rev.device_id);
Jeej 50:30440c9aeb7c 241 PRINT("| Hardware version: %08X |\r\n", rev.hw_version);
Jeej 50:30440c9aeb7c 242 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 243 PRINT("| File system CRC: 0x%08x |\r\n", rev.fs_crc);
Jeej 50:30440c9aeb7c 244 PRINT("-----------------------------------------\r\n");
Jeej 50:30440c9aeb7c 245
Jeej 43:28202405094d 246 }