blob: abd0ef346e5a37f03bc30a5182d8a0377e725007 [file] [log] [blame]
b.liuced8dd02024-06-28 13:28:29 +08001#include <stdio.h>
2#include <stdlib.h>
3#include <string.h>
4#include <unistd.h>
5#include <limits.h>
6#include <stdarg.h>
7#include <unistd.h>
8#include <time.h>
9#include <fcntl.h>
10#include <include/log.h>
11
12#include "jacana_download.h"
13#include "jacana_mem.h"
14#include "jacana_log.h"
15#include "jacana_usleep.h"
16
17#undef LOG_TAG
18#define LOG_TAG "ABoot"
19
20#ifdef PATH_MAX
21#undef PATH_MAX
22#define PATH_MAX 127
23#else
24#define PATH_MAX 127
25#endif
26/*---------------------------------------------------------------------------*/
27char jacana_firmware_file_name[PATH_MAX];
28char jacana_pvt_file_name[PATH_MAX];
29#define ABOOT_PM_NAME "aboot.pm"
30#define ABOOT_CPU_FREQ "aboot 1248000"
31#define ABOOT_CPU "aboot"
32
33char gpioCtrlPath[128] = "/sys/devices/platform/asr-gps/ctrl";
34
35
36static void dubheWrite(char* str)
37{
38 int fd;
39 fd = open((const char*)gpioCtrlPath, O_WRONLY);
40
41 if (fd >= 0) {
b.liu9e8584b2024-11-06 19:21:28 +080042 if(write(fd, str, strlen(str))) {
43
44 }
b.liuced8dd02024-06-28 13:28:29 +080045 close(fd);
46 }
47}
48
49
50
51static int gpsHalReset()
52{
53 dubheWrite("reset 0");
54 jacana_delay_msleep(100);
55 dubheWrite("reset 1");
56 jacana_delay_msleep(100);
57 return 0;
58}
59
60static int gpsHalFWDone()
61{
b.liu9e8584b2024-11-06 19:21:28 +080062 dubheWrite("on");
b.liuced8dd02024-06-28 13:28:29 +080063 return 0;
64}
65
66static int gpsHalFWFail()
67{
b.liu9e8584b2024-11-06 19:21:28 +080068 dubheWrite("off");
b.liuced8dd02024-06-28 13:28:29 +080069 return 0;
70}
71/*---------------------------------------------------------------------------*/
72void *
73jacana_mem_alloc(size_t size)
74{
b.liu9e8584b2024-11-06 19:21:28 +080075 void *ptr;
b.liuced8dd02024-06-28 13:28:29 +080076 ptr = malloc(size);
77 return ptr;
78}
79/*---------------------------------------------------------------------------*/
80void
81jacana_mem_free(void *ptr)
82{
83 free(ptr);
84}
85/*---------------------------------------------------------------------------*/
86extern int slogFd;
87int
88jacana_log_printf(const char *format, ...)
89{
90 int write_length = 0;
91 va_list args;
92 char buf[1024];
93 va_start(args, format);
94 write_length = vsnprintf(buf, 1024, format, args);
95 va_end(args);
96
97 __android_log_printf(LOG_ID_RADIO, LOG_ERR_LEVEL, "%s", buf);
98
99 return write_length;
100}
101
102/*---------------------------------------------------------------------------*/
103int
104jacana_delay_usleep(unsigned long useconds)
105{
106
107 (void)useconds;
108 jacana_log_printf("jacana_delay_usleep: %d\n", useconds);
109
110 return 0;
111}
112
113
114/*---------------------------------------------------------------------------*/
115int
116jacana_delay_msleep(unsigned long mseconds)
117{
118 struct timespec wait;
119 wait.tv_sec = mseconds / 1000;
120 wait.tv_nsec = (mseconds % 1000) * 1000 * 1000;
121 nanosleep(&wait, NULL);
122
123 return 0;
124}
125
126/*---------------------------------------------------------------------------*/
127static int
128gnss_module_lock( void )
129{
130 FILE *flk;
131 int ret = -1;
132
133 flk = fopen("/sys/power/wake_lock", "w");
134 if(flk) {
135 fprintf(flk, ABOOT_PM_NAME);
136 ret = fclose(flk);
137 }
138
139 flk = fopen("/sys/power/cpu_freq_min_pm_qos", "w");
140 if(flk) {
141 fprintf(flk, ABOOT_CPU_FREQ);
142 ret = fclose(flk);
143 }
144 return ret;
145}
146
147/*---------------------------------------------------------------------------*/
148static int
149gnss_module_unlock( void )
150{
151 FILE *flk;
152 int ret = -1;
153
154 flk = fopen("/sys/power/wake_unlock", "w");
155 if(flk) {
156 fprintf(flk, ABOOT_PM_NAME);
157 ret = fclose(flk);
158 }
159
160 flk = fopen("/sys/power/cpu_freq_min_pm_unqos", "w");
161 if(flk) {
162 fprintf(flk, ABOOT_CPU);
163 ret = fclose(flk);
164 }
165 return ret;
166}
167
168/*---------------------------------------------------------------------------*/
169static void
170usage(const char *prog)
171{
172 fprintf(stderr, "usage: %s [options]\n", prog);
173 fprintf(stderr, "example: jacana_download -B 115200 -s ttyUSB1 -F firmware.bin -P pvt.bin\n");
174 fprintf(stderr, "Options are:\n");
175 fprintf(stderr, " -B baudrate 9600,19200,38400,57600,115200,921600 (default 115200)\n");
176 fprintf(stderr, " -s siodev Serial device (e.x. /dev/ttyUSB0)\n");
177 fprintf(stderr, " -F firmware Firmware file name\n");
178 fprintf(stderr, " -P pvt PVT file name\n");
179}
180/*---------------------------------------------------------------------------*/
181int
182main(int argc, char *argv[])
183{
184 const char *prog;
185 char serial_dev[32];
186 int baudrate = 115200;
187 int c;
188 int ret = 0;
189// int i = 0;
190
191 /*LOGCAT showing with ACAT Tool */
192 set_service_log_tag(LOG_TAG);
193
194 prog = argv[0];
195 while((c = getopt(argc, argv, "B:s:F:P:h?")) != -1) {
196 switch(c) {
197 case 'B':
198 baudrate = atoi(optarg);
199 break;
200
201 case 's':
202 if(strncmp("/dev/", optarg, 5) == 0) {
203 strcpy(serial_dev, optarg);
204 } else {
205 sprintf(serial_dev, "/dev/%s", optarg);
206 }
207 break;
208
209 case 'F':
210 strcpy(jacana_firmware_file_name, optarg);
211 break;
212
213 case 'P':
214 strcpy(jacana_pvt_file_name, optarg);
215 break;
216
217 case '?':
218 case 'h':
219 default:
220 usage(prog);
221 exit(1);
222 break;
223 }
224 }
225
226 if(!strlen(serial_dev) || !strlen(jacana_firmware_file_name)
227 || !strlen(jacana_pvt_file_name)) {
228 usage(prog);
229 exit(1);
230 }
231
232//for( i=0; i<3; i++) {
233 /* Reset Jacana Module..*/
234 gpsHalReset();
235
236 /* Disable PM. */
237 gnss_module_lock();
238 ret = jacana_aboot_tiny_download(serial_dev, baudrate);
239 gnss_module_unlock();
240
241// if (!ret)
242// break;
243// }
244
245 /* Mark Done. */
b.liu9e8584b2024-11-06 19:21:28 +0800246 if (!ret)
b.liuced8dd02024-06-28 13:28:29 +0800247 gpsHalFWDone();
248 else
249 gpsHalFWFail();
b.liu9e8584b2024-11-06 19:21:28 +0800250
b.liuced8dd02024-06-28 13:28:29 +0800251 return ret;
252}