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