1e7d386dcacc9733cd0347da2871415449006f7f7Paul Crowley /*
2e7d386dcacc9733cd0347da2871415449006f7f7Paul Crowley  * Copyright (C) 2015 NXP Semiconductors
3e7d386dcacc9733cd0347da2871415449006f7f7Paul Crowley  *
4e7d386dcacc9733cd0347da2871415449006f7f7Paul Crowley  * Licensed under the Apache License, Version 2.0 (the "License");
5e7d386dcacc9733cd0347da2871415449006f7f7Paul Crowley  * you may not use this file except in compliance with the License.
6e7d386dcacc9733cd0347da2871415449006f7f7Paul Crowley  * You may obtain a copy of the License at
7e7d386dcacc9733cd0347da2871415449006f7f7Paul Crowley  *
8e7d386dcacc9733cd0347da2871415449006f7f7Paul Crowley  *      http://www.apache.org/licenses/LICENSE-2.0
9e7d386dcacc9733cd0347da2871415449006f7f7Paul Crowley  *
10e7d386dcacc9733cd0347da2871415449006f7f7Paul Crowley  * Unless required by applicable law or agreed to in writing, software
11e7d386dcacc9733cd0347da2871415449006f7f7Paul Crowley  * distributed under the License is distributed on an "AS IS" BASIS,
12e7d386dcacc9733cd0347da2871415449006f7f7Paul Crowley  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13e7d386dcacc9733cd0347da2871415449006f7f7Paul Crowley  * See the License for the specific language governing permissions and
14e7d386dcacc9733cd0347da2871415449006f7f7Paul Crowley  * limitations under the License.
15e7d386dcacc9733cd0347da2871415449006f7f7Paul Crowley  */
16e7d386dcacc9733cd0347da2871415449006f7f7Paul Crowley#include "JcDnld.h"
17e7d386dcacc9733cd0347da2871415449006f7f7Paul Crowley#include "JcopOsDownload.h"
18e7d386dcacc9733cd0347da2871415449006f7f7Paul Crowley#include <data_types.h>
19e7d386dcacc9733cd0347da2871415449006f7f7Paul Crowley#include <cutils/log.h>
20e7d386dcacc9733cd0347da2871415449006f7f7Paul Crowley
21e7d386dcacc9733cd0347da2871415449006f7f7Paul CrowleyJcopOsDwnld *jd;
22e7d386dcacc9733cd0347da2871415449006f7f7Paul CrowleyIChannel_t *channel;
23e7d386dcacc9733cd0347da2871415449006f7f7Paul Crowleystatic bool inUse = false;
24e7d386dcacc9733cd0347da2871415449006f7f7Paul Crowleystatic INT16 jcHandle;
25e7d386dcacc9733cd0347da2871415449006f7f7Paul Crowleyextern pJcopOs_Dwnld_Context_t gpJcopOs_Dwnld_Context;
26e7d386dcacc9733cd0347da2871415449006f7f7Paul Crowley/*******************************************************************************
27e7d386dcacc9733cd0347da2871415449006f7f7Paul Crowley**
28e7d386dcacc9733cd0347da2871415449006f7f7Paul Crowley** Function:        JCDNLD_Init
29e7d386dcacc9733cd0347da2871415449006f7f7Paul Crowley**
30e7d386dcacc9733cd0347da2871415449006f7f7Paul Crowley** Description:     Initializes the JCOP library and opens the DWP communication channel
31e7d386dcacc9733cd0347da2871415449006f7f7Paul Crowley**
32e7d386dcacc9733cd0347da2871415449006f7f7Paul Crowley** Returns:         TRUE if ok.
33e7d386dcacc9733cd0347da2871415449006f7f7Paul Crowley**
34e7d386dcacc9733cd0347da2871415449006f7f7Paul Crowley*******************************************************************************/
35e7d386dcacc9733cd0347da2871415449006f7f7Paul CrowleytJBL_STATUS JCDNLD_Init(IChannel_t *channel)
36e7d386dcacc9733cd0347da2871415449006f7f7Paul Crowley{
37e7d386dcacc9733cd0347da2871415449006f7f7Paul Crowley    static const char fn[] = "JCDNLD_Init";
38e7d386dcacc9733cd0347da2871415449006f7f7Paul Crowley    BOOLEAN stat = FALSE;
39e7d386dcacc9733cd0347da2871415449006f7f7Paul Crowley    jcHandle = EE_ERROR_OPEN_FAIL;
40e7d386dcacc9733cd0347da2871415449006f7f7Paul Crowley    ALOGD("%s: enter", fn);
41e7d386dcacc9733cd0347da2871415449006f7f7Paul Crowley
42e7d386dcacc9733cd0347da2871415449006f7f7Paul Crowley    if (inUse == true)
43e7d386dcacc9733cd0347da2871415449006f7f7Paul Crowley    {
44e7d386dcacc9733cd0347da2871415449006f7f7Paul Crowley        return STATUS_INUSE;
45e7d386dcacc9733cd0347da2871415449006f7f7Paul Crowley    }
46e7d386dcacc9733cd0347da2871415449006f7f7Paul Crowley    else if(channel == NULL)
47e7d386dcacc9733cd0347da2871415449006f7f7Paul Crowley    {
48e7d386dcacc9733cd0347da2871415449006f7f7Paul Crowley        return STATUS_FAILED;
49e7d386dcacc9733cd0347da2871415449006f7f7Paul Crowley    }
50e7d386dcacc9733cd0347da2871415449006f7f7Paul Crowley    /*TODO: inUse assignment should be with protection like using semaphore*/
51e7d386dcacc9733cd0347da2871415449006f7f7Paul Crowley    inUse = true;
52e7d386dcacc9733cd0347da2871415449006f7f7Paul Crowley    jd = JcopOsDwnld::getInstance();
53e7d386dcacc9733cd0347da2871415449006f7f7Paul Crowley    stat = jd->initialize (channel);
54e7d386dcacc9733cd0347da2871415449006f7f7Paul Crowley    if(stat != TRUE)
55e7d386dcacc9733cd0347da2871415449006f7f7Paul Crowley    {
56e7d386dcacc9733cd0347da2871415449006f7f7Paul Crowley        ALOGE("%s: failed", fn);
57e7d386dcacc9733cd0347da2871415449006f7f7Paul Crowley    }
58e7d386dcacc9733cd0347da2871415449006f7f7Paul Crowley    else
59e7d386dcacc9733cd0347da2871415449006f7f7Paul Crowley    {
60e7d386dcacc9733cd0347da2871415449006f7f7Paul Crowley        if((channel != NULL) &&
61e7d386dcacc9733cd0347da2871415449006f7f7Paul Crowley           (channel->open) != NULL)
62e7d386dcacc9733cd0347da2871415449006f7f7Paul Crowley        {
63e7d386dcacc9733cd0347da2871415449006f7f7Paul Crowley            jcHandle = channel->open();
64e7d386dcacc9733cd0347da2871415449006f7f7Paul Crowley            if(jcHandle == EE_ERROR_OPEN_FAIL)
65e7d386dcacc9733cd0347da2871415449006f7f7Paul Crowley            {
66e7d386dcacc9733cd0347da2871415449006f7f7Paul Crowley                ALOGE("%s:Open DWP communication is failed", fn);
67e7d386dcacc9733cd0347da2871415449006f7f7Paul Crowley                stat = FALSE;
68e7d386dcacc9733cd0347da2871415449006f7f7Paul Crowley            }
69e7d386dcacc9733cd0347da2871415449006f7f7Paul Crowley            else
70e7d386dcacc9733cd0347da2871415449006f7f7Paul Crowley            {
71e7d386dcacc9733cd0347da2871415449006f7f7Paul Crowley                ALOGE("%s:Open DWP communication is success", fn);
72e7d386dcacc9733cd0347da2871415449006f7f7Paul Crowley                stat = TRUE;
73e7d386dcacc9733cd0347da2871415449006f7f7Paul Crowley            }
74e7d386dcacc9733cd0347da2871415449006f7f7Paul Crowley        }
75e7d386dcacc9733cd0347da2871415449006f7f7Paul Crowley        else
76e7d386dcacc9733cd0347da2871415449006f7f7Paul Crowley        {
77e7d386dcacc9733cd0347da2871415449006f7f7Paul Crowley            ALOGE("%s: NULL DWP channel", fn);
78e7d386dcacc9733cd0347da2871415449006f7f7Paul Crowley            stat = FALSE;
79e7d386dcacc9733cd0347da2871415449006f7f7Paul Crowley        }
80e7d386dcacc9733cd0347da2871415449006f7f7Paul Crowley    }
81e7d386dcacc9733cd0347da2871415449006f7f7Paul Crowley    return (stat == true)?STATUS_OK:STATUS_FAILED;
82e7d386dcacc9733cd0347da2871415449006f7f7Paul Crowley}
83e7d386dcacc9733cd0347da2871415449006f7f7Paul Crowley
84e7d386dcacc9733cd0347da2871415449006f7f7Paul Crowley/*******************************************************************************
85e7d386dcacc9733cd0347da2871415449006f7f7Paul Crowley**
86e7d386dcacc9733cd0347da2871415449006f7f7Paul Crowley** Function:        JCDNLD_StartDownload
87e7d386dcacc9733cd0347da2871415449006f7f7Paul Crowley**
88e7d386dcacc9733cd0347da2871415449006f7f7Paul Crowley** Description:     Starts the JCOP update
89e7d386dcacc9733cd0347da2871415449006f7f7Paul Crowley**
90e7d386dcacc9733cd0347da2871415449006f7f7Paul Crowley** Returns:         SUCCESS if ok.
91e7d386dcacc9733cd0347da2871415449006f7f7Paul Crowley**
92e7d386dcacc9733cd0347da2871415449006f7f7Paul Crowley*******************************************************************************/
93e7d386dcacc9733cd0347da2871415449006f7f7Paul CrowleytJBL_STATUS JCDNLD_StartDownload()
94e7d386dcacc9733cd0347da2871415449006f7f7Paul Crowley{
95e7d386dcacc9733cd0347da2871415449006f7f7Paul Crowley    static const char fn[] = "JCDNLD_StartDownload";
96e7d386dcacc9733cd0347da2871415449006f7f7Paul Crowley    tJBL_STATUS status = STATUS_FAILED;
97e7d386dcacc9733cd0347da2871415449006f7f7Paul Crowley    BOOLEAN stat = FALSE;
98e7d386dcacc9733cd0347da2871415449006f7f7Paul Crowley
99e7d386dcacc9733cd0347da2871415449006f7f7Paul Crowley    status = jd->JcopOs_Download();
100e7d386dcacc9733cd0347da2871415449006f7f7Paul Crowley    ALOGE("%s: Exit; status=0x0%X", fn, status);
101e7d386dcacc9733cd0347da2871415449006f7f7Paul Crowley    return status;
102e7d386dcacc9733cd0347da2871415449006f7f7Paul Crowley}
103e7d386dcacc9733cd0347da2871415449006f7f7Paul Crowley
104e7d386dcacc9733cd0347da2871415449006f7f7Paul Crowley/*******************************************************************************
105e7d386dcacc9733cd0347da2871415449006f7f7Paul Crowley**
106e7d386dcacc9733cd0347da2871415449006f7f7Paul Crowley** Function:        JCDNLD_DeInit
107e7d386dcacc9733cd0347da2871415449006f7f7Paul Crowley**
108e7d386dcacc9733cd0347da2871415449006f7f7Paul Crowley** Description:     Deinitializes the JCOP Lib
109e7d386dcacc9733cd0347da2871415449006f7f7Paul Crowley**
110e7d386dcacc9733cd0347da2871415449006f7f7Paul Crowley** Returns:         TRUE if ok.
111e7d386dcacc9733cd0347da2871415449006f7f7Paul Crowley**
112e7d386dcacc9733cd0347da2871415449006f7f7Paul Crowley*******************************************************************************/
113e7d386dcacc9733cd0347da2871415449006f7f7Paul Crowleybool JCDNLD_DeInit()
114e7d386dcacc9733cd0347da2871415449006f7f7Paul Crowley{
115e7d386dcacc9733cd0347da2871415449006f7f7Paul Crowley    static const char fn[] = "JCDNLD_DeInit";
116e7d386dcacc9733cd0347da2871415449006f7f7Paul Crowley    BOOLEAN stat = FALSE;
117e7d386dcacc9733cd0347da2871415449006f7f7Paul Crowley    ALOGD("%s: enter", fn);
118e7d386dcacc9733cd0347da2871415449006f7f7Paul Crowley
119e7d386dcacc9733cd0347da2871415449006f7f7Paul Crowley    if(gpJcopOs_Dwnld_Context != NULL)
120e7d386dcacc9733cd0347da2871415449006f7f7Paul Crowley    {
121e7d386dcacc9733cd0347da2871415449006f7f7Paul Crowley        channel = gpJcopOs_Dwnld_Context->channel;
122e7d386dcacc9733cd0347da2871415449006f7f7Paul Crowley        if((channel != NULL) && (channel->doeSE_JcopDownLoadReset != NULL))
123e7d386dcacc9733cd0347da2871415449006f7f7Paul Crowley        {
124e7d386dcacc9733cd0347da2871415449006f7f7Paul Crowley            channel->doeSE_JcopDownLoadReset();
125e7d386dcacc9733cd0347da2871415449006f7f7Paul Crowley            if(channel->close != NULL)
126e7d386dcacc9733cd0347da2871415449006f7f7Paul Crowley            {
127e7d386dcacc9733cd0347da2871415449006f7f7Paul Crowley                stat = channel->close(jcHandle);
128e7d386dcacc9733cd0347da2871415449006f7f7Paul Crowley                if(stat != TRUE)
129e7d386dcacc9733cd0347da2871415449006f7f7Paul Crowley                {
130e7d386dcacc9733cd0347da2871415449006f7f7Paul Crowley                    ALOGE("%s:closing DWP channel is failed", fn);
131e7d386dcacc9733cd0347da2871415449006f7f7Paul Crowley                }
132e7d386dcacc9733cd0347da2871415449006f7f7Paul Crowley            }
133e7d386dcacc9733cd0347da2871415449006f7f7Paul Crowley            else
134e7d386dcacc9733cd0347da2871415449006f7f7Paul Crowley            {
135e7d386dcacc9733cd0347da2871415449006f7f7Paul Crowley                ALOGE("%s: NULL fp DWP_close", fn);
136e7d386dcacc9733cd0347da2871415449006f7f7Paul Crowley                stat = FALSE;
137e7d386dcacc9733cd0347da2871415449006f7f7Paul Crowley            }
138e7d386dcacc9733cd0347da2871415449006f7f7Paul Crowley        }
139e7d386dcacc9733cd0347da2871415449006f7f7Paul Crowley    }
140e7d386dcacc9733cd0347da2871415449006f7f7Paul Crowley    else
141e7d386dcacc9733cd0347da2871415449006f7f7Paul Crowley    {
142e7d386dcacc9733cd0347da2871415449006f7f7Paul Crowley        ALOGE("%s: NULL dwnld context", fn);
143e7d386dcacc9733cd0347da2871415449006f7f7Paul Crowley    }
144e7d386dcacc9733cd0347da2871415449006f7f7Paul Crowley    jd->finalize();
145e7d386dcacc9733cd0347da2871415449006f7f7Paul Crowley    /*TODO: inUse assignment should be with protection like using semaphore*/
146e7d386dcacc9733cd0347da2871415449006f7f7Paul Crowley    inUse = false;
147e7d386dcacc9733cd0347da2871415449006f7f7Paul Crowley    return stat;
148e7d386dcacc9733cd0347da2871415449006f7f7Paul Crowley}
149e7d386dcacc9733cd0347da2871415449006f7f7Paul Crowley
150e7d386dcacc9733cd0347da2871415449006f7f7Paul Crowley/*******************************************************************************
151e7d386dcacc9733cd0347da2871415449006f7f7Paul Crowley**
152e7d386dcacc9733cd0347da2871415449006f7f7Paul Crowley** Function:        JCDNLD_CheckVersion
153e7d386dcacc9733cd0347da2871415449006f7f7Paul Crowley**
154e7d386dcacc9733cd0347da2871415449006f7f7Paul Crowley** Description:     Check the existing JCOP OS version
155e7d386dcacc9733cd0347da2871415449006f7f7Paul Crowley**
156e7d386dcacc9733cd0347da2871415449006f7f7Paul Crowley** Returns:         TRUE if ok.
157e7d386dcacc9733cd0347da2871415449006f7f7Paul Crowley**
158e7d386dcacc9733cd0347da2871415449006f7f7Paul Crowley*******************************************************************************/
159e7d386dcacc9733cd0347da2871415449006f7f7Paul Crowleybool JCDNLD_CheckVersion()
160e7d386dcacc9733cd0347da2871415449006f7f7Paul Crowley{
161e7d386dcacc9733cd0347da2871415449006f7f7Paul Crowley
162e7d386dcacc9733cd0347da2871415449006f7f7Paul Crowley    /**
163e7d386dcacc9733cd0347da2871415449006f7f7Paul Crowley     * Need to implement in case required
164e7d386dcacc9733cd0347da2871415449006f7f7Paul Crowley     * */
165e7d386dcacc9733cd0347da2871415449006f7f7Paul Crowley    return TRUE;
166e7d386dcacc9733cd0347da2871415449006f7f7Paul Crowley}
167