📄 form1.cs
字号:
if(x > e.X)
{
pictureBox4.Left += (x - e.X);
x = e.X;
}
}
if(pictureBox4.Top > (300 - pictureBox4.Image.Height))
{
pictureBox4.Top += (e.Y - y);
y = e.Y;
}
else
{
if(y > e.Y)
{
pictureBox4.Top += (y - e.Y);
y = e.Y;
}
}
}
*/
}
/* 地图操作 */
/* 初始化,看支持那几个地图 */
public unsafe void MapPlaceInit()
{
int j;
if (!File.Exists("\\data\\maplist.dat"))
{
form1.Text = "找不到地图列表文件";
return;
}
StreamReader sr = File.OpenText("\\data\\maplist.dat");
String line1,line2;
j = 0;
String tmp = "";
while(((line1 = sr.ReadLine())!=null) && ((line2 = sr.ReadLine())!=null))
{
switch(line1[0])
{
case '0'://桂林地图
tmp = "桂林地图";
break;
case '1'://广西地图
tmp = "广西地图";
break;
case '2'://广东地图
tmp = "广东地图";
break;
case '3'://湖南地图
tmp = "湖南地图";
break;
case '4'://永州地图
tmp = "永州地图";
break;
case '5'://武汉地图
tmp = "武汉地图";
break;
default:
return;
break;
}
maplist[j].title = tmp;
maplist[j].mapindex = (byte)line1[0];
maplist[j].mapindex -= 0x30;
maplist[j++].mappath = line2;
}
sr.Close();
}
/* 将图片文件读入到存储缓冲中去 */
public void MainLoadMap(string _map)
{
Graphics g = this.CreateGraphics();
b = CreateBitmapFromFile(g, _map);
if (b == null)
{
form1.Text = "找不到地图数据文件";
return;
}
pictureBox4.Image = b;
pictureBox4.Width = pictureBox4.Image.Width;
pictureBox4.Height = pictureBox4.Image.Height;
pictureBox4.Update();
}
/* 读入地图的初始值 */
public void MainGetMapBuf(int _mapnum)
{
int i;
for(i = 0; i < 10; i++)
{
if(_mapnum == maplist[i].mapindex)
{
g_filename = maplist[_mapnum].mappath + "mapinfo.dat";
MainMapInit(g_filename);
g_filename = maplist[_mapnum].mappath + "11.jpg";
MainLoadMap(g_filename);
break;
}
}
}
private Bitmap CreateBitmapFromFile(Graphics g, string FILE_NAME)
{
Bitmap b1 = null;
try
{
b1 = new Bitmap(FILE_NAME);
}
catch (Exception e)
{
form1.Text = "找不到地图数据文件";
}
return b1;
}
private void menuItem2_Click(object sender, System.EventArgs e)
{
try
{
b_isloadmap = true;
Application.Run(new Form2());
}
catch (Exception e1)
{
}
}
private void menuItem4_Click(object sender, System.EventArgs e)
{
form1.Text = "正在退出...";
g_sysisexit = true;
MainUartClose();
Thread.Sleep(2000);
Application.Exit();
}
private void Form1_GotFocus(object sender, System.EventArgs e)
{
form1.pictureBox4.Top = 24;
form1.pictureBox4.Left = 0;
if((g_currentmapplace == mapinfo.Form2.g_mapselect) || (mapinfo.Form2.g_mapselect == 0xFF))
{
return;
}
form1.Text = "正在装载地图...";
switch( mapinfo.Form2.g_mapselect)
{
case 0: //桂林地图
MainGetMapBuf(0);
form1.Text = "桂林地图";
break;
case 1: //广西地图
MainGetMapBuf(1);
form1.Text = "广西地图";
break;
case 2: //广东地图
MainGetMapBuf(2);
form1.Text = "广东地图";
break;
case 3:
MainGetMapBuf(3);
form1.Text = "湖南地图";
break;
case 4:
MainGetMapBuf(4);
form1.Text = "永州地图";
break;
case 5:
MainGetMapBuf(5);
form1.Text = "武汉地图";
break;
default:
switch(g_currentmapplace)
{
case 0: //桂林地图
form1.Text = "桂林地图";
break;
case 1: //
form1.Text = "广西地图";
break;
case 2: //广东地图
form1.Text = "广东地图";
break;
case 3:
form1.Text = "湖南地图";
break;
case 4:
form1.Text = "永州地图";
break;
case 5:
form1.Text = "武汉地图";
break;
default:
break;
}
break;
}
g_currentmapplace = mapinfo.Form2.g_mapselect;
form1.g_currenrMap = 0xff;
b_isloadmap = false;
}
/* 串口操作 */
void MainUartClose()
{
comport.Close();
}
public static void ReadThread() ////接收串口数据线程
{
int i = 0, j = 0, k;
byte[] aa = new byte[128];
byte[] buf = new byte[250];
while(true)
{
i = comport.Read(aa, 0, 128);
if(i > 0)
{
if((j + i) >= 250)
{
j = 0;
continue;
}
for(k = 0; k < i; k++)
{
buf[j+k] = aa[k];
}
j += i;
j = MainTerminalMsgProc(buf, j);
//comport.Write(aa, i);
}
if(j == 0)
{
Thread.Sleep(50);
}
else
{
continue;
}
if(form1.g_sysisexit == true)
{
break;
}
}
}
public static int MainTerminalMsgProc(byte[] _data, int _len)
{
int i,speed,j,direct;
byte framelen, tmp;
ulong temp1,temp2;
byte temp3,checksum = 0;
if(b_isloadmap == true) //正在装载地图时不再切换地图
{
return 0;
}
ReProcMsg:
for(i = 0; i < _len; i++)
{
if(_data[i] == 'B')
{
break;
}
}
if(i >= _len)
{
return 0;
}
framelen = _data[i+1];
if(_len < (framelen + 5 + i))
{
/* skip one no complete frame */
return _len;
}
tmp = _data[i+2];
if((framelen & tmp) != 0x00)
{
/* error frame */
return 0;
}
tmp = _data[i+3]; //帧类型
if(tmp > 0x06)
{
/* error */
return 0;
}
for(j = (i+ 1); j < (framelen + 4 + i); j++)
{
checksum ^= _data[j];
}
if(checksum != _data[j])
{
/* checksum error */
//return 0;
}
switch(tmp)
{
case 0x01:
tmp = _data[i+4];
if(tmp == 0x00)
{
//GPS正常
sys_info.SysSetGpsStatus(1);
//form1.Text = "GPS正常";
}
else
{
sys_info.SysSetGpsStatus(0);
//form1.Text = "GPS不正常";
}
break;
case 0x02:
tmp = _data[i+4];
if(tmp == 0x00)
{
//GSM正常
sys_info.SysSetGsmStatus(1);
form1.GsmModule.Image = form1.imageList1.Images[0];
//form1.Text = "GSM正常";
}
else
{
sys_info.SysSetGsmStatus(0);
form1.GsmModule.Image = form1.imageList1.Images[1];
//form1.Text = "GSM不正常";
}
break;
case 0x03://GPS 定位数据帧
//经度
i += 5;
if((_data[i] & 0x10) == 0x00)
{
//不精确
form1.Text = "GPS信号不精确";
return 0;
}
temp3 = (byte)(_data[i] & 0x0f);
temp1 = (ulong)temp3*100;
temp3 = (byte)(_data[i+1] & 0xf0);
temp1 += (ulong)(temp3>>4)*10;
temp3 = (byte)(_data[i+1] & 0x0f);
temp1 += (ulong)temp3; //度
temp3 = (byte)(_data[i+2] & 0xf0);
temp2 = (ulong)(temp3>>4)*100000;
temp3 = (byte)(_data[i+2] & 0x0f);
temp2 += (ulong)temp3*10000;
temp3 = (byte)(_data[i+3] & 0xf0);
temp2 += (ulong)(temp3>>4)*1000;
temp3 = (byte)(_data[i+3] & 0x0f);
temp2 += (ulong)temp3*100;
/////最后一位
temp3 = (byte)(_data[i+4] & 0xf0);
temp2 += (ulong)(temp3>>4)*10;
temp3 = (byte)(_data[i+4] & 0x0f);
temp2 += (ulong)temp3; //分
/////////////
currentx = (ulong)(temp1*60*10000 + temp2); //当前的经度(以分为单位)
//纬度
temp3 = (byte)(_data[i+5] & 0xf0);
temp1 = (ulong)(temp3>>4)*10;
temp3 = (byte)(_data[i+5] & 0x0f);
temp1 = (ulong)temp3 + temp1; //度
temp3 = (byte)(_data[i+6] & 0xf0);
temp2 = (ulong)(temp3>>4)*100000;
temp3 = (byte)(_data[i+6] & 0x0f);
temp2 = (ulong)temp3*10000 + temp2;
temp3 = (byte)(_data[i+7] & 0xf0);
temp2 = (ulong)(temp3>>4)*1000 + temp2;
temp3 = (byte)(_data[i+7] & 0x0f);
temp2 = (ulong)temp3*100 + temp2;
/////最后一位
temp3 = (byte)(_data[i+8] & 0xf0);
temp2 = (ulong)(temp3>>4)*10 + temp2;
temp3 = (byte)(_data[i+8] & 0x0f);
temp2 = (ulong)temp3 + temp2; //分
///////////
currenty = (uint)(temp1*60*10000 + temp2); //当前的纬度(以分为单位)
i = i+15; //速度
speed = ((_data[i] & 0xf0) >> 4) * 100 + ((_data[i] & 0x0f) * 10);
i++;
speed += ((_data[i] & 0xf0) >> 4);
speed = (speed * 1852) / 1000; ///转换成km/s
//方向
i++;
direct = ((_data[i] & 0xf0) >> 4) * 100 + ((_data[i] & 0x0f) * 10);
i++;
direct += ((_data[i] & 0xf0) >> 4);
/*
switch(direct / 90)
{
case 0:
if(direct % 90 < 45)
{
form1.pictureBox2.Width = form1.imageList1.Images[3].Width;
form1.pictureBox2.Height = form1.imageList1.Images[3].Height;
form1.pictureBox2.Image = form1.imageList1.Images[3];
}
else
{
form1.pictureBox2.Width = form1.imageList1.Images[4].Width;
form1.pictureBox2.Height = form1.imageList1.Images[4].Height;
form1.pictureBox2.Image = form1.imageList1.Images[4];
}
break;
case 1:
if(direct % 90 < 45)
{
form1.pictureBox2.Width = form1.imageList1.Images[8].Width;
form1.pictureBox2.Height = form1.imageList1.Images[8].Height;
form1.pictureBox2.Image = form1.imageList1.Images[8];
}
else
{
form1.pictureBox2.Width = form1.imageList1.Images[5].Width;
form1.pictureBox2.Height = form1.imageList1.Images[5].Height;
form1.pictureBox2.Image = form1.imageList1.Images[5];
}
break;
case 2:
if(direct % 90 < 45)
{
form1.pictureBox2.Width = form1.imageList1.Images[9].Width;
form1.pictureBox2.Height = form1.imageList1.Images[9].Height;
form1.pictureBox2.Image = form1.imageList1.Images[9];
}
else
{
form1.pictureBox2.Width = form1.imageList1.Images[6].Width;
form1.pictureBox2.Height = form1.imageList1.Images[6].Height;
form1.pictureBox2.Image = form1.imageList1.Images[6];
}
break;
case 3:
if(direct % 90 < 45)
{
form1.pictureBox2.Width = form1.imageList1.Images[10].Width;
form1.pictureBox2.Height = form1.imageList1.Images[10].Height;
form1.pictureBox2.Image = form1.imageList1.Images[10];
}
else
{
form1.pictureBox2.Width = form1.imageList1.Images[7].Width;
form1.pictureBox2.Height = form1.imageList1.Images[7].Height;
form1.pictureBox2.Image = form1.imageList1.Images[7];
}
break;
default:
break;
}
*/
//忽略小数点后面的数字
ShowMapFunc(currentx, currenty, speed);
break;
case 0x04://节电通知帧
tmp = _data[i+4];
if(tmp == 0x00)
{
sys_info.SysSetPowerStatus(0);
form1.Text = "节电...";
}
else
{
sys_info.SysSetPowerStatus(1);
}
break;
case 0x05://报警帧
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -