summaryrefslogtreecommitdiff
path: root/fw
diff options
context:
space:
mode:
Diffstat (limited to 'fw')
-rw-r--r--fw/fe310/eos/cell.h9
-rw-r--r--fw/fe310/eos/unicode.c24
-rw-r--r--fw/fe310/eos/unicode.h2
3 files changed, 30 insertions, 5 deletions
diff --git a/fw/fe310/eos/cell.h b/fw/fe310/eos/cell.h
index d8206f9..92c8c7c 100644
--- a/fw/fe310/eos/cell.h
+++ b/fw/fe310/eos/cell.h
@@ -27,6 +27,11 @@
#define EOS_CELL_MTYPE_VOICE_END 6
#define EOS_CELL_MTYPE_VOICE_MISSED 7
+#define EOS_CELL_MTYPE_SMS_LIST 1
+#define EOS_CELL_MTYPE_SMS_SEND 2
+#define EOS_CELL_MTYPE_SMS_MSG_NEW 3
+#define EOS_CELL_MTYPE_SMS_MSG_ITEM 4
+
#define EOS_CELL_MTYPE_USSD_REQUEST 1
#define EOS_CELL_MTYPE_USSD_REPLY 2
@@ -34,5 +39,9 @@
#define EOS_CELL_MTYPE_DATA_CONNECT 2
#define EOS_CELL_MTYPE_DATA_DISCONNECT 3
+#define EOS_CELL_SMS_ADDRTYPE_INTL 1
+#define EOS_CELL_SMS_ADDRTYPE_ALPHA 2
+#define EOS_CELL_SMS_ADDRTYPE_OTHER 3
+
void eos_cell_init(void);
void eos_cell_set_handler(unsigned char mtype, eos_evt_handler_t handler); \ No newline at end of file
diff --git a/fw/fe310/eos/unicode.c b/fw/fe310/eos/unicode.c
index 2915791..e2fb772 100644
--- a/fw/fe310/eos/unicode.c
+++ b/fw/fe310/eos/unicode.c
@@ -57,6 +57,15 @@ int utf8_dec(utf8_t *str, utf32_t *ch) {
}
}
+int utf8_len(utf8_t *str) {
+ if ((*str & 0xf8) == 0xf0) return 4;
+ if ((*str & 0xf0) == 0xe0) return 3;
+ if ((*str & 0xe0) == 0xc0) return 2;
+ if ((*str & 0x80) == 0x00) return 1;
+
+ return UTF_ERR;
+}
+
int utf8_seek(utf8_t *str, int off, utf32_t *ch) {
int i;
int len = 0;
@@ -91,11 +100,8 @@ int utf8_verify(utf8_t *str, int str_size, int *str_len) {
while (len < str_size) {
if (str_size - len < 4) {
- if (((str[len] & 0xf8) == 0xf0) ||
- (((str[len] & 0xf0) == 0xe0) && (str_size - len < 3)) ||
- (((str[len] & 0xe0) == 0xc0) && (str_size - len < 2))) {
- break;
- }
+ int _len = utf8_len(str + len);
+ if ((_len == UTF_ERR) || ((str_size - len) < _len)) break;
}
ch_l = utf8_dec(str + len, &ch);
if (ch_l > 0) {
@@ -151,6 +157,14 @@ int utf16_dec(uint8_t *str, utf32_t *ch) {
}
}
+int utf16_len(uint8_t *str) {
+ uint16_t ch = (str[0] << 8) | str[1];
+
+ if ((ch >= 0xdc00) && (ch <= 0xdfff)) return UTF_ERR;
+ if ((ch >= 0xd800) && (ch <= 0xdfff)) return 4;
+ return 2;
+}
+
int utf16_seek(uint8_t *str, int off, utf32_t *ch) {
int i;
int len = 0;
diff --git a/fw/fe310/eos/unicode.h b/fw/fe310/eos/unicode.h
index a3b9696..12fa99c 100644
--- a/fw/fe310/eos/unicode.h
+++ b/fw/fe310/eos/unicode.h
@@ -9,9 +9,11 @@ typedef uint32_t utf32_t;
int utf8_enc(utf32_t ch, utf8_t *str);
int utf8_dec(utf8_t *str, utf32_t *ch);
+int utf8_len(utf8_t *str);
int utf8_seek(utf8_t *str, int off, utf32_t *ch);
int utf8_verify(utf8_t *str, int str_size, int *str_len);
int utf16_enc(utf32_t ch, uint8_t *str);
int utf16_dec(uint8_t *str, utf32_t *ch);
+int utf16_len(uint8_t *str);
int utf16_seek(uint8_t *str, int off, utf32_t *ch);