Aracılığıyla paylaş


USSD'ye Genel Bakış

Yapılandırılmamış Tamamlayıcı Hizmet Verileri (USSD), Mobil İletişim için Global Sistem (GSM) cihazları tarafından mobil ağ operatörleriyle (genellikle "MO" olarak adlandırılır) iletişim kurmak için kullanılan bir iletişim protokolüdür.

USSD'yi anlamak için en yakın ilişkili eşdüzey ile karşılaştırmak yararlı olur: kısa mesaj hizmeti (SMS). USSD ve SMS hem GSM standartlarıdır, yani ikinci nesil mobil cihazlarda özellik olarak tanıtılmıştır. ANCAK SMS'in aksine USSD, oturum tabanlı bir bağlantıdır. SMS oturumsuz kısa mesajlaşma için kullanılırken, USSD genellikle bir mobil cihazın yönetim ve kontrolü için kullanılır. Oturumun sürdürülmesi gerektiğinden USSD, SMS'in yaptığı gibi depolama ve iletme özelliğini desteklemez. Hem USSD hem de SMS iletileri 7 bit GSM uyumlu karakterlerle gönderilir, ancak USSD, SMS için 160'ın aksine en fazla 184 karakterden fazladır.

USSD iletileri, çeviriciyi açıp bir kod yazarak bir cep telefonundan gönderilebilir. Tüm kodlar her telefon veya MO tarafından desteklenmez. Bazı durumlarda, telefon yazılımı veya işletim sistemi kodların el ile gönderilmesini engelleyebilir. Uygulanması gereken kodlardan biri *#06#'tır. Bu kod modemin Uluslararası Mobil Donanım Tanımlayıcısını (IMEI) döndürür, ancak bazı telefonlar bunu doğrudan çevirmenizi engeller. Telefonunuzun ayarları aracılığıyla modemin IMEI'sini bulmanın geleneksel yöntemlerine uyarsanız, bu numara bu kod kullanılarak alınacaktır.

Telefon donanımı, IMEI örneğindeki gibi bir kodun komutunu doğrudan işleyebiliyorsa hiçbir ağ oturumu başlatılmaz. Ağ iletişimi gerektiren diğer kodlar bir oturum açar ve ardından varsa bir komut ve gerekli parametrelerden oluşan bir ileti gönderir. Bunun bir örneği, geçerli bakiyenizi ve Mobil Operatör (MO) ile olan plan durumunuzu denetleyen bir koddur.

Windows'da USSD, WinRT API yüzeyi olarak uygulanır. Bu arabirimin uygulama sınıfları USSD oturumları için bir durum makinesi görevi görür, ancak esas işi yapmak için WWAN Hizmeti'ne güvenir. Bu API'ler bir fabrika düzeniyle uygulanır.

USSD'yi Uygulama

Hatırlanması gereken önemli nokta, genel kullanıma yönelik API'nin IDL tarafından tanımlandığıdır. Özellikle WinRT'yi bilmiyorsanız bu nedenle uygulama kafa karıştırıcı olabilir. Karışıklığın bir kısmı, "fabrika" sözcüğünün belirsiz bir şekilde kullanılmasından geliyor. Bir fabrika, statik bir arayüzün sınıf uygulamasını veya çalışma zamanı sınıfına etkinleştirilebilir bir arayüz sağlayan gerçek bir fabrika olabilir.

Bu konu, WinRT kavramlarını inceler ve ardından bu kavramları temel alarak uygulamayı açıklar. Daha fazla açıklama için her zaman IDL'ye başvurabilirsiniz.

Arabirimler

Arabirimler, Uygulama İkili Arabirimini (ABI) tanımlar. Bunlar, arabirimini uygulayan herhangi bir sınıfta çağırabileceğiniz işlevleri açıklar.

Çalışma Süresi Sınıfları

Bunlar gerçek sınıflardır. ABI'ye sınıf adları olarak sunulanları isimleriyle temsil ederler. Her çalışma zamanı sınıfının sıfır veya daha fazla arabirimi olabilir (ancak bir veya daha fazla arabirimi varsa en az bir varsayılan arabirim bildirmesi gerekir), sıfır veya daha fazla statik arabirim ve gerekirse bir activatable etiketi. Bu arabirimlerin her biri farklı dosyalarda farklı "Impl" sınıfları olarak uygulanır, ancak ABI için tek, birleşik bir sınıf gibi görünürler.

Tipik bir arabirim, mevcut bir nesnede örnek yöntemleri olarak görünür.

Statik arabirim, istemciye çalışma zamanı sınıfının kendisinde statik yöntemler olarak görünür.

Activatable etiketi, çalışma zamanı sınıfının bir örneğini oluşturacak fabrika arabirimini tanımlar. Bu, istemci için tamamen gizlenir ve çalışma zamanı sınıfının bir oluşturucusu olarak görünür.

USSD Uygulaması

USSD uygulamasını gösteren Diyagramı.

Akış: Aç, Gönder, Al, Kapat.

Aç, Gönder

yanıt işlemiyle USSD isteğini gösteren Flow diyagramı.

  1. İstemci UssdSession nesnesini oluşturmak için UssdSession.CreateFromNetworkAccountId veya UssdSession.CreateFromNetworkInterfaceId statik işlevlerinden birini kullanır.

  2. Çağrılan API'den bağımsız olarak, UssdSession'ı başlatmak için bir ağ arabirimi kimliği gerekir. *NetworkAccountID durumunda, Hesap Kimliği'nden ağ arabirimi kimliğini almak için adımlar atılır. CreateInternal(), UssdSession örneğini oluşturmak ve yeni oluşturulan örnekte Initialize() öğesini çağırmak için çağrılır. Başlatma adımları sırasında bir çalışan iş parçacığı başlatılır ve iş parçacığına ait olayları yönetmek için bir olay tanıtıcısı oluşturulur. 3. ve 4. adımlar, örneğin Initialize() sırasında da gerçekleşir.

  3. Initialize() fonksiyonu, WwanWrapper üye nesnesinde çağrılır. Bu işlev, statik geri çağırma işlevinin yanı sıra statik işlevin geri çağırmayı bir nesne bağlamı ile eşlemesine olanak sağlayan bir bağlam kabul eder.

  4. WwanWrapper, WwanService için bir tanıtıcı açar, arabirimleri numaralandırır ve bağlam olarak statik bir geri çağırma işlev işaretçisi ve "this" sağlayarak USSD bildirimlerine abone olur.

  5. UssdSession nesnesi istemciye döndürülür.

  6. İstemci, oluşturucuyu bir ileti dizesiyle çağırarak yeni bir UssdMessage oluşturur. WinRT, bu süreçte UssdMessageFactory'yi gizler.

  7. İstemci, UssdMessage örneğini geçirerek oturum nesnesinde SendMessageAndGetReplyAsync'i çağırır.

  8. Şu anda SendMessageAndGetReplyAsync, UssdSendMessageAndGetReplyOperation adlı özel bir işlem nesnesi oluşturur. Adından, nesnenin yığın üzerinde gönderilen (ve yanıt bekleyen) tek bir iletinin mantığını kapsüllediği görünür, ama aslında durum böyle değildir. WinRT, zaman uyumsuz işlemler için özel bir out parametresi gerektirir. Bu parametreyi bu işlevin tanımında 2. parametre olarak görebiliriz.

    HRESULT SendMessageAndGetReplyAsync(
                [in] UssdMessage* message,
                [out, retval] Windows.Foundation.IAsyncOperation<UssdReply>** asyncInfo);
    

    Bu, typedef aracılığıyla adlandırılmış bir arabirim olan IUssdSendMessageAndGetReplyOperation işlemi, bu işlemin kaçınılmaz olarak bir UssdReply döndüreceğini vaat ederek bu parametreyi karşılar. Bu arabirim IDL'de tanımlanmaz, ancak UssdSendMessageAndGetReplyOperationImpl sınıfı tarafından uygulanır. Şunu unutmayın ki bu sınıfın başlığı özel bir uzantıya sahiptir.

    class UssdSendMessageAndGetReplyOperationImpl :
        public Microsoft::WRL::RuntimeClass<
            Windows::Networking::NetworkOperators::IUssdSendMessageAndGetReplyOperation,
            Windows::Internal::AsyncBaseFTM<IUssdSendMessageAndGetReplyCompletedHandler, Microsoft::WRL::SingleResult>>
    

    UssdSendMessageAndGetReplyOperation nesnesi, WinRT'nin bu zaman uyumsuz işlemin karmaşıklıklarını ve onunla birlikte gelen tüm bölümlendirme ve bellek aracılığını gizlemesini sağlar. Daha fazla bilgi için bkz. SendMessageAndGetReplyAsync .

    Şimdilik, yukarıda açıklanan zaman uyumsuz işlemin yalnızca bu işlemin mantığının gerçekten bulunduğu UssdSession nesnesine geri çağırdığını anlayın. UssdSession'un burada yapılan işi basitlik adına kapsadığını görselleştirebiliriz. Artık zaman uyumsuz doğaya rağmen aynı anda yalnızca bir UssdMessage gönderilebileceğini iddia edebiliriz.

    SendMessageAndGetReplyAsync işlevinin gerçekte yaptığı şey:

    • UssdSession nesnesi meşgul bir duruma dönüşür, UssdMessage içeriğini depolar ve zaman uyumsuz eylemi başlatır.
    • OnOperationStart(), zaman uyumsuz mantığın giriş noktasıdır. Bu senaryo için etkin bir oturum olmadığını varsayalım. Bu işlev RequestType=WwanUssdRequestInitiate ile bir WWAN_USSD_REQUEST nesnesi oluşturur.
    • Adım 9 ve 10, bu işlev tarafından gerçekleştirilir.
  9. m_wwanWrapper.SendRequest, iletiyi WwanService'e geçirme işlemini işlemek için çağrılır.

  10. WwanWrapper, eylemi gerçekleştirmek üzere WwanService API'lerini çağırmak için WwanService tutamacını kullanır.

Alın

USSD alma işlemini gösteren Flow diyagramı.

10. adımdan sonra, yeni bir USSD oturumu başlatmak ve bu oturum altında bir USSD iletisi göndermek için WwanService'e bir isteğin gönderildiği bir durumda kalırız. Bir süre sonra yanıt kullanılabilir duruma gelecek.

  1. WwanService, 4. adımda sağlanan statik geri çağırma işlevini, ekli bağlamla birlikte çağırır.
  2. Bağlam, WwanWrapper örneğini almak ve NotificationCallback() çağırmak için kullanılır.
  3. WwanWrapper, 11. adımla aynı kalıbı izler ve 3. adımda depolanan bağlamı sağlayarak UssdSession'a statik bir geri çağırma yapar.
  4. 12. adıma benzer şekilde bağlamsal bilgi, UssdSession nesnesindeki geri çağırmayı tetiklemek için kullanılır.
  5. UssdSession, WWAN_USSD_EVENT'i (kilit altında) depolar ve olayı işlemek için iş parçacığını bilgilendirir.
  6. HandleOperationReply() mevcut UssdSendMessageAndGetReplyOperationImpl nesnesini alır ve olay verilerini iç işleyicisine geçirir.
  7. İşlem, zaman uyumsuz eylemi tamamlanmış olarak işaretlemek için bir UssdReply oluşturacak ve ardından FireCompletion() öğesini çağıracaktır.
  8. WinRT, istemciye zaman uyumsuz eylemin tamamlanmasını gizler. (Ya eylemi beklemişler ya da geri çağırma mantığına sahipler.)

Aynı oturum altında daha fazla ileti gönderilebilir. Oturum korunduysa, gelecekteki RequestType WwanUssdRequestContinue olacaktır.

Kapatmak

USSD kapatma işlemini gösteren Flow diyagramı.

18. adımdan sonra istemci, UssdMessage yanıtını aldı. Ek iletiler göndermek için etkin UssdSession'ı kullanmaya devam etmiş veya olmayabilirler. Gelecekte bir noktada istemcinin UssdSession üzerinde Close() öğesini el ile çağıracağını varsayacağız. Eğer istemci Close() fonksiyonunu açıkça çağırmazsa, bu fonksiyon UssdSession'ın yıkıcı işlevi sırasında çağrılacaktır.

  1. İstemci, UssdSession örneğinde Close() öğesini çağırır.
  2. RequestType=WwanUssdRequestCancel ile bir WWAN_USSD_REQUEST oluşturulur.
  3. İstek, 9. adımda olduğu gibi m_wwanWrapper'a gönderildi.
  4. İstek, 10. adımda olduğu gibi WwanService'e gönderilir.

Bu isteğin sonucu önemli değildir. Fiilen oturum kapatılıyor. İletinin bir şekilde hiç teslim edilmemiş olduğu uç uç durumda bile, yeni bir USSD oturumu her zaman mevcut oturumu geçersiz kılar.

Donanım Laboratuvar Seti (HLK) Testleri

Bkz. HLKyükleme adımları.

HLK Studio'da cihazın Hücresel modem sürücüsüne bağlanın ve testi çalıştırın: Win6_4.MB. GSM. Data.TestUssd.

MB USSD Sorun Giderme Kılavuzu

  • MB Toplama Günlükleriyönergelerini kullanarak günlükleri toplayın ve kodunu çözün.

  • Filtreleme için anahtar sözcükler

    1. OID_WWAN_USSD
    2. NDIS_STATUS_WWAN_USSD
    3. WWAN_USSD_İSTEĞİ
    4. WWAN_USSD_ETKİNLİĞİ

Ayrıca Bkz.

MB USSD İşlemleri