All of lore.kernel.org
 help / color / mirror / Atom feed
From: Philippe Nunes <philippe.nunes@linux.intel.com>
To: ofono@ofono.org
Subject: [PATCH 6/7] sms: Extend CBS message formating to use UCS2 scheme
Date: Mon, 25 Jun 2012 16:38:02 +0200	[thread overview]
Message-ID: <1340635083-5877-7-git-send-email-philippe.nunes@linux.intel.com> (raw)
In-Reply-To: <1340635083-5877-1-git-send-email-philippe.nunes@linux.intel.com>

[-- Attachment #1: Type: text/plain, Size: 4855 bytes --]

---
 src/qsmsmessage.cpp |  119 +++++++++++++++++++++++++++++++++++++++++++++++----
 1 file changed, 111 insertions(+), 8 deletions(-)

diff --git a/src/qsmsmessage.cpp b/src/qsmsmessage.cpp
index 1e2a317..c2eeb29 100644
--- a/src/qsmsmessage.cpp
+++ b/src/qsmsmessage.cpp
@@ -20,6 +20,7 @@
 #include <stdlib.h>
 
 #include <qsmsmessage.h>
+#include <qcbsmessage.h>
 #include "qsmsmessage_p.h"
 #include <qatutils.h>
 #include <qgsmcodec.h>
@@ -2462,6 +2463,93 @@ QSMSMessage QSMSDeliverMessage::unpack(QTextCodec *codec)
     return m;
 }
 
+static void iso639_2_from_language(QCBSMessage::Language lang, char *iso639)
+{
+    switch (lang) {
+    case QCBSMessage::German:
+        iso639[0] = 'd';
+        iso639[1] = 'e';
+        iso639[2] = '\0';
+        break;
+    case QCBSMessage::English:
+        iso639[0] = 'e';
+        iso639[1] = 'n';
+        iso639[2] = '\0';
+        break;
+    case QCBSMessage::Italian:
+        iso639[0] = 'i';
+        iso639[1] = 't';
+        iso639[2] = '\0';
+        break;
+    case QCBSMessage::French:
+        iso639[0] = 'f';
+        iso639[1] = 'r';
+        iso639[2] = '\0';
+        break;
+    case QCBSMessage::Spanish:
+        iso639[0] = 'e';
+        iso639[1] = 's';
+        iso639[2] = '\0';
+        break;
+    case QCBSMessage::Dutch:
+        iso639[0] = 'n';
+        iso639[1] = 'l';
+        iso639[2] = '\0';
+        break;
+    case QCBSMessage::Swedish:
+        iso639[0] = 's';
+        iso639[1] = 'v';
+        iso639[2] = '\0';
+        break;
+    case QCBSMessage::Danish:
+        iso639[0] = 'd';
+        iso639[1] = 'a';
+        iso639[2] = '\0';
+        break;
+    case QCBSMessage::Portuguese:
+        iso639[0] = 'p';
+        iso639[1] = 't';
+        iso639[2] = '\0';
+        break;
+    case QCBSMessage::Finnish:
+        iso639[0] = 'f';
+        iso639[1] = 'i';
+        iso639[2] = '\0';
+        break;
+    case QCBSMessage::Norwegian:
+        iso639[0] = 'n';
+        iso639[1] = 'o';
+        iso639[2] = '\0';
+        break;
+    case QCBSMessage::Greek:
+        iso639[0] = 'e';
+        iso639[1] = 'l';
+        iso639[2] = '\0';
+        break;
+    case QCBSMessage::Turkish:
+        iso639[0] = 't';
+        iso639[1] = 'r';
+        iso639[2] = '\0';
+        break;
+    case QCBSMessage::Hungarian:
+        iso639[0] = 'h';
+        iso639[1] = 'u';
+        iso639[2] = '\0';
+        break;
+    case QCBSMessage::Polish:
+        iso639[0] = 'p';
+        iso639[1] = 'l';
+        iso639[2] = '\0';
+        break;
+    default:
+        iso639[0] = '\0';
+        iso639[1] = '\0';
+        iso639[2] = '\0';
+        break;
+    }
+
+    return;
+}
 
 QCBSDeliverMessage::QCBSDeliverMessage()
     : QPDUMessage()
@@ -2518,29 +2606,44 @@ QCBSMessage QCBSDeliverMessage::unpack(QTextCodec *codec)
 
 void QCBSDeliverMessage::pack(const QCBSMessage &m, QSMSDataCodingScheme scheme)
 {
+    int numPad;
+    QTextCodec *codec = QAtUtils::codec( "gsm" );
+    QByteArray header;
+
     // Clear the pdu before we start.
     mBuffer = QByteArray();
     mPosn = 0;
     mBits = 0;
 
-    scheme = QSMS_DefaultAlphabet;
-    QByteArray data;
     mBuffer.append( (char) (((m.messageCode() >> 4) & 0x3F) | (m.scope() << 6)) );
     mBuffer.append( (char)(((m.messageCode() & 0xF) << 4) | (m.updateNumber() & 0xF)) );
     mBuffer.append( (char)((m.channel() & 0x0000FF00) >> 8) );
     mBuffer.append( (char)(m.channel() & 0x000000FF) );
-    mBuffer.append( (char)(((scheme & 0x0F)<<4) | (m.language() & 0x0F)) );
-    mBuffer.append( (char)((m.numPages() & 0x0F) | ((m.page() & 0x0F) << 4)) );
 
-    QTextCodec *codec = QAtUtils::codec( "gsm" );
-    QByteArray header;
+    if (scheme == QSMS_UCS2Alphabet)
+        mBuffer.append( 0x11 );
+    else
+        mBuffer.append( (char)(((scheme & 0x0F)<<4) | (m.language() & 0x0F)) );
+
+    mBuffer.append( (char)((m.numPages() & 0x0F) | ((m.page() & 0x0F) << 4)) );
 
     QString paddedText = m.text();
 
-    int numPad = 93 - getEncodedLength(paddedText, paddedText.length());
+    if (scheme == QSMS_UCS2Alphabet) {
+        char iso639[3];
+        unsigned short c;
+
+        iso639_2_from_language(m.language(), iso639);
+        c = ((iso639[1] & 0x7F)<<7) | (iso639[0] & 0x7F);
+        mBuffer.append( (char)(c & 0xFF) );
+        mBuffer.append( (char)(c >> 8) );
+        numPad = 40 - (paddedText.length());
+    }
+    else
+        numPad = 93 - getEncodedLength(paddedText, paddedText.length());
 
     for (int i = 0; i < numPad; i++)
-    	paddedText.append(QChar(0x0D));
+        paddedText.append(QChar(0x0D));
 
     setUserData(paddedText, scheme, codec, header,true);
 }
-- 
1.7.9.5


  parent reply	other threads:[~2012-06-25 14:38 UTC|newest]

Thread overview: 14+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-06-25 14:37 [PATCH 0/7] phonesim: Add UCS2 encoding support for CBS/USSD Philippe Nunes
2012-06-25 14:37 ` [PATCH 1/7] control: Fix empty sender checking Philippe Nunes
2012-06-22  8:20   ` Denis Kenzior
2012-06-25 14:37 ` [PATCH 2/7] controbase: Add combobox for CBS scheme selection Philippe Nunes
2012-06-22  8:08   ` Denis Kenzior
2012-06-25 14:37 ` [PATCH 3/7] qcbsmessage: Extend QCBSMessage class Philippe Nunes
2012-06-22 14:36   ` Denis Kenzior
2012-06-25 14:38 ` [PATCH 4/7] hardwaremanipulator: Add UCS2 encoding support for CBS message Philippe Nunes
2012-06-25 14:38 ` [PATCH 5/7] hardwaremanipulator: Add multi-page " Philippe Nunes
2012-06-22  8:12   ` Denis Kenzior
2012-06-25 14:38 ` Philippe Nunes [this message]
2012-06-22 14:36   ` [PATCH 6/7] sms: Extend CBS message formating to use UCS2 scheme Denis Kenzior
2012-06-25 14:38 ` [PATCH 7/7] hardwaremanipulator: Add USC2 encoding support for USSD Philippe Nunes
2012-06-22 14:09   ` Denis Kenzior

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1340635083-5877-7-git-send-email-philippe.nunes@linux.intel.com \
    --to=philippe.nunes@linux.intel.com \
    --cc=ofono@ofono.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.