Meilleure fermeture du driver en cas d'erreur persistante
ajout de gestion des temps brk&mab sur arduinov3
This commit is contained in:
parent
d93631e6d6
commit
8367b66485
6 changed files with 19 additions and 30 deletions
|
|
@ -103,7 +103,7 @@ namespace DMX2
|
||||||
|
|
||||||
void MainLoop()
|
void MainLoop()
|
||||||
{
|
{
|
||||||
while(etat != etatAutomate.Fin)
|
while(!disposed && etat != etatAutomate.Fin)
|
||||||
{
|
{
|
||||||
switch (etat) {
|
switch (etat) {
|
||||||
case etatAutomate.Deconnecte:
|
case etatAutomate.Deconnecte:
|
||||||
|
|
|
||||||
|
|
@ -209,7 +209,7 @@ namespace DMX2
|
||||||
void MainLoop ()
|
void MainLoop ()
|
||||||
{
|
{
|
||||||
//DateTime t = DateTime.Now;
|
//DateTime t = DateTime.Now;
|
||||||
while (etat != etatAutomate.Fin) {
|
while (!disposed && etat != etatAutomate.Fin) {
|
||||||
try {
|
try {
|
||||||
switch (etat) {
|
switch (etat) {
|
||||||
case etatAutomate.Deconnecte:
|
case etatAutomate.Deconnecte:
|
||||||
|
|
|
||||||
|
|
@ -42,7 +42,7 @@ namespace DMX2
|
||||||
Fin
|
Fin
|
||||||
}
|
}
|
||||||
|
|
||||||
const int timeout = 200;
|
const int timeout = 100;
|
||||||
|
|
||||||
// tampons Entrée/Sortie
|
// tampons Entrée/Sortie
|
||||||
public byte[] inputbuffer = new byte[516];
|
public byte[] inputbuffer = new byte[516];
|
||||||
|
|
@ -130,15 +130,12 @@ namespace DMX2
|
||||||
Thread.Sleep (1500);
|
Thread.Sleep (1500);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
serial = new SerialPort (portname);//, 9600, Parity.None, 8, StopBits.One);
|
serial = new SerialPort (portname);
|
||||||
Console.WriteLine (portname);
|
Console.WriteLine (portname);
|
||||||
//serial.DtrEnable = false;
|
|
||||||
//serial.ReadTimeout = 200;
|
|
||||||
//serial.WriteTimeout = 200;
|
|
||||||
try {
|
try {
|
||||||
serial.RtsEnable = true;
|
serial.RtsEnable = true;
|
||||||
serial.Open ();
|
serial.Open ();
|
||||||
//Attente(DateTime.Now.AddMilliseconds(100));
|
|
||||||
|
|
||||||
if(Synchronisation())
|
if(Synchronisation())
|
||||||
etat = etatAutomate.Transmission;
|
etat = etatAutomate.Transmission;
|
||||||
|
|
@ -169,11 +166,11 @@ namespace DMX2
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
// Au cas ou le boitier attends une fin de commande : envoi 1030 octets a 0 (le boitier ignorera tout seul la suite)
|
// Au cas ou le boitier attends une fin de commande : envoi 1030 octets a 0 (le boitier ignorera tout seul la suite)
|
||||||
byte[] tmpBuffer = new byte[530];
|
byte[] tmpBuffer = new byte[2];
|
||||||
//serial.Write (tmpBuffer, 0, 530);
|
serial.Write (tmpBuffer, 0, tmpBuffer.Length);
|
||||||
|
|
||||||
// On attends un peu
|
// On attends un peu
|
||||||
Thread.Sleep (100);
|
Thread.Sleep (50);
|
||||||
|
|
||||||
// Vide le buffer d'entree
|
// Vide le buffer d'entree
|
||||||
if (serial.BytesToRead > 0)
|
if (serial.BytesToRead > 0)
|
||||||
|
|
@ -204,7 +201,7 @@ namespace DMX2
|
||||||
void MainLoop ()
|
void MainLoop ()
|
||||||
{
|
{
|
||||||
//DateTime t = DateTime.Now;
|
//DateTime t = DateTime.Now;
|
||||||
while (etat != etatAutomate.Fin) {
|
while (!disposed && etat != etatAutomate.Fin) {
|
||||||
try {
|
try {
|
||||||
switch (etat) {
|
switch (etat) {
|
||||||
case etatAutomate.Deconnecte:
|
case etatAutomate.Deconnecte:
|
||||||
|
|
|
||||||
|
|
@ -52,6 +52,8 @@ namespace DMX2
|
||||||
return DriverBoitierV1.Load(conduite, el);
|
return DriverBoitierV1.Load(conduite, el);
|
||||||
case "DriverBoitierV2":
|
case "DriverBoitierV2":
|
||||||
return DriverBoitierV2.Load(conduite,el);
|
return DriverBoitierV2.Load(conduite,el);
|
||||||
|
case "DriverBoitierV3":
|
||||||
|
return DriverBoitierV3.Load(conduite,el);
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -18,10 +18,10 @@ volatile int index_input_pc=0; // entrée serial 0
|
||||||
volatile int index_output_pc=0; // sortie serial 0
|
volatile int index_output_pc=0; // sortie serial 0
|
||||||
volatile int index_input_dmx=513; // entrée dmx
|
volatile int index_input_dmx=513; // entrée dmx
|
||||||
volatile int index_output_dmx=0; //sortie dmx -2 en attente de fin de transmission; -1 break; 0 à 512 transmission
|
volatile int index_output_dmx=0; //sortie dmx -2 en attente de fin de transmission; -1 break; 0 à 512 transmission
|
||||||
volatile int index_output_dmx2=0; //sortie dmx -2 en attente de fin de transmission; -1 break; 0 à 512 transmission
|
|
||||||
volatile int etat_input_pc=0; // 0 raz ; 1 esc reçu ; 2 D reçu : pret à recevoir ; 3 prèt à emmetre
|
volatile int etat_input_pc=0; // 0 raz ; 1 esc reçu ; 2 D reçu : pret à recevoir ; 3 prèt à emmetre
|
||||||
volatile int start_code_rec=-1;
|
volatile int start_code_rec=-1;
|
||||||
char key; // caractère reçu serial 0
|
|
||||||
int ledPin = 13; // led interne
|
int ledPin = 13; // led interne
|
||||||
int tx1pin = 1; // pin DMX serial 1
|
int tx1pin = 1; // pin DMX serial 1
|
||||||
|
|
||||||
|
|
@ -33,6 +33,7 @@ volatile int emissionPc=0;
|
||||||
|
|
||||||
|
|
||||||
/* ------------ Gestion Liaison USB -------------- */
|
/* ------------ Gestion Liaison USB -------------- */
|
||||||
|
/* On a surcharge tout ca pour optimiser les temps de transfert */
|
||||||
|
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
|
|
@ -89,7 +90,7 @@ bool CDC_Setup(Setup& setup)
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
// lancé par interruption USB sur reception d'un char
|
// lancé par interruption USB sur reception d'un char <- Cette fonction nécessite une modif de la lib arduino
|
||||||
void CDC_accept()
|
void CDC_accept()
|
||||||
{
|
{
|
||||||
int c = USB_Recv(CDC_RX);
|
int c = USB_Recv(CDC_RX);
|
||||||
|
|
@ -175,12 +176,12 @@ void litUSB(char c)
|
||||||
|
|
||||||
case 11: // 2nd parametre : duree du break en us
|
case 11: // 2nd parametre : duree du break en us
|
||||||
etat_input_pc++;
|
etat_input_pc++;
|
||||||
//brk_timer_end = 255 - (c/2) +1;
|
brk_timer_end = (c/2);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 12: // 3eme parametre : duree du mab en us
|
case 12: // 3eme parametre : duree du mab en us
|
||||||
etat_input_pc++;
|
etat_input_pc++;
|
||||||
//mab_timer_end = 255 - (c/2) +1;
|
mab_timer_end = (c/2);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 13: // 4eme parametre : merge
|
case 13: // 4eme parametre : merge
|
||||||
|
|
@ -259,7 +260,6 @@ ISR(TIMER4_COMPA_vect) {
|
||||||
digitalWrite(tx1pin, HIGH); // on met la broche 18 à 1 pendant 10 µs
|
digitalWrite(tx1pin, HIGH); // on met la broche 18 à 1 pendant 10 µs
|
||||||
|
|
||||||
index_output_dmx=-3;
|
index_output_dmx=-3;
|
||||||
index_output_dmx2=-3;
|
|
||||||
OCR4A = mab_timer_end ;
|
OCR4A = mab_timer_end ;
|
||||||
TCNT4 = 0 ;// RAZ compteur timer
|
TCNT4 = 0 ;// RAZ compteur timer
|
||||||
TIFR4 = 0 ; //Clear Flags timer
|
TIFR4 = 0 ; //Clear Flags timer
|
||||||
|
|
@ -283,7 +283,6 @@ void setup() {
|
||||||
|
|
||||||
// init pin led interne en sortie
|
// init pin led interne en sortie
|
||||||
pinMode(ledPin, OUTPUT);
|
pinMode(ledPin, OUTPUT);
|
||||||
|
|
||||||
|
|
||||||
// initialisation à 250k de serial 1
|
// initialisation à 250k de serial 1
|
||||||
// baudrate
|
// baudrate
|
||||||
|
|
@ -302,15 +301,11 @@ void setup() {
|
||||||
sbi(UCSR1B, RXCIE1); //Interruption sur reception
|
sbi(UCSR1B, RXCIE1); //Interruption sur reception
|
||||||
sbi(UCSR1B, TXCIE1); //Interruption pour fin de transmission
|
sbi(UCSR1B, TXCIE1); //Interruption pour fin de transmission
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// init timer break
|
// init timer break
|
||||||
TIMSK4 = 0;
|
TIMSK4 = 0;
|
||||||
TCCR4C = 0;
|
TCCR4C = 0;
|
||||||
TCCR4B = 0;
|
TCCR4B = 0;
|
||||||
TCCR4A = 0; // 00000000
|
TCCR4A = 0; // 00000000
|
||||||
// ASSR &= ~(1<<AS2); <--------------------
|
|
||||||
TCNT4 = 0; // compteur
|
TCNT4 = 0; // compteur
|
||||||
TC4H=0;
|
TC4H=0;
|
||||||
|
|
||||||
|
|
@ -318,11 +313,6 @@ void setup() {
|
||||||
|
|
||||||
// préparation du premier break
|
// préparation du premier break
|
||||||
index_output_dmx=-1;
|
index_output_dmx=-1;
|
||||||
// PORTA = 255;
|
|
||||||
// DDRA = 0;
|
|
||||||
// PORTC = 255;
|
|
||||||
// DDRC = 0;
|
|
||||||
tab_input_dmx[533]=0;
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -341,13 +331,13 @@ void loop() {
|
||||||
TCCR4B = 6; // 00000011 division par 32 de l'horloge base => 2µs
|
TCCR4B = 6; // 00000011 division par 32 de l'horloge base => 2µs
|
||||||
} // fin du break
|
} // fin du break
|
||||||
|
|
||||||
// suite du code
|
// octets d'état. Pour le moment, tous à 0
|
||||||
tab_input_dmx[513]= 0;
|
tab_input_dmx[513]= 0;
|
||||||
tab_input_dmx[514]= 0;
|
tab_input_dmx[514]= 0;
|
||||||
tab_input_dmx[515]=0;
|
tab_input_dmx[515]=0;
|
||||||
tab_input_dmx[516]=0;
|
tab_input_dmx[516]=0;
|
||||||
|
|
||||||
if(_usbLineInfo.lineState) { // Si port ouvert
|
if(_usbLineInfo.lineState) { // Si port serie USB ouvert
|
||||||
if(emissionPc!=0) {
|
if(emissionPc!=0) {
|
||||||
ecritUSB();
|
ecritUSB();
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue