annotate gsm-fw/services/ffs/tmffs.c @ 980:a0879ce32d2c

fc-tmsh omr command: always interpret both arguments as hex
author Mychaela Falconia <falcon@ivan.Harhan.ORG>
date Thu, 10 Dec 2015 04:28:52 +0000
parents 842c9fd828fd
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
221
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
1 /******************************************************************************
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
2 * Flash File System (ffs)
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
3 * Idea, design and coding by Mads Meisner-Jensen, mmj@ti.com
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
4 *
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
5 * ffs testmode interface
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
6 *
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
7 * $Id: tmffs.c 1.51 Thu, 18 Dec 2003 10:50:52 +0100 tsj $
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
8 *
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
9 ******************************************************************************/
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
10
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
11 #include "../../include/config.h"
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
12 #include "../../riviera/rv/rv_defined_swe.h"
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
13
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
14 #ifdef RVM_ETM_SWE
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
15 #include "../etm/etm.h"
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
16 #include "../etm/etm_api.h"
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
17 #endif
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
18
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
19 #include "ffs.h"
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
20 #include "task.h"
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
21 #include "ffstrace.h"
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
22 #include "tmffs.h"
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
23
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
24 #include <string.h>
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
25
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
26 /******************************************************************************
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
27 * Local globals for all protocols
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
28 ******************************************************************************/
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
29
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
30 #if TMFFS1 || TMFFS2
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
31 static int32 bufsize, tmpsize;
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
32 static uint8 stringsize;
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
33 #endif
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
34
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
35 effs_t ffs_initialize(void);
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
36 effs_t ffs_exit(void);
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
37
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
38 #define tmffs_put8(x) *outp++ = x;
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
39 #define tmffs_put16(x) *outp++ = (x & 0xff); *outp++ = (x>>8);
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
40
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
41 // Not in use
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
42 //#define tmffs_put32(x) tmffs_put16(x); tmffs_put16(x >> 16);
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
43
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
44 #ifdef RVM_ETM_SWE
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
45
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
46 int etm_ffs2(T_ETM_PKT *pkt, unsigned char *inp, int insize);
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
47
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
48 /******************************************************************************
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
49 * TM FFS registration to ETM database
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
50 *****************************************************************************/
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
51 /* Callback function registered in ETM database */
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
52 int etm_ffs1_pkt_receive(uint8 *data, int size)
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
53 {
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
54 int mid;
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
55 T_ETM_PKT *pkt;
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
56
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
57 ttw(ttr(TTrTmffs, "etm_ffs1_pkt_receive(*, %d)" NL, size));
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
58
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
59 /* Create TestMode return Packet */
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
60 if ((pkt = (T_ETM_PKT *) target_malloc(sizeof(T_ETM_PKT))) == NULL) {
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
61 ttw(ttr(TTrTmffs, "etm_ffs1_pkt_receive(): Limit of memory bank reached" NL));
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
62 return ETM_NOMEM;
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
63 }
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
64
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
65 // Max packet size for TM3 is 128 bytes
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
66 size = tm_ffs(pkt->data, TM3_PACKET_SIZE, data, size);
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
67
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
68 pkt->size = size;
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
69 pkt->status = ETM_OK;
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
70 pkt->mid = ETM_FFS1;
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
71
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
72 etm_pkt_send(pkt);
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
73 target_free(pkt);
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
74
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
75 return ETM_OK;
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
76 }
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
77
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
78 /* Callback function registered in ETM database */
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
79 int etm_ffs2_pkt_receive(uint8 *data, int size)
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
80 {
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
81 int status;
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
82 T_ETM_PKT *pkt = NULL;
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
83
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
84 ttw(ttr(TTrTmffs, "etm_ffs2_pkt_receive(*, %d)" NL, size));
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
85
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
86 /* Create TestMode return Packet */
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
87 if ((pkt = (T_ETM_PKT *) target_malloc(sizeof(T_ETM_PKT))) == NULL) {
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
88 ttw(ttr(TTrTmffs, "etm_ffs2_pkt_receive(): Limit of memory bank reached" NL));
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
89 return ETM_NOMEM;
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
90 }
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
91
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
92 status = etm_ffs2(pkt, data, size);
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
93 return status;
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
94 }
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
95 #endif
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
96
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
97 /* Init of FFS in the ETM database */
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
98 int etm_ffs_init(void)
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
99 {
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
100 int status;
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
101
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
102 #ifdef RVM_ETM_SWE
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
103 status = etm_register("FFS1", ETM_FFS1, 0, 0, etm_ffs1_pkt_receive);
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
104 status = etm_register("FFS2", ETM_FFS2, 0, 0, etm_ffs2_pkt_receive);
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
105 #else
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
106 status = 0;
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
107 #endif
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
108 return status;
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
109 }
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
110
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
111 /******************************************************************************
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
112 * FFS1 Protocol
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
113 ******************************************************************************/
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
114
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
115 #ifndef TMFFS1
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
116
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
117 int tm_ffs(unsigned char *outp, int outsize, unsigned char *inp, int insize)
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
118 {
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
119 return -1; // FIXME handle error better
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
120 }
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
121
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
122 // Note these functions must be presented because ffs_query() use them but
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
123 // they are only valid if FFS1_PROTOCOL is used.
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
124 int tmffs_bufsize(void)
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
125 {
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
126 return EFFS_NOSYS;
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
127 }
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
128
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
129 unsigned char *tmffs_bufaddr(void)
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
130 {
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
131 return 0;
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
132 }
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
133
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
134 #else
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
135
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
136 #if (GSMLITE == 1)
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
137 #define TMFFS1_BUFFER_SIZE 4000 //previously 8192
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
138 #else
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
139 #define TMFFS1_BUFFER_SIZE 8192
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
140 #endif
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
141
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
142 #define TMFFS1_STRING_SIZE 127
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
143
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
144 /******************************************************************************
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
145 * Macros
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
146 ******************************************************************************/
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
147
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
148 #define tmffs1_putdata(outp, src, size) \
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
149 tmffs_put8(FPI_DATA); \
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
150 tmffs_put16(size); \
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
151 memcpy(outp, src, size); \
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
152 outp += size;
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
153
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
154 /******************************************************************************
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
155 * Local globals
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
156 ******************************************************************************/
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
157
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
158 static unsigned char buffer[TMFFS1_BUFFER_SIZE];
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
159 static bufindex;
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
160
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
161 static char string[TMFFS1_STRING_SIZE];
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
162
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
163 static effs_t tm_ffs_overflowck(void)
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
164 {
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
165 if (bufsize > TMFFS1_BUFFER_SIZE ||
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
166 stringsize > TMFFS1_STRING_SIZE)
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
167 return EFFS_TOOBIG;
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
168
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
169 return EFFS_OK;
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
170 }
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
171
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
172
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
173 /******************************************************************************
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
174 * tm_ffs
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
175 ******************************************************************************/
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
176
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
177 /**
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
178 * NOTEME: This has been introduced when the ffs 1MB device limit was
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
179 * broken. This made location_t go from uint16 to uint32, messing up
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
180 * with PCTM.
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
181 *
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
182 * This makes the xstat_s look the same to PCTM PC side, though
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
183 * location will be forced to 0.
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
184 */
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
185 void hack_xstat_2_look_like_old_xstat(struct xstat_s *xstat)
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
186 {
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
187 int i;
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
188 char *location;
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
189
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
190 xstat->location = 0;
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
191
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
192 for (location = (char *) &(xstat->location) + 2; location <= (char *) &(xstat->sequence); location++)
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
193 *location = location[2];
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
194 }
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
195
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
196 // Parse input message and execute function. Then fill output buffer with
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
197 // return values from the called function and transmit the message. Return
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
198 // number of bytes inserted into output buffer. If return value is negative,
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
199 // it represents an error code.
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
200 int tm_ffs(unsigned char *outp, int outsize, unsigned char *inp, int insize)
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
201 {
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
202 int error;
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
203 tmffs_cid_t fid;
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
204
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
205 unsigned char *outp_start = outp;
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
206 unsigned char *inp_start = inp;
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
207
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
208 static uint8 i8[2]; static uint16 i8i;
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
209 static uint16 i16[2]; static uint16 i16i;
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
210 static uint32 i32[2]; static uint16 i32i;
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
211
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
212 tw(tr(TR_BEGIN, TrTmffs, "TMFFS:\n"));
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
213
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
214 while((fid = *inp++) != FPI_END)
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
215 {
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
216 switch(fid)
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
217 {
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
218 /**********************************************************
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
219 * Generic Protocol Functions
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
220 **********************************************************/
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
221
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
222 case FPI_BEGIN:
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
223 // for (i8i = 0; i8i < TMFFS1_STRING_SIZE; i8i++) // DEBUG
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
224 // string[i8i] = '#';
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
225 // for (i8i = 0; i8i < TMFFS1_BUFFER_SIZE; i8i++) // DEBUG
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
226 // buffer[i8i] = '$';
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
227 i8i = i16i = i32i = bufsize = stringsize = 0;
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
228 bufindex = 0;
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
229 i8[0] = i8[1] = 0;
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
230 i16[0] = i16[1] = 0;
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
231 i32[0] = i32[1] = 0;
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
232 string[0] = buffer[0] = 0;
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
233 tw(tr(TR_FUNC, TrTmffs, "FPI_BEGIN\n"));
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
234 ttw(ttr(TTrTmffs, "tm1" NL));
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
235 break;
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
236 case FPI_TMFFS_VERSION:
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
237 // NULL -> UINT16
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
238 tmffs_put16(TMFFS1_VERSION);
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
239 break;
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
240
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
241 case FPI_INT8:
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
242 i8[i8i++] = inp[0]; inp += 1;
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
243 tw(tr(TR_FUNC, TrTmffs, "FPI_INT8(%d/0x%x)\n",
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
244 i8[i8i-1], i8[i8i-1]));
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
245 ttw(ttr(TTrTmffs, "tm_i8" NL));
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
246 break;
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
247 case FPI_INT16:
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
248 i16[i16i++] = (inp[0]) | (inp[1] << 8); inp += 2;
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
249 tw(tr(TR_FUNC, TrTmffs, "FPI_INT16(%d/0x%x)\n",
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
250 i16[i16i-1], i16[i16i-1]));
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
251 ttw(ttr(TTrTmffs, "tm_i16" NL));
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
252 break;
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
253 case FPI_INT32:
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
254 i32[i32i++] = inp[0] | (inp[1] << 8)
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
255 | (inp[2] << 16) | (inp[3] << 24);
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
256 inp += 4;
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
257 tw(tr(TR_FUNC, TrTmffs, "FPI_INT32(%d/0x%x)\n",
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
258 i32[i32i-1], i32[i32i-1]));
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
259 ttw(ttr(TTrTmffs, "tm_i32" NL));
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
260 break;
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
261 case FPI_BUFFER:
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
262 bufsize = inp[0] | (inp[1] << 8); inp += 2;
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
263 tw(tr(TR_FUNC, TrTmffs, "FPI_BUFFER(%d)\n", bufsize));
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
264 ttw(ttr(TTrTmffs, "tm_buf" NL));
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
265 break;
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
266 case FPI_DATA:
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
267 bufsize = inp[0] | (inp[1] << 8); inp += 2;
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
268 memcpy(buffer, inp, bufsize); inp += bufsize;
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
269 tw(tr(TR_FUNC, TrTmffs, "FPI_DATA(%d)\n", bufsize));
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
270 ttw(ttr(TTrTmffs, "tm_data" NL));
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
271 break;
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
272 case FPI_STRBUF:
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
273 // string buffer size MUST include null-terminator!
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
274 stringsize = inp[0]; inp += 1;
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
275 tw(tr(TR_FUNC, TrTmffs, "FPI_STRBUF(%d)\n", stringsize));
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
276 ttw(ttr(TTrTmffs, "tm_sbuf" NL));
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
277 break;
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
278 case FPI_STRING:
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
279 // stringsize MUST include null-terminator!
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
280 // <INT8>, <BYTES> -> NULL (or ERROR)
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
281 stringsize = inp[0]; inp += 1;
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
282 if (stringsize <= TMFFS1_STRING_SIZE)
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
283 memcpy(string, inp, stringsize);
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
284 inp += stringsize;
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
285 tw(tr(TR_FUNC, TrTmffs, "FPI_STRING(%d,'%s')\n",
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
286 stringsize, string));
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
287 ttw(ttr(TTrTmffs, "tm_s" NL));
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
288 break;
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
289
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
290 case FPI_BUFREAD:
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
291 // <INT16> -> DATA
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
292 tmpsize = inp[0] | (inp[1] << 8); inp += 2;
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
293 tw(tr(TR_FUNC, TrTmffs, "FPI_BUF_READ(%d)\n", tmpsize));
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
294 tmffs1_putdata(outp, &buffer[bufindex], tmpsize);
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
295 bufindex += tmpsize;
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
296 ttw(ttr(TTrTmffs, "tm_bufrd" NL));
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
297 break;
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
298 case FPI_BUFWRITE:
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
299 // <INT16>, <BYTES> -> NULL (or ERROR)
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
300 tmpsize = inp[0] | (inp[1] << 8); inp += 2;
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
301 tw(tr(TR_FUNC, TrTmffs, "FPI_BUF_WRITE(%d)\n", tmpsize));
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
302 if (bufsize + tmpsize <= TMFFS1_BUFFER_SIZE)
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
303 memcpy(&buffer[bufsize], inp, tmpsize);
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
304 inp += tmpsize;
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
305 bufsize += tmpsize;
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
306 ttw(ttr(TTrTmffs, "tm_bufwr" NL));
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
307 break;
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
308 case FPI_BUFSET:
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
309 bufindex = inp[0] | (inp[1] << 8); inp += 2;
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
310 tw(tr(TR_FUNC, TrTmffs, "FPI_BUF_SET(%d)\n", bufindex));
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
311 ttw(ttr(TTrTmffs, "tm_bufset" NL));
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
312 break;
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
313
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
314 /**********************************************************
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
315 * FFS Functions
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
316 **********************************************************/
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
317
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
318 case FPI_PREFORMAT:
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
319 // NULL -> ERROR
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
320 if ((error = tm_ffs_overflowck()) == EFFS_OK)
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
321 error = ffs_preformat_nb(i16[0], 0);
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
322 if (error > 0)
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
323 error = 0; // ignore request id
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
324 tmffs_put8(error);
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
325 tw(tr(TR_FUNC, TrTmffs, "FPI_PREFORMAT(0x%x)\n", i16[0]));
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
326 ttw(ttr(TTrTmffs, "tm_pfmt" NL));
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
327 break;
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
328 case FPI_FORMAT:
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
329 // STRING -> ERROR
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
330 if ((error = tm_ffs_overflowck()) == EFFS_OK)
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
331 error = ffs_format_nb(&string[0], i16[0], 0);
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
332 if (error > 0)
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
333 error = 0; // ignore request id
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
334 tmffs_put8(error);
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
335 tw(tr(TR_FUNC, TrTmffs, "FPI_FORMAT(0x%x)\n", i16[0]));
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
336 ttw(ttr(TTrTmffs, "tm_fmt" NL));
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
337 break;
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
338
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
339
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
340 case FPI_FCREATE:
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
341 // STRING, DATA -> ERROR
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
342 if ((error = tm_ffs_overflowck()) == EFFS_OK)
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
343 error = ffs_fcreate_nb(string, buffer, bufsize, 0);
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
344 if (error > 0)
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
345 error = 0; // ignore request id
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
346 tmffs_put8(error);
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
347 tw(tr(TR_FUNC, TrTmffs, "FPI_FCREATE('%s', 0x%x, %d/0x%x)\n",
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
348 string, buffer, bufsize, bufsize));
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
349 ttw(ttr(TTrTmffs, "tm_fcr" NL));
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
350 break;
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
351 case FPI_FUPDATE:
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
352 // STRING, DATA -> ERROR
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
353 if ((error = tm_ffs_overflowck()) == EFFS_OK)
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
354 error = ffs_fupdate_nb(string, buffer, bufsize, 0);
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
355 if (error > 0)
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
356 error = 0; // ignore request id
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
357 tmffs_put8(error);
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
358 tw(tr(TR_FUNC, TrTmffs, "FPI_FUPDATE('%s', 0x%x, %d/0x%x)\n",
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
359 string, buffer, bufsize, bufsize));
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
360 ttw(ttr(TTrTmffs, "tm_fup" NL));
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
361 break;
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
362 case FPI_FWRITE:
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
363 // STRING, DATA -> ERROR
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
364 if ((error = tm_ffs_overflowck()) == EFFS_OK)
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
365 error = ffs_fwrite_nb(string, buffer, bufsize, 0);
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
366 if (error > 0)
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
367 error = 0; // ignore request id
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
368 tmffs_put8(error);
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
369 tw(tr(TR_FUNC, TrTmffs, "FPI_FWRITE('%s', 0x%x, %d/0x%x)\n",
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
370 string, buffer, bufsize, bufsize));
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
371 ttw(ttr(TTrTmffs, "tm_fwr" NL));
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
372 break;
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
373 case FPI_FREAD:
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
374 // STRING, BUFFER -> ERROR
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
375 if ((error = tm_ffs_overflowck()) == EFFS_OK)
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
376 error = ffs_file_read(string, buffer, TMFFS1_BUFFER_SIZE);
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
377 // Because a 32-bit integer is returned, we have to saturate it
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
378 // into an 8-bit value.
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
379 if (error >= 0)
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
380 error = 0;
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
381 tmffs_put8(error);
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
382 tw(tr(TR_FUNC, TrTmffs, "FPI_FREAD('%s', 0x%x, %d/0x%x)\n",
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
383 string, buffer, bufsize, bufsize));
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
384 ttw(ttr(TTrTmffs, "tm_frd" NL));
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
385 break;
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
386 case FPI_REMOVE:
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
387 // STRING -> ERROR
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
388 if ((error = tm_ffs_overflowck()) == EFFS_OK)
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
389 error = ffs_remove_nb(string, 0);
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
390 if (error > 0)
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
391 error = 0; // ignore request id
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
392 tmffs_put8(error);
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
393 tw(tr(TR_FUNC, TrTmffs, "FPI_REMOVE()\n"));
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
394 ttw(ttr(TTrTmffs, "tm_rm" NL));
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
395 break;
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
396
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
397
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
398 case FPI_MKDIR:
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
399 // STRING -> ERROR
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
400 if ((error = tm_ffs_overflowck()) == EFFS_OK)
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
401 error = ffs_mkdir_nb(string, 0);
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
402 if (error > 0)
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
403 error = 0; // ignore request id
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
404 tmffs_put8(error);
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
405 tw(tr(TR_FUNC, TrTmffs, "FPI_MKDIR()\n"));
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
406 ttw(ttr(TTrTmffs, "tm_mkd" NL));
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
407 break;
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
408 case FPI_OPENDIR:
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
409 // STRING, BUFFER -> ERROR, DATA
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
410 if ((error = tm_ffs_overflowck()) == EFFS_OK)
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
411 error = ffs_opendir(string, (struct dir_s *) buffer);
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
412 // Because a 32-bit integer is returned, we have to saturate it
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
413 // into an 8-bit value.
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
414 if (error >= 0)
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
415 error = 0;
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
416 tmffs_put8(error);
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
417 tmffs1_putdata(outp, buffer, sizeof(struct dir_s));
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
418 tw(tr(TR_FUNC, TrTmffs, "FPI_OPENDIR()\n"));
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
419 ttw(ttr(TTrTmffs, "tm_od" NL));
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
420 break;
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
421 case FPI_READDIR:
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
422 // DATA, STRBUF -> ERROR, DATA, STRING
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
423 string[0] = 0;
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
424 if ((error = tm_ffs_overflowck()) == EFFS_OK)
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
425 error = ffs_readdir((struct dir_s *) buffer, string, stringsize);
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
426
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
427 // Saturate error(i) in order to let it fit in type int8.
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
428 if (error > 127)
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
429 error = 127;
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
430 tmffs_put8(error);
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
431 tmffs1_putdata(outp, buffer, sizeof(struct dir_s));
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
432 stringsize = strlen(string) + 1;
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
433 tmffs_put8(FPI_STRING); // put directory entry's name...
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
434 tmffs_put8(stringsize);
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
435 memcpy(outp, string, stringsize);
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
436 outp += stringsize;
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
437 tw(tr(TR_FUNC, TrTmffs, "FPI_READDIR()\n"));
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
438 ttw(ttr(TTrTmffs, "tm_rdd" NL));
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
439 break;
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
440
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
441
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
442 case FPI_STAT:
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
443 // STRING, BUFFER -> ERROR, DATA
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
444 if ((error = tm_ffs_overflowck()) == EFFS_OK)
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
445 error = ffs_stat(&string[0], (struct stat_s *) buffer);
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
446 tmffs_put8(error);
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
447 tmffs1_putdata(outp, buffer, sizeof(struct stat_s));
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
448 tw(tr(TR_FUNC, TrTmffs, "FPI_STAT()\n"));
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
449 ttw(ttr(TTrTmffs, "tm_st" NL));
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
450 break;
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
451 case FPI_LINKSTAT:
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
452 // STRING, BUFFER -> ERROR, DATA
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
453 if ((error = tm_ffs_overflowck()) == EFFS_OK)
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
454 error = ffs_xlstat(&string[0], (struct xstat_s *) buffer);
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
455 tmffs_put8(error);
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
456
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
457 hack_xstat_2_look_like_old_xstat((struct xstat_s *) buffer);
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
458
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
459 tmffs1_putdata(outp, buffer, sizeof(struct xstat_s) - 2);
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
460 tw(tr(TR_FUNC, TrTmffs, "FPI_()\n"));
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
461 ttw(ttr(TTrTmffs, "tm_lst" NL));
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
462 break;
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
463
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
464
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
465 case FPI_SYMLINK:
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
466 // STRING, DATA -> ERROR
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
467 if ((error = tm_ffs_overflowck()) == EFFS_OK)
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
468 error = ffs_symlink_nb(string, (char *) buffer, 0);
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
469 if (error > 0)
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
470 error = 0; // ignore request id
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
471 tmffs_put8(error);
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
472 tw(tr(TR_FUNC, TrTmffs, "FPI_SYMLINK()\n"));
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
473 ttw(ttr(TTrTmffs, "tm_sym" NL));
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
474 break;
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
475 case FPI_READLINK:
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
476 // STRING, BUFFER -> ERROR, DATA
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
477 if ((error = tm_ffs_overflowck()) == EFFS_OK)
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
478 error = ffs_readlink(string, (char *) buffer, TMFFS1_BUFFER_SIZE);
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
479 // Because a 32-bit integer is returned, we have to saturate it
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
480 // into an 8-bit value.
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
481 if (error >= 0)
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
482 error = 0;
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
483 tmffs_put8(error);
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
484 tmffs1_putdata(outp, buffer, bufsize); // put link contents
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
485 tw(tr(TR_FUNC, TrTmffs, "FPI_READLINK()\n"));
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
486 ttw(ttr(TTrTmffs, "tm_rdl" NL));
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
487 break;
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
488
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
489
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
490 case FPI_QUERY:
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
491 // INT8 -> ERROR, DATA
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
492 error = ffs_query(i8[0], buffer);
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
493 tmffs_put8(error);
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
494 tmffs1_putdata(outp, buffer, 16);
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
495 tw(tr(TR_FUNC, TrTmffs, "FPI_QUERY()\n"));
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
496 ttw(ttr(TTrTmffs, "tm_q" NL));
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
497 break;
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
498 case FPI_FCONTROL:
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
499 // STRING INT8 INT32 -> ERROR
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
500 if ((error = tm_ffs_overflowck()) == EFFS_OK)
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
501 error = ffs_fcontrol_nb(string, i8[0], i32[0], 0);
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
502 if (error > 0)
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
503 error = 0; // ignore request id
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
504 tmffs_put8(error);
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
505 tw(tr(TR_FUNC, TrTmffs, "FPI_FCONTROL()\n"));
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
506 ttw(ttr(TTrTmffs, "tm_fc" NL));
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
507 break;
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
508
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
509 case FPI_INIT:
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
510 // NULL -> ERROR
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
511 error =ffs_initialize();
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
512 tmffs_put8(error);
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
513 tw(tr(TR_FUNC, TrTmffs, "FPI_INIT()\n"));
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
514 ttw(ttr(TTrTmffs, "tm_init" NL));
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
515 break;
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
516 case FPI_EXIT:
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
517 // NULL -> ERROR
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
518 error = ffs_exit();
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
519 tmffs_put8(error);
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
520 tw(tr(TR_FUNC, TrTmffs, "FPI_EXIT()\n"));
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
521 ttw(ttr(TTrTmffs, "tm_exit" NL));
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
522 break;
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
523
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
524
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
525 case FPI_TFFS:
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
526 {
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
527 // STRING -> ERROR
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
528 #if (WITH_TFFS == 1)
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
529 extern char ffs_test_string[]; // defined in task.c
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
530
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
531 memcpy(ffs_test_string, string, stringsize);
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
532 tw(tr(TR_FUNC, TrTmffs, "FPI_TFFS()\n"));
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
533 ttw(ttr(TTrTmffs, "tm_tffs" NL));
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
534 #else
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
535 tmffs_put8(EFFS_NOSYS);
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
536 #endif
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
537 break;
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
538 }
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
539 default:
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
540 tw(tr(TR_FUNC, TrTmffs, "ERROR: Unknown tmffs protocol code\n"));
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
541 ttw(ttr(TTrTmffs, "tm?" NL));
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
542 break;
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
543 }
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
544 // check if we read beyond buffer end
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
545 if (inp > inp_start + insize) {
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
546 tw(tr(TR_FUNC, TrTmffs, "ERROR: Read beyond end of input buffer\n"));
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
547 ttw(ttr(TTrTmffs, "tm_fatal" NL));
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
548 // NOTEME: We really should reset output buffer and put a return
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
549 // code that tells us what went wrong!
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
550 return 0;
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
551 }
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
552 }
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
553
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
554 tw(tr(TR_END, TrTmffs, ""));
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
555
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
556 return outp - outp_start;
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
557 }
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
558
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
559 int tmffs_bufsize(void)
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
560 {
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
561 return TMFFS1_BUFFER_SIZE;
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
562 }
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
563
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
564 unsigned char *tmffs_bufaddr(void)
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
565 {
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
566 return buffer;
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
567 }
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
568
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
569 #endif // TMFFS1
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
570
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
571 /******************************************************************************
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
572 * FFS2 protocol
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
573 ******************************************************************************/
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
574
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
575 #ifndef TMFFS2
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
576
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
577 #ifdef RVM_ETM_SWE
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
578 int etm_ffs2(T_ETM_PKT *pkt, unsigned char *inp, int insize)
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
579 {
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
580 int error;
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
581
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
582 tw(tr(TR_BEGIN, TrTmffs, "FFS2 protocol not represented in target\n"));
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
583 error = -1; // FIXME other error?
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
584
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
585 // We return a packet instead of waiting for timeout.
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
586 pkt->size = 0;
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
587 pkt->status = -error;
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
588 pkt->mid = ETM_FFS2;
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
589 etm_pkt_send(pkt);
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
590
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
591 target_free(pkt);
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
592 tw(tr(TR_END, TrTmffs, ""));
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
593
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
594 return error;
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
595 }
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
596 #endif
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
597
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
598 #else
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
599
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
600 #define TMFFS_BUFFER_SIZE 256 // FIXME change to packet size
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
601 #define TMFFS_STRING_SIZE 127
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
602
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
603 /******************************************************************************
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
604 * Macros
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
605 ******************************************************************************/
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
606
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
607 #define tmffs_get8() inp[0]; inp += 1;
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
608 #define tmffs_get16() (inp[0]) | (inp[1] << 8); inp += 2;
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
609 #define tmffs_get32() inp[0] | (inp[1] << 8) | (inp[2] << 16)\
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
610 | (inp[3] << 24); inp += 4;
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
611
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
612 #define tmffs_getdata() bufsize = inp[0]; inp += 1; \
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
613 memcpy(buffer, inp, bufsize); inp += bufsize;
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
614
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
615
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
616 /******************************************************************************
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
617 * Helper function
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
618 ******************************************************************************/
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
619
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
620 // If size is less than zero it is because of a error and we dont have to put any
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
621 // data if size is returned in status.
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
622 int tmffs_putdata(unsigned char **buf, unsigned char *src, int size)
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
623 {
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
624 unsigned char *p = *buf;
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
625
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
626 if (size > 0) {
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
627 *p++ = size;
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
628 memcpy(p, src, size);
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
629 *buf += 1 + size;
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
630 }
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
631 return size;
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
632 }
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
633
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
634 int tmffs_putstring(unsigned char **buf, char *src, int size)
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
635 {
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
636 unsigned char *p = *buf;
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
637
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
638 if (size > 0) {
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
639 *p++ = size;
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
640 memcpy(p, src, size);
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
641 *buf += 1 + size;
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
642 }
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
643 return size;
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
644 }
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
645
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
646 int tmffs_getstring(unsigned char ** buf, char *string)
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
647 {
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
648 unsigned char *p = *buf;
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
649
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
650 stringsize = *p++;
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
651
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
652 if (stringsize > TMFFS_STRING_SIZE)
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
653 return EFFS_TOOBIG;
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
654
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
655 memcpy(string, p, stringsize);
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
656 *buf += 1 + stringsize;
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
657
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
658 return stringsize;
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
659 }
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
660
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
661 /******************************************************************************
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
662 * tm_ffs
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
663 ******************************************************************************/
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
664
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
665 // Parse input message and execute function. Then fill output buffer with
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
666 // return values from the called function and transmit the message. Return
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
667 // number of bytes inserted into output buffer. If return value is negative,
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
668 // it represents an error code.
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
669 int etm_ffs2(T_ETM_PKT *pkt, unsigned char *inp, int insize)
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
670 {
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
671 tmffs2_cid_t fid;
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
672 unsigned char buffer[TMFFS_BUFFER_SIZE];
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
673 char string[TMFFS_STRING_SIZE];
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
674
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
675 unsigned char *outp_start;
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
676 unsigned char *inp_start = inp;
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
677 unsigned char *outp;
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
678
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
679 int error = 0, i, fdi, size, param, flags;
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
680 uint8 type;
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
681
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
682 bufsize = stringsize = tmpsize = 0;
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
683
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
684 tw(tr(TR_BEGIN, TrTmffs, "TmFFS2\n"));
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
685
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
686 outp_start = outp = pkt->data;
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
687
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
688 fid = *inp++;
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
689 ttw(ttr(TTrTmffs, "etm_ffs2 0x%x" NL, fid));
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
690 switch(fid)
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
691 {
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
692 /**********************************************************
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
693 * Generic Protocol Functions
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
694 **********************************************************/
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
695
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
696 case TMFFS_VERSION:
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
697 tmffs_put16(TMFFS2_VERSION);
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
698 break;
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
699
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
700 /**********************************************************
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
701 * FFS Functions
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
702 **********************************************************/
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
703
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
704 case TMFFS_PREFORMAT:
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
705 param = tmffs_get16();
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
706 error = ffs_preformat(param);
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
707 tw(tr(TR_FUNC, TrTmffs, "TMFFS_PREFORMAT(0x%x)\n", param));
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
708 ttw(ttr(TTrTmffs, "tm_pfmt" NL));
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
709 break;
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
710 case TMFFS_FORMAT:
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
711 error = tmffs_getstring(&inp, string);
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
712 param = tmffs_get16();
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
713 if (error >= 0)
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
714 error = ffs_format(&string[0], param);
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
715 tw(tr(TR_FUNC, TrTmffs, "TMFFS_FORMAT(0x%x)\n", param));
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
716 ttw(ttr(TTrTmffs, "tm_fmt" NL));
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
717 break;
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
718
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
719
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
720 case TMFFS_FILE_WRITE:
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
721 error = tmffs_getstring(&inp, string);
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
722 tmffs_getdata();
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
723 flags = tmffs_get8();
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
724 if (error >= 0)
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
725 error = ffs_file_write(string, buffer, bufsize, flags);
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
726 ttw(ttr(TTrTmffs, "tm_fwr" NL));
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
727 break;
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
728
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
729
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
730 case TMFFS_FILE_READ:
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
731 error = tmffs_getstring(&inp, string);
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
732 bufsize = tmffs_get8();
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
733 if (error >= 0)
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
734 size = ffs_file_read(string, buffer, bufsize);
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
735 error = tmffs_putdata(&outp, &buffer[0], size);
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
736 tw(tr(TR_FUNC, TrTmffs, "TMFFS_FREAD('%s', 0x%x, %d/0x%x)\n",
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
737 string, buffer, bufsize, bufsize));
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
738 ttw(ttr(TTrTmffs, "tm_frd" NL));
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
739 break;
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
740 case TMFFS_REMOVE:
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
741 error = tmffs_getstring(&inp, string);
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
742 if (error >= 0)
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
743 error = ffs_remove(string);
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
744 tw(tr(TR_FUNC, TrTmffs, "TMFFS_REMOVE()\n"));
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
745 ttw(ttr(TTrTmffs, "tm_rm" NL));
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
746 break;
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
747
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
748
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
749 case TMFFS_OPEN:
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
750 error = tmffs_getstring(&inp, string);
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
751 flags = tmffs_get8();
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
752 if (error >= 0)
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
753 error = ffs_open(string, flags);
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
754 tmffs_put8(error); // fdi
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
755 tw(tr(TR_FUNC, TrTmffs, "TMFFS_OPEN('%s', %d)\n", string, flags));
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
756 ttw(ttr(TTrTmffs, "tm_open" NL));
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
757 break;
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
758 case TMFFS_CLOSE:
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
759 fdi = tmffs_get8();
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
760 error = ffs_close(fdi);
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
761 tw(tr(TR_FUNC, TrTmffs, "TMFFS_CLOSE(%d)\n", fdi));
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
762 ttw(ttr(TTrTmffs, "tm_close" NL));
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
763 break;
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
764 case TMFFS_WRITE:
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
765 fdi = tmffs_get8();
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
766 tmffs_getdata();
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
767 error = ffs_write(fdi, buffer, bufsize);
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
768 tmffs_put8(error); // put size
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
769 tw(tr(TR_FUNC, TrTmffs, "TMFFS_WRITE(%d, %d)\n", fdi, bufsize));
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
770 ttw(ttr(TTrTmffs, "tm_write" NL));
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
771 break;
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
772 case TMFFS_READ:
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
773 fdi = tmffs_get8();
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
774 size = tmffs_get8();
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
775 size = ffs_read(fdi, &buffer[0], size);
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
776 error = tmffs_putdata(&outp, &buffer[0], size);
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
777 tw(tr(TR_FUNC, TrTmffs, "TMFFS_READ(%d, %d)\n", fdi, size));
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
778 ttw(ttr(TTrTmffs, "tm_read" NL));
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
779 break;
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
780
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
781
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
782 case TMFFS_MKDIR:
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
783 error = tmffs_getstring(&inp, string);
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
784 if (error >= 0)
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
785 error = ffs_mkdir(string);
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
786 tw(tr(TR_FUNC, TrTmffs, "TMFFS_MKDIR()\n"));
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
787 ttw(ttr(TTrTmffs, "tm_mkd" NL));
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
788 break;
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
789 case TMFFS_OPENDIR:
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
790 error = tmffs_getstring(&inp, string);
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
791 if (error >= 0) {
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
792 error = ffs_opendir(string, (struct dir_s *) buffer);
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
793 tmffs_put8(error); // Note: we must put error/number of objects.
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
794 }
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
795 if (error >= 0)
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
796 tmffs_putdata(&outp, buffer, sizeof(struct dir_s));
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
797
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
798 tw(tr(TR_FUNC, TrTmffs, "TMFFS_OPENDIR()\n"));
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
799 ttw(ttr(TTrTmffs, "tm_od" NL));
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
800 break;
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
801 case TMFFS_READDIR:
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
802 tmffs_getdata();
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
803 stringsize = tmffs_get8();
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
804 error = ffs_readdir((struct dir_s *) buffer, string, stringsize);
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
805 tmffs_put8(error); // Note: we have to return bytes read.
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
806 if (error >= 0) {
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
807 tmffs_putdata(&outp, buffer, sizeof(struct dir_s));
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
808 stringsize = strlen(string) + 1;
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
809 tmffs_putstring(&outp, string, stringsize);
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
810 }
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
811 tw(tr(TR_FUNC, TrTmffs, "TMFFS_READDIR()\n"));
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
812 ttw(ttr(TTrTmffs, "tm_rdd" NL));
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
813 break;
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
814
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
815 case TMFFS_STAT:
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
816 error = tmffs_getstring(&inp, string);
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
817 if (error >= 0)
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
818 error = ffs_stat(string, (struct stat_s *) buffer);
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
819 if (error >= 0)
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
820 tmffs_putdata(&outp, buffer, sizeof(struct stat_s));
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
821
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
822 tw(tr(TR_FUNC, TrTmffs, "TMFFS_STAT()\n"));
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
823 ttw(ttr(TTrTmffs, "tm_st" NL));
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
824 break;
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
825 case TMFFS_XLSTAT:
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
826 error = tmffs_getstring(&inp, string);
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
827 if (error >= 0)
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
828 error = ffs_xlstat(&string[0], (struct xstat_s *) buffer);
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
829 if (error >= 0)
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
830 tmffs_putdata(&outp, buffer, sizeof(struct xstat_s));
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
831 tw(tr(TR_FUNC, TrTmffs, "TMFFS_()\n"));
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
832 ttw(ttr(TTrTmffs, "tm_xlst" NL));
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
833 break;
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
834
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
835
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
836 case TMFFS_SYMLINK:
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
837 error = tmffs_getstring(&inp, string);
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
838 tmffs_getdata();
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
839 if (error >= 0)
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
840 error = ffs_symlink(string, (char *) buffer);
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
841 tw(tr(TR_FUNC, TrTmffs, "TMFFS_SYMLINK()\n"));
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
842 ttw(ttr(TTrTmffs, "tm_sym" NL));
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
843 break;
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
844 case TMFFS_READLINK:
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
845 error = tmffs_getstring(&inp, string);
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
846 tmffs_getdata();
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
847 if (error >= 0) {
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
848 size = ffs_readlink(string, (char *) buffer, TMFFS_BUFFER_SIZE);
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
849 error = tmffs_putdata(&outp, buffer, size); // put link contents
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
850 }
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
851 tw(tr(TR_FUNC, TrTmffs, "TMFFS_READLINK()\n"));
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
852 ttw(ttr(TTrTmffs, "tm_rdl" NL));
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
853 break;
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
854
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
855
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
856 case TMFFS_QUERY:
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
857 param = tmffs_get8();
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
858 error = ffs_query(param, buffer);
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
859 if (error >= 0)
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
860 tmffs_putdata(&outp, buffer, 16);
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
861 tw(tr(TR_FUNC, TrTmffs, "TMFFS_QUERY(%d)\n", param));
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
862 ttw(ttr(TTrTmffs, "tm_q" NL));
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
863 break;
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
864 case TMFFS_FCONTROL:
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
865 error = tmffs_getstring(&inp, string);
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
866 type = tmffs_get8();
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
867 param = tmffs_get32();
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
868 if (error >= 0)
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
869 error = ffs_fcontrol(string, type, param);
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
870 tw(tr(TR_FUNC, TrTmffs, "TMFFS_FCONTROL()\n"));
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
871 ttw(ttr(TTrTmffs, "tm_fc" NL));
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
872 break;
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
873
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
874 case TMFFS_TFFS:
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
875 {
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
876 #if (WITH_TFFS == 1)
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
877 extern char ffs_test_string[]; // defined in task.c
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
878 error = tmffs_getstring(&inp, string);
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
879 memcpy(ffs_test_string, string, stringsize);
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
880 tw(tr(TR_FUNC, TrTmffs, "TMFFS_TFFS()\n"));
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
881 ttw(ttr(TTrTmffs, "tm_tffs" NL));
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
882 tmffs_put8(EFFS_OK);
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
883 #else
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
884 tmffs_put8(EFFS_NOSYS);
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
885 #endif
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
886 break;
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
887 }
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
888 default:
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
889 error = EFFS_NOSYS;
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
890 tmffs_put8(EFFS_NOSYS);
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
891 tw(tr(TR_FUNC, TrTmffs, "ERROR: Unknown tmffs protocol code\n"));
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
892 ttw(ttr(TTrTmffs, "tm?" NL));
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
893 break;
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
894 }
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
895
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
896 // check if we read beyond buffer end
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
897 if (inp > inp_start + insize) {
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
898 tw(tr(TR_FUNC, TrTmffs, "ERROR: Read beyond end of input buffer\n"));
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
899 ttw(ttr(TTrTmffs, "tm_fatal" NL));
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
900 ttw(ttr(TTrTmffs, "insize: %d, diff: %d" NL, insize,
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
901 inp - (inp_start + insize)));
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
902 // NOTEME: We really should reset output buffer and put a return
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
903 // code that tells us what went wrong!
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
904 error = ETM_PACKET; // FIXME find another error
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
905 }
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
906
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
907 ttw(ttr(TTrTmffs, "error %d" NL, error));
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
908 if (error > 0)
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
909 error = 0;
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
910
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
911 pkt->mid = ETM_FFS2;
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
912 pkt->size = outp - outp_start;
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
913 pkt->status = -error;
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
914
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
915 etm_pkt_send(pkt);
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
916 etm_free(pkt);
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
917
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
918 tw(tr(TR_END, TrTmffs, ""));
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
919
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
920 return ETM_OK;
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
921 }
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
922
842c9fd828fd gsm-fw: TMFFS integrated
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
923 #endif // TMFFS2