source: rtos_arduino/trunk/arduino_lib/libraries/GSM/src/GSM3VoiceCallService.cpp@ 136

Last change on this file since 136 was 136, checked in by ertl-honda, 8 years ago

ライブラリとOS及びベーシックなサンプルの追加.

File size: 3.6 KB
Line 
1/*
2This file is part of the GSM3 communications library for Arduino
3-- Multi-transport communications platform
4-- Fully asynchronous
5-- Includes code for the Arduino-Telefonica GSM/GPRS Shield V1
6-- Voice calls
7-- SMS
8-- TCP/IP connections
9-- HTTP basic clients
10
11This library has been developed by Telefónica Digital - PDI -
12- Physical Internet Lab, as part as its collaboration with
13Arduino and the Open Hardware Community.
14
15September-December 2012
16
17This library is free software; you can redistribute it and/or
18modify it under the terms of the GNU Lesser General Public
19License as published by the Free Software Foundation; either
20version 2.1 of the License, or (at your option) any later version.
21
22This library is distributed in the hope that it will be useful,
23but WITHOUT ANY WARRANTY; without even the implied warranty of
24MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
25Lesser General Public License for more details.
26
27You should have received a copy of the GNU Lesser General Public
28License along with this library; if not, write to the Free Software
29Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
30
31The latest version of this library can always be found at
32https://github.com/BlueVia/Official-Arduino
33*/
34#include <GSM3VoiceCallService.h>
35#include <Arduino.h>
36
37#include <GSM3ShieldV1VoiceProvider.h>
38GSM3ShieldV1VoiceProvider theShieldV1VoiceProvider;
39
40// While there is only a shield (ShieldV1) we will include it by default
41
42#define GSM3VOICECALLSERVICE_SYNCH 0x01 // 1: synchronous 0: asynchronous
43#define __TOUT__ 10000
44
45
46
47
48GSM3VoiceCallService::GSM3VoiceCallService(bool synch)
49{
50 if(synch)
51 flags |= GSM3VOICECALLSERVICE_SYNCH;
52 theGSM3MobileVoiceProvider->initialize();
53}
54
55GSM3_voiceCall_st GSM3VoiceCallService::getvoiceCallStatus()
56{
57 if(theGSM3MobileVoiceProvider==0)
58 return IDLE_CALL;
59
60 return theGSM3MobileVoiceProvider->getvoiceCallStatus();
61}
62
63int GSM3VoiceCallService::ready()
64{
65 if(theGSM3MobileVoiceProvider==0)
66 return 0;
67
68 return theGSM3MobileVoiceProvider->ready();
69}
70
71int GSM3VoiceCallService::voiceCall(const char* to, unsigned long timeout)
72{
73 if(theGSM3MobileVoiceProvider==0)
74 return 0;
75
76 if(flags & GSM3VOICECALLSERVICE_SYNCH )
77 {
78 theGSM3MobileVoiceProvider->voiceCall(to);
79 unsigned long m;
80 m=millis();
81 // Wait an answer for timeout
82 while(((millis()-m)< timeout )&&(getvoiceCallStatus()==CALLING))
83 delay(100);
84
85 if(getvoiceCallStatus()==TALKING)
86 return 1;
87 else
88 return 0;
89 }
90 else
91 {
92 return theGSM3MobileVoiceProvider->voiceCall(to);
93 }
94
95}
96
97int GSM3VoiceCallService::answerCall()
98{
99 if(theGSM3MobileVoiceProvider==0)
100 return 0;
101
102 return waitForAnswerIfNeeded(theGSM3MobileVoiceProvider->answerCall());
103}
104
105int GSM3VoiceCallService::hangCall()
106{
107 if(theGSM3MobileVoiceProvider==0)
108 return 0;
109
110 return waitForAnswerIfNeeded(theGSM3MobileVoiceProvider->hangCall());
111}
112
113int GSM3VoiceCallService::retrieveCallingNumber(char* buffer, int bufsize)
114{
115 if(theGSM3MobileVoiceProvider==0)
116 return 0;
117
118 return waitForAnswerIfNeeded(theGSM3MobileVoiceProvider->retrieveCallingNumber(buffer, bufsize));
119}
120
121int GSM3VoiceCallService::waitForAnswerIfNeeded(int returnvalue)
122{
123 // If synchronous
124 if(flags & GSM3VOICECALLSERVICE_SYNCH )
125 {
126 unsigned long m;
127 m=millis();
128 // Wait for __TOUT__
129 while(((millis()-m)< __TOUT__ )&&(ready()==0))
130 delay(100);
131 // If everything was OK, return 1
132 // else (timeout or error codes) return 0;
133 if(ready()==1)
134 return 1;
135 else
136 return 0;
137 }
138 // If not synchronous just kick ahead the coming result
139 return ready();
140}
141
142
143
144
Note: See TracBrowser for help on using the repository browser.