int32 GPS_Serial_Send_Ack(gpsdevh *fd, GPS_PPacket *tra, GPS_PPacket *rec) { UC data[2]; GPS_Util_Put_Short(data,(US)(*rec)->type); GPS_Make_Packet(tra,LINK_ID[0].Pid_Ack_Byte,data,2); if(!GPS_Write_Packet(fd,*tra)) { GPS_Error("Error acknowledging packet"); gps_errno = SERIAL_ERROR; return 0; } return 1; }
int32 GPS_Command_Off(const char *port) { static UC data[2]; gpsdevh *fd; GPS_PPacket tra; GPS_PPacket rec; GPS_Util_Little(); if(!GPS_Device_On(port, &fd)) return gps_errno; if(!(tra = GPS_Packet_New()) || !(rec = GPS_Packet_New())) return MEMORY_ERROR; GPS_Util_Put_Short(data,COMMAND_ID[gps_device_command].Cmnd_Turn_Off_Pwr); /* robertl - LINK_ID isn't set yet. Hardcode it to Garmin spec value */ GPS_Make_Packet(&tra, 10, /* LINK_ID[gps_link_type].Pid_Command_Data, */ data,2); if(!GPS_Write_Packet(fd,tra)) return gps_errno; if(!GPS_Device_Chars_Ready(fd)) { if(!GPS_Get_Ack(fd, &tra, &rec)) return gps_errno; GPS_User("Power off command acknowledged"); } GPS_Packet_Del(&tra); GPS_Packet_Del(&rec); if(!GPS_Device_Off(fd)) return gps_errno; return 1; }